From b41654850d68f18f79dc8bc915a49ab479c57ec3 Mon Sep 17 00:00:00 2001 From: Jose Date: Fri, 31 Jul 2015 16:58:41 +0200 Subject: Don't create a worker if already running in a worker --- js/src/Ice/browser/TimerUtil.js | 271 +++++++++++++++++++++------------------- 1 file changed, 145 insertions(+), 126 deletions(-) (limited to 'js/src/Ice/browser/TimerUtil.js') diff --git a/js/src/Ice/browser/TimerUtil.js b/js/src/Ice/browser/TimerUtil.js index de6b5514ed2..96fefc87fea 100644 --- a/js/src/Ice/browser/TimerUtil.js +++ b/js/src/Ice/browser/TimerUtil.js @@ -11,151 +11,170 @@ // jshint browser: true // var Ice = require("../Ice/ModuleRegistry").Ice; -Ice.__M.require(module, - [ - "../Ice/HashMap", - ]); -var HashMap = Ice.HashMap; +if(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) +{ + // + // If running in a worker we don't need to create a separate worker for the timers + // + var Timer = {}; + + Timer.setTimeout = setTimeout; + Timer.clearTimeout = clearTimeout; + Timer.setInterval = setInterval; + Timer.clearInterval = clearInterval; + Timer.setImmediate = setImmediate; + + Ice.Timer = Timer; +} +else +{ + Ice.__M.require(module, + [ + "../Ice/HashMap", + ]); -var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; + var HashMap = Ice.HashMap; -var _timers = new HashMap(); + var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; -var _SetTimeoutType = 0, - _SetIntervalType = 1, - _SetImmediateType = 2, - _ClearTimeoutType = 3, - _ClearIntervalType = 4; + var _timers = new HashMap(); -var Timer = {}; -var worker; + var _SetTimeoutType = 0, + _SetIntervalType = 1, + _SetImmediateType = 2, + _ClearTimeoutType = 3, + _ClearIntervalType = 4; -var _nextId = 0; + var Timer = {}; + var worker; -function nextId() -{ - if(_nextId == MAX_SAFE_INTEGER) + var _nextId = 0; + + function nextId() { - _nextId = 0; + if(_nextId == MAX_SAFE_INTEGER) + { + _nextId = 0; + } + return _nextId++; } - return _nextId++; -} -Timer.setTimeout = function(cb, ms) -{ - var id = nextId(); - _timers.set(id, cb); - worker.postMessage({type: _SetTimeoutType, id: id, ms: ms}); - return id; -}; - -Timer.clearTimeout = function(id) -{ - _timers.delete(id); - worker.postMessage({type: _ClearTimeoutType, id: id}); -}; - -Timer.setInterval = function(cb, ms) -{ - var id = nextId(); - _timers.set(id, cb); - worker.postMessage({type: _SetIntervalType, id: id, ms: ms}); - return id; -}; + Timer.setTimeout = function(cb, ms) + { + var id = nextId(); + _timers.set(id, cb); + worker.postMessage({type: _SetTimeoutType, id: id, ms: ms}); + return id; + }; -Timer.clearInterval = function(id) -{ - _timers.delete(id); - worker.postMessage({type: _ClearIntervalType, id: id}); -}; + Timer.clearTimeout = function(id) + { + _timers.delete(id); + worker.postMessage({type: _ClearTimeoutType, id: id}); + }; -Timer.setImmediate = function(cb) -{ - var id = nextId(); - _timers.set(id, cb); - worker.postMessage({type: _SetImmediateType, id: id}); - return id; -}; + Timer.setInterval = function(cb, ms) + { + var id = nextId(); + _timers.set(id, cb); + worker.postMessage({type: _SetIntervalType, id: id, ms: ms}); + return id; + }; -Timer.onmessage = function(e) -{ - var cb; - if(e.data.type === _SetIntervalType) + Timer.clearInterval = function(id) { - cb = _timers.get(e.data.id); - } - else + _timers.delete(id); + worker.postMessage({type: _ClearIntervalType, id: id}); + }; + + Timer.setImmediate = function(cb) { - cb = _timers.delete(e.data.id); - } - - if(cb !== undefined) + var id = nextId(); + _timers.set(id, cb); + worker.postMessage({type: _SetImmediateType, id: id}); + return id; + }; + + Timer.onmessage = function(e) { - cb.call(); - } -}; + var cb; + if(e.data.type === _SetIntervalType) + { + cb = _timers.get(e.data.id); + } + else + { + cb = _timers.delete(e.data.id); + } + + if(cb !== undefined) + { + cb.call(); + } + }; -function workerCode() -{ - return "(" + - function() + function workerCode() { - // - // jshint worker: true - // - var _wSetTimeoutType = 0, - _wSetIntervalType = 1, - _wSetImmediateType = 2, - _wClearTimeoutType = 3, - _wClearIntervalType = 4; - - var timers = {}; - - self.onmessage = function(e) + return "(" + + function() { - if(e.data.type == _wSetTimeoutType) - { - timers[e.data.id] = setTimeout(function() - { - self.postMessage(e.data); - }, - e.data.ms); - } - else if(e.data.type == _wSetIntervalType) - { - timers[e.data.id] = setInterval(function() - { - self.postMessage(e.data); - }, - e.data.ms); - } - else if(e.data.type == _wSetImmediateType) - { - self.postMessage(e.data); - } - else if(e.data.type == _wClearTimeoutType) - { - clearTimeout(timers[e.data.id]); - delete timers[e.data.id]; - } - else if(e.data.type == _wClearIntervalType) + // + // jshint worker: true + // + var _wSetTimeoutType = 0, + _wSetIntervalType = 1, + _wSetImmediateType = 2, + _wClearTimeoutType = 3, + _wClearIntervalType = 4; + + var timers = {}; + + self.onmessage = function(e) { - clearInterval(timers[e.data.id]); - delete timers[e.data.id]; - } - }; - - // - // jshint worker: false - // - }.toString() + "());"; -} + if(e.data.type == _wSetTimeoutType) + { + timers[e.data.id] = setTimeout(function() + { + self.postMessage(e.data); + }, + e.data.ms); + } + else if(e.data.type == _wSetIntervalType) + { + timers[e.data.id] = setInterval(function() + { + self.postMessage(e.data); + }, + e.data.ms); + } + else if(e.data.type == _wSetImmediateType) + { + self.postMessage(e.data); + } + else if(e.data.type == _wClearTimeoutType) + { + clearTimeout(timers[e.data.id]); + delete timers[e.data.id]; + } + else if(e.data.type == _wClearIntervalType) + { + clearInterval(timers[e.data.id]); + delete timers[e.data.id]; + } + }; + + // + // jshint worker: false + // + }.toString() + "());"; + } -if(worker === undefined) -{ - worker = new Worker(window.URL.createObjectURL(new Blob([workerCode()], {type : 'text/javascript'}))); - worker.onmessage = Timer.onmessage; -} + if(worker === undefined) + { + worker = new Worker(window.URL.createObjectURL(new Blob([workerCode()], {type : 'text/javascript'}))); + worker.onmessage = Timer.onmessage; + } -Ice.Timer = Timer; + Ice.Timer = Timer; +} -- cgit v1.2.3