summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2016-10-24 17:37:21 +0200
committerPierre Ossman <ossman@cendio.se>2016-12-06 16:14:11 +0100
commite12e2759b084b91c857326521785da37a9dfea39 (patch)
treed95e65c9246d3df9442c272f7bd49d99d1927ff9
parent7632c576f0ef647d639ee643b6fdf69c95c734df (diff)
downloadnovnc-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.js38
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);
}
};