mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-30 19:00:09 +00:00 
			
		
		
		
	reworked deferred pool and now it's used instead of makeDeferredsQ(..)...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									7e045c9c7f
								
							
						
					
					
						commit
						a451547470
					
				| @ -368,7 +368,7 @@ if(window.CEF_dumpJSON != null){ | |||||||
| 
 | 
 | ||||||
| 		// attach the workers to the queue...
 | 		// attach the workers to the queue...
 | ||||||
| 		$.each(gids, function(_, gid){ | 		$.each(gids, function(_, gid){ | ||||||
| 			queue.enqueue(makeImagePreviews, gid, sizes, mode) | 			queue.enqueue(null, makeImagePreviews, gid, sizes, mode) | ||||||
| 				// XXX do we need to report seporate previews???
 | 				// XXX do we need to report seporate previews???
 | ||||||
| 				//.progress(function(state){ queue.notify(state) })
 | 				//.progress(function(state){ queue.notify(state) })
 | ||||||
| 				.always(function(){ queue.notify(gid, 'done') }) | 				.always(function(){ queue.notify(gid, 'done') }) | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								ui/files.js
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								ui/files.js
									
									
									
									
									
								
							| @ -843,7 +843,8 @@ function exportImagesTo(path, im_name, dir_name, size){ | |||||||
| 	selection.sort(imageOrderCmp) | 	selection.sort(imageOrderCmp) | ||||||
| 	var z = (('10e' + (selection.length + '').length) * 1 + '').slice(2) | 	var z = (('10e' + (selection.length + '').length) * 1 + '').slice(2) | ||||||
| 
 | 
 | ||||||
| 	var pool = makeDefferedPool() | 	// use an external pool...
 | ||||||
|  | 	var pool = makeDeferredPool() | ||||||
| 		.depleted(function(){ | 		.depleted(function(){ | ||||||
| 			showStatusQ('Export: done.') | 			showStatusQ('Export: done.') | ||||||
| 			res.resolve() | 			res.resolve() | ||||||
| @ -865,7 +866,7 @@ function exportImagesTo(path, im_name, dir_name, size){ | |||||||
| 			var o = selection.indexOf(gid) + '' | 			var o = selection.indexOf(gid) + '' | ||||||
| 			dest = dest.replace('%i', (z + o).slice(o.length)) | 			dest = dest.replace('%i', (z + o).slice(o.length)) | ||||||
| 
 | 
 | ||||||
| 			pool.enqueue(null, exportImageTo, [gid, path, dest, size]) | 			pool.enqueue(exportImageTo, gid, path, dest, size) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		path = normalizePath(path +'/'+ dir_name) | 		path = normalizePath(path +'/'+ dir_name) | ||||||
| @ -935,8 +936,6 @@ function readImagesOrientationQ(gids, no_update_loaded){ | |||||||
| 	// attach workers to queue...
 | 	// attach workers to queue...
 | ||||||
| 	$.each(gids, function(_, gid){ | 	$.each(gids, function(_, gid){ | ||||||
| 		last = queue.enqueue(readImageOrientation, gid, no_update_loaded) | 		last = queue.enqueue(readImageOrientation, gid, no_update_loaded) | ||||||
| 			.done(function(){ queue.notify(gid, 'done') }) |  | ||||||
| 			.fail(function(){ queue.notify(gid, 'fail') }) |  | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	return queue | 	return queue | ||||||
| @ -970,7 +969,7 @@ function readImagesDatesQ(images){ | |||||||
| 		queue.enqueue(readImageDate, gid, images) | 		queue.enqueue(readImageDate, gid, images) | ||||||
| 			.always(function(){  | 			.always(function(){  | ||||||
| 				imageUpdated(gid) | 				imageUpdated(gid) | ||||||
| 				queue.notify(gid, 'done')  | 				//queue.notify(gid, 'done') 
 | ||||||
| 			}) | 			}) | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| @ -1025,7 +1024,9 @@ function updateImagesGIDsQ(images, data){ | |||||||
| 
 | 
 | ||||||
| 	$.each(images, function(_, key){ | 	$.each(images, function(_, key){ | ||||||
| 		queue.enqueue(updateImageGID, key, images, data) | 		queue.enqueue(updateImageGID, key, images, data) | ||||||
| 			.always(function(){ queue.notify(key, 'done') }) | 			.always(function(){  | ||||||
|  | 				//queue.notify(key, 'done') 
 | ||||||
|  | 			}) | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	return queue | 	return queue | ||||||
|  | |||||||
| @ -640,7 +640,7 @@ function makeDeferredsQ(first){ | |||||||
| 	//
 | 	//
 | ||||||
| 	// NOTE: .enqueue(...) accepts a worker and any number of the arguments
 | 	// NOTE: .enqueue(...) accepts a worker and any number of the arguments
 | ||||||
| 	// 		to be passed to the worker when it's its turn.
 | 	// 		to be passed to the worker when it's its turn.
 | ||||||
| 	// NOTE: the worker must porduce a deffered/promice.
 | 	// NOTE: the worker must porduce a deferred/promice.
 | ||||||
| 	queue.enqueue = function(worker){ | 	queue.enqueue = function(worker){ | ||||||
| 		var cur = $.Deferred() | 		var cur = $.Deferred() | ||||||
| 		var args = Array.apply(null, arguments).slice(1) | 		var args = Array.apply(null, arguments).slice(1) | ||||||
| @ -730,14 +730,14 @@ function makeDeferredsQ(first){ | |||||||
| 
 | 
 | ||||||
| // Deferred worker pool...
 | // Deferred worker pool...
 | ||||||
| //
 | //
 | ||||||
| // 		makeDefferedPool([size][, paused]) -> pool
 | // 		makeDeferredPool([size][, paused]) -> pool
 | ||||||
| //
 | //
 | ||||||
| //
 | //
 | ||||||
| // This will create and return a pooled queue of deferred workers.
 | // This will create and return a pooled queue of deferred workers.
 | ||||||
| //
 | //
 | ||||||
| // Public interface:
 | // Public interface:
 | ||||||
| //
 | //
 | ||||||
| // 		.enqueue(obj, func, args) -> pool
 | // 		.enqueue(obj, func, args) -> deferred
 | ||||||
| // 			Add a worker to queue.
 | // 			Add a worker to queue.
 | ||||||
| // 			If the pool is not filled and not paused, this will run the
 | // 			If the pool is not filled and not paused, this will run the
 | ||||||
| // 			worker right away.
 | // 			worker right away.
 | ||||||
| @ -793,7 +793,7 @@ function makeDeferredsQ(first){ | |||||||
| //
 | //
 | ||||||
| //
 | //
 | ||||||
| // XXX should this be an object or a factory???
 | // XXX should this be an object or a factory???
 | ||||||
| function makeDefferedPool(size, paused){ | function makeDeferredPool(size, paused){ | ||||||
| 	size = size == null ? POOL_SIZE : size | 	size = size == null ? POOL_SIZE : size | ||||||
| 	size = size < 0 ? 1  | 	size = size < 0 ? 1  | ||||||
| 		: size > 512 ? 512 | 		: size > 512 ? 512 | ||||||
| @ -813,7 +813,7 @@ function makeDefferedPool(size, paused){ | |||||||
| 		_paused: paused, | 		_paused: paused, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	Pool._run = function(obj, func, args){ | 	Pool._run = function(deferred, func, args){ | ||||||
| 		var that = this | 		var that = this | ||||||
| 		var pool = this.pool | 		var pool = this.pool | ||||||
| 		var pool_size = this.size | 		var pool_size = this.size | ||||||
| @ -821,13 +821,13 @@ function makeDefferedPool(size, paused){ | |||||||
| 		var run = this._run | 		var run = this._run | ||||||
| 
 | 
 | ||||||
| 		// run an element from the queue...
 | 		// run an element from the queue...
 | ||||||
| 		var worker = func.apply(obj, args) | 		var worker = func.apply(null, args) | ||||||
| 			.always(function(){ | 			.always(function(){ | ||||||
| 				// prepare to remove self from pool...
 | 				// prepare to remove self from pool...
 | ||||||
| 				var i = pool.indexOf(worker) | 				var i = pool.indexOf(worker) | ||||||
| 
 | 
 | ||||||
| 				Pool._progress_handlers.forEach(function(func){ | 				Pool._progress_handlers.forEach(function(func){ | ||||||
| 					func(that, pool.length - pool.len(), pool.length + queue.length) | 					func(worker, pool.length - pool.len(), pool.length + queue.length) | ||||||
| 				}) | 				}) | ||||||
| 
 | 
 | ||||||
| 				// remove self from queue...
 | 				// remove self from queue...
 | ||||||
| @ -875,6 +875,13 @@ function makeDefferedPool(size, paused){ | |||||||
| 				Pool._fail_handlers.forEach(function(func){ | 				Pool._fail_handlers.forEach(function(func){ | ||||||
| 					func(that, pool.length - pool.len(), pool.length + queue.length) | 					func(that, pool.length - pool.len(), pool.length + queue.length) | ||||||
| 				}) | 				}) | ||||||
|  | 				deferred.reject.apply(deferred, arguments) | ||||||
|  | 			}) | ||||||
|  | 			.progress(function(){ | ||||||
|  | 				deferred.notify.apply(deferred, arguments) | ||||||
|  | 			}) | ||||||
|  | 			.done(function(){ | ||||||
|  | 				deferred.resolve.apply(deferred, arguments) | ||||||
| 			}) | 			}) | ||||||
| 
 | 
 | ||||||
| 		this.pool.push(worker) | 		this.pool.push(worker) | ||||||
| @ -904,13 +911,17 @@ function makeDefferedPool(size, paused){ | |||||||
| 
 | 
 | ||||||
| 	// Add a worker to queue...
 | 	// Add a worker to queue...
 | ||||||
| 	//
 | 	//
 | ||||||
| 	Pool.enqueue = function(obj, func, args){ | 	Pool.enqueue = function(func){ | ||||||
|  | 		var deferred = $.Deferred() | ||||||
|  | 
 | ||||||
| 		// add worker to queue...
 | 		// add worker to queue...
 | ||||||
| 		this.queue.push([obj, func, args]) | 		this.queue.push([deferred, func, args2array(arguments).slice(1)]) | ||||||
| 
 | 
 | ||||||
| 		// start work if we have not already...
 | 		// start work if we have not already...
 | ||||||
| 		this._fill() | 		this._fill() | ||||||
| 		return this | 
 | ||||||
|  | 		//return this
 | ||||||
|  | 		return deferred | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Drop the queued workers...
 | 	// Drop the queued workers...
 | ||||||
|  | |||||||
| @ -15,16 +15,16 @@ var WORKERS = {} | |||||||
| /********************************************************* Workers ***/ | /********************************************************* Workers ***/ | ||||||
| 
 | 
 | ||||||
| // get/create a named worker queue...
 | // get/create a named worker queue...
 | ||||||
| function getWorkerQueue(name, no_auto_start){ | //
 | ||||||
|  | // XXX rename this to task-related.... (???)
 | ||||||
|  | function getWorkerQueue(name, pool_size, no_auto_start){ | ||||||
|  | 	// XXX 1 is the default for compatibility...
 | ||||||
|  | 	pool_size = pool_size == null ? 1 : pool_size | ||||||
| 
 | 
 | ||||||
| 	// create a new worker queue...
 | 	// create a new worker queue...
 | ||||||
| 	if(WORKERS[name] == null){ | 	if(WORKERS[name] == null){ | ||||||
| 		var queue = makeDeferredsQ() | 		var queue = makeDeferredPool(pool_size, no_auto_start) | ||||||
| 		WORKERS[name] = queue | 		WORKERS[name] = queue | ||||||
| 		// start if needed...
 |  | ||||||
| 		if(!no_auto_start){ |  | ||||||
| 			queue.start() |  | ||||||
| 		} |  | ||||||
| 
 | 
 | ||||||
| 	// return existing worker queue...
 | 	// return existing worker queue...
 | ||||||
| 	} else { | 	} else { | ||||||
| @ -38,15 +38,21 @@ function getWorkerQueue(name, no_auto_start){ | |||||||
| // kill all worker queues...
 | // kill all worker queues...
 | ||||||
| function killAllWorkers(){ | function killAllWorkers(){ | ||||||
| 	for(var k in WORKERS){ | 	for(var k in WORKERS){ | ||||||
| 		if(WORKERS[k].isWorking()){ | 		if(WORKERS[k].isRunning()){ | ||||||
| 			console.log('Worker: Stopped:', k) | 			console.log('Worker: Stopped:', k) | ||||||
| 		} | 		} | ||||||
| 		WORKERS[k].kill() | 		WORKERS[k].dropQueue() | ||||||
| 	} | 	} | ||||||
| 	WORKERS = {} | 	WORKERS = {} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | /*********************************************************************/ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |    | ||||||
| /********************************************************************** | /********************************************************************** | ||||||
| * vim:set ts=4 sw=4 :                                                */ | * vim:set ts=4 sw=4 :                                                */ | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user