From a451547470caa4c31d08fc24edb4c2becdd29f04 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Wed, 22 Jan 2014 03:01:13 +0400 Subject: [PATCH] reworked deferred pool and now it's used instead of makeDeferredsQ(..)... Signed-off-by: Alex A. Naanou --- ui/compatibility.js | 2 +- ui/files.js | 13 +++++++------ ui/lib/jli.js | 31 +++++++++++++++++++++---------- ui/workers.js | 22 ++++++++++++++-------- 4 files changed, 43 insertions(+), 25 deletions(-) diff --git a/ui/compatibility.js b/ui/compatibility.js index c1dd8863..5f4f514b 100755 --- a/ui/compatibility.js +++ b/ui/compatibility.js @@ -368,7 +368,7 @@ if(window.CEF_dumpJSON != null){ // attach the workers to the queue... $.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??? //.progress(function(state){ queue.notify(state) }) .always(function(){ queue.notify(gid, 'done') }) diff --git a/ui/files.js b/ui/files.js index 6e78af59..3f83efc4 100755 --- a/ui/files.js +++ b/ui/files.js @@ -843,7 +843,8 @@ function exportImagesTo(path, im_name, dir_name, size){ selection.sort(imageOrderCmp) var z = (('10e' + (selection.length + '').length) * 1 + '').slice(2) - var pool = makeDefferedPool() + // use an external pool... + var pool = makeDeferredPool() .depleted(function(){ showStatusQ('Export: done.') res.resolve() @@ -865,7 +866,7 @@ function exportImagesTo(path, im_name, dir_name, size){ var o = selection.indexOf(gid) + '' 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) @@ -935,8 +936,6 @@ function readImagesOrientationQ(gids, no_update_loaded){ // attach workers to queue... $.each(gids, function(_, gid){ last = queue.enqueue(readImageOrientation, gid, no_update_loaded) - .done(function(){ queue.notify(gid, 'done') }) - .fail(function(){ queue.notify(gid, 'fail') }) }) return queue @@ -970,7 +969,7 @@ function readImagesDatesQ(images){ queue.enqueue(readImageDate, gid, images) .always(function(){ imageUpdated(gid) - queue.notify(gid, 'done') + //queue.notify(gid, 'done') }) }) @@ -1025,7 +1024,9 @@ function updateImagesGIDsQ(images, data){ $.each(images, function(_, key){ queue.enqueue(updateImageGID, key, images, data) - .always(function(){ queue.notify(key, 'done') }) + .always(function(){ + //queue.notify(key, 'done') + }) }) return queue diff --git a/ui/lib/jli.js b/ui/lib/jli.js index e43ed33b..7fab690c 100755 --- a/ui/lib/jli.js +++ b/ui/lib/jli.js @@ -640,7 +640,7 @@ function makeDeferredsQ(first){ // // NOTE: .enqueue(...) accepts a worker and any number of the arguments // 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){ var cur = $.Deferred() var args = Array.apply(null, arguments).slice(1) @@ -730,14 +730,14 @@ function makeDeferredsQ(first){ // Deferred worker pool... // -// makeDefferedPool([size][, paused]) -> pool +// makeDeferredPool([size][, paused]) -> pool // // // This will create and return a pooled queue of deferred workers. // // Public interface: // -// .enqueue(obj, func, args) -> pool +// .enqueue(obj, func, args) -> deferred // Add a worker to queue. // If the pool is not filled and not paused, this will run the // worker right away. @@ -793,7 +793,7 @@ function makeDeferredsQ(first){ // // // 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 < 0 ? 1 : size > 512 ? 512 @@ -813,7 +813,7 @@ function makeDefferedPool(size, paused){ _paused: paused, } - Pool._run = function(obj, func, args){ + Pool._run = function(deferred, func, args){ var that = this var pool = this.pool var pool_size = this.size @@ -821,13 +821,13 @@ function makeDefferedPool(size, paused){ var run = this._run // run an element from the queue... - var worker = func.apply(obj, args) + var worker = func.apply(null, args) .always(function(){ // prepare to remove self from pool... var i = pool.indexOf(worker) 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... @@ -875,6 +875,13 @@ function makeDefferedPool(size, paused){ Pool._fail_handlers.forEach(function(func){ 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) @@ -904,13 +911,17 @@ function makeDefferedPool(size, paused){ // Add a worker to queue... // - Pool.enqueue = function(obj, func, args){ + Pool.enqueue = function(func){ + var deferred = $.Deferred() + // 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... this._fill() - return this + + //return this + return deferred } // Drop the queued workers... diff --git a/ui/workers.js b/ui/workers.js index 55780db3..2b4b5c4f 100755 --- a/ui/workers.js +++ b/ui/workers.js @@ -15,16 +15,16 @@ var WORKERS = {} /********************************************************* Workers ***/ // 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... if(WORKERS[name] == null){ - var queue = makeDeferredsQ() + var queue = makeDeferredPool(pool_size, no_auto_start) WORKERS[name] = queue - // start if needed... - if(!no_auto_start){ - queue.start() - } // return existing worker queue... } else { @@ -38,15 +38,21 @@ function getWorkerQueue(name, no_auto_start){ // kill all worker queues... function killAllWorkers(){ for(var k in WORKERS){ - if(WORKERS[k].isWorking()){ + if(WORKERS[k].isRunning()){ console.log('Worker: Stopped:', k) } - WORKERS[k].kill() + WORKERS[k].dropQueue() } WORKERS = {} } +/*********************************************************************/ + + + + + /********************************************************************** * vim:set ts=4 sw=4 : */