michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: /** michael@0: * Test the eventLoopLag actor. michael@0: */ michael@0: michael@0: "use strict"; michael@0: michael@0: function run_test() michael@0: { michael@0: let {EventLoopLagFront} = devtools.require("devtools/server/actors/eventlooplag"); michael@0: michael@0: DebuggerServer.init(function () { return true; }); michael@0: DebuggerServer.addBrowserActors(); michael@0: michael@0: // As seen in EventTracer.cpp michael@0: let threshold = 20; michael@0: let interval = 10; michael@0: michael@0: michael@0: let front; michael@0: let client = new DebuggerClient(DebuggerServer.connectPipe()); michael@0: michael@0: // Start tracking event loop lags. michael@0: client.connect(function () { michael@0: client.listTabs(function(resp) { michael@0: front = new EventLoopLagFront(client, resp); michael@0: front.start().then(success => { michael@0: do_check_true(success); michael@0: front.once("event-loop-lag", gotLagEvent); michael@0: do_execute_soon(lag); michael@0: }); michael@0: }); michael@0: }); michael@0: michael@0: // Force a lag michael@0: function lag() { michael@0: let start = new Date(); michael@0: let duration = threshold + interval + 1; michael@0: while (true) { michael@0: if (((new Date()) - start) > duration) { michael@0: break; michael@0: } michael@0: } michael@0: } michael@0: michael@0: // Got a lag event. The test will time out if the actor michael@0: // fails to detect the lag. michael@0: function gotLagEvent(time) { michael@0: do_print("lag: " + time); michael@0: do_check_true(time >= threshold); michael@0: front.stop().then(() => { michael@0: finishClient(client); michael@0: }); michael@0: } michael@0: michael@0: do_test_pending(); michael@0: }