]> git.proxmox.com Git - mirror_novnc.git/commitdiff
Run performance tests at full speed
authorPierre Ossman <ossman@cendio.se>
Mon, 24 Oct 2016 15:37:21 +0000 (17:37 +0200)
committerPierre Ossman <ossman@cendio.se>
Tue, 6 Dec 2016 15:14:11 +0000 (16:14 +0100)
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.

tests/playback.js

index f156f83f01809775c41717a59c7eb751ac0d5238..514e447dd08d10b6699923c2140c32e8f848c585 100644 (file)
@@ -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);
     }
 };