summaryrefslogtreecommitdiff
path: root/js/src
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2015-07-31 16:58:41 +0200
committerJose <jose@zeroc.com>2015-07-31 16:58:41 +0200
commitb41654850d68f18f79dc8bc915a49ab479c57ec3 (patch)
tree26bd7a245721a3433ed13658ac4ce16261b1a072 /js/src
parentUpdated version to 3.6.1 (diff)
downloadice-b41654850d68f18f79dc8bc915a49ab479c57ec3.tar.bz2
ice-b41654850d68f18f79dc8bc915a49ab479c57ec3.tar.xz
ice-b41654850d68f18f79dc8bc915a49ab479c57ec3.zip
Don't create a worker if already running in a worker
Diffstat (limited to 'js/src')
-rw-r--r--js/src/Ice/browser/TimerUtil.js271
1 files changed, 145 insertions, 126 deletions
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;
+}