diff options
author | Pierre Ossman <ossman@cendio.se> | 2016-10-24 17:37:21 +0200 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2016-12-06 16:14:11 +0100 |
commit | e12e2759b084b91c857326521785da37a9dfea39 (patch) | |
tree | d95e65c9246d3df9442c272f7bd49d99d1927ff9 | |
parent | 7632c576f0ef647d639ee643b6fdf69c95c734df (diff) | |
download | novnc-e12e2759b084b91c857326521785da37a9dfea39.tar.gz |
Run performance tests at full speed
setTimeout() is subject to delays, possible massive ones. As such it
is rather useless for performance sensitive code. Use the non-standard
setImmediate() API instead, emulating it on postMessage() when it
isn't available.
-rw-r--r-- | tests/playback.js | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/tests/playback.js b/tests/playback.js index f156f83..514e447 100644 --- a/tests/playback.js +++ b/tests/playback.js @@ -19,6 +19,42 @@ send_array = function (arr) { // Stub out send_array }; +// Immediate polyfill +if (window.setImmediate === undefined) { + var _immediateIdCounter = 1; + var _immediateFuncs = {}; + + window.setImmediate = function (func) { + var index = Util._immediateIdCounter++; + _immediateFuncs[index] = func; + window.postMessage("noVNC immediate trigger:" + index, "*"); + return index; + }; + + window.clearImmediate = function (id) { + _immediateFuncs[id]; + }; + + var _onMessage = function (event) { + if ((typeof event.data !== "string") || + (event.data.indexOf("noVNC immediate trigger:") !== 0)) { + return; + } + + var index = event.data.slice("noVNC immediate trigger:".length); + + var callback = _immediateFuncs[index]; + if (callback === undefined) { + return; + } + + delete _immediateFuncs[index]; + + callback(); + }; + window.addEventListener("message", _onMessage); +} + enable_test_mode = function () { rfb._sock.send = send_array; rfb._sock.close = function () {}; @@ -108,7 +144,7 @@ queue_next_packet = function () { setTimeout(do_packet, delay); } else { - setTimeout(do_packet, 0); + window.setImmediate(do_packet); } }; |