66 lines
1.6 KiB
JavaScript
66 lines
1.6 KiB
JavaScript
"use strict";
|
|
|
|
(function () {
|
|
async function startProfiler(settings) {
|
|
let startPromise = Services.profiler.StartProfiler(
|
|
settings.entries,
|
|
settings.interval,
|
|
settings.features,
|
|
settings.threads,
|
|
0,
|
|
settings.duration
|
|
);
|
|
|
|
info("Parent Profiler has started");
|
|
|
|
await startPromise;
|
|
|
|
info("Child profilers have started");
|
|
}
|
|
|
|
function getProfile() {
|
|
const profile = Services.profiler.getProfileData();
|
|
info(
|
|
"We got a profile, run the mochitest with `--keep-open true` to see the logged profile in the Web Console."
|
|
);
|
|
|
|
// Run the mochitest with `--keep-open true` to see the logged profile in the
|
|
// Web console.
|
|
console.log(profile);
|
|
|
|
return profile;
|
|
}
|
|
|
|
async function stopProfiler() {
|
|
let stopPromise = Services.profiler.StopProfiler();
|
|
info("Parent profiler has stopped");
|
|
await stopPromise;
|
|
info("Child profilers have stopped");
|
|
}
|
|
|
|
function end(error) {
|
|
if (error) {
|
|
ok(false, `We got an error: ${error}`);
|
|
} else {
|
|
ok(true, "We ran the whole process");
|
|
}
|
|
SimpleTest.finish();
|
|
}
|
|
|
|
async function runTest(settings, workload) {
|
|
SimpleTest.waitForExplicitFinish();
|
|
try {
|
|
await startProfiler(settings);
|
|
await workload();
|
|
await getProfile();
|
|
await stopProfiler();
|
|
await end();
|
|
} catch (e) {
|
|
// By catching and handling the error, we're being nice to mochitest
|
|
// runners: instead of waiting for the timeout, we fail right away.
|
|
await end(e);
|
|
}
|
|
}
|
|
|
|
window.runTest = runTest;
|
|
})();
|