diff options
Diffstat (limited to 'devtools/shared/test-helpers/test_javascript_tracer.js')
-rw-r--r-- | devtools/shared/test-helpers/test_javascript_tracer.js | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/devtools/shared/test-helpers/test_javascript_tracer.js b/devtools/shared/test-helpers/test_javascript_tracer.js new file mode 100644 index 0000000000..268e054c56 --- /dev/null +++ b/devtools/shared/test-helpers/test_javascript_tracer.js @@ -0,0 +1,72 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/** + * Test for the thread helpers utility module. + * + * This uses a xpcshell test in order to avoid recording the noise + * of all Firefox components when using a mochitest. + */ + +const { traceAllJSCalls } = ChromeUtils.importESModule( + "resource://devtools/shared/test-helpers/thread-helpers.sys.mjs" +); +// ESLint thinks this is a browser test, but it's actually an xpcshell +// test and so `setTimeout` isn't available out of the box. +// eslint-disable-next-line mozilla/no-redeclare-with-import-autofix +const { setTimeout } = ChromeUtils.importESModule( + "resource://gre/modules/Timer.sys.mjs" +); + +add_task(async function sanityCheck() { + let ranTheOtherEventLoop = false; + setTimeout(function otherEventLoop() { + ranTheOtherEventLoop = true; + }, 0); + const jsTracer = traceAllJSCalls(); + function foo() {} + for (let i = 0; i < 10; i++) { + foo(); + } + jsTracer.stop(); + ok( + !ranTheOtherEventLoop, + "When we don't pause frame execution, the other event do not execute" + ); +}); + +add_task(async function withPrefix() { + const jsTracer = traceAllJSCalls({ prefix: "my-prefix" }); + function foo() {} + for (let i = 0; i < 10; i++) { + foo(); + } + jsTracer.stop(); + ok(true, "Were able to run with a prefix argument"); +}); + +add_task(async function pause() { + const start = Cu.now(); + let ranTheOtherEventLoop = false; + setTimeout(function otherEventLoop() { + ranTheOtherEventLoop = true; + }, 0); + const jsTracer = traceAllJSCalls({ pause: 100 }); + function foo() {} + for (let i = 0; i < 10; i++) { + foo(); + } + jsTracer.stop(); + const duration = Cu.now() - start; + Assert.greater( + duration, + 10 * 100, + "The execution of the for loop was slow down by at least the pause duration in each loop" + ); + ok( + ranTheOtherEventLoop, + "When we pause frame execution, the other event can execute" + ); +}); |