1
0
Fork 0
firefox/ipc/glue/test/browser/browser_utility_profiler.js
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

73 lines
2 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const { ProfilerTestUtils } = ChromeUtils.importESModule(
"resource://testing-common/ProfilerTestUtils.sys.mjs"
);
// When running full suite, previous tests may have left some utility
// processes running and this might interfere with our testing.
add_setup(async function ensureNoExistingProcess() {
await killUtilityProcesses();
});
add_task(async () => {
const utilityPid = await startUtilityProcess();
info("Start the profiler");
await ProfilerTestUtils.startProfiler();
let profile;
await TestUtils.waitForCondition(async () => {
profile = await Services.profiler.getProfileDataAsync();
return (
// Search for process name to not be disturbed by other types of utility
// e.g. Utility AudioDecoder
profile.processes.filter(
ps => ps.threads[0].processName === "Utility Process"
).length === 1
);
}, "Give time for the profiler to start and collect some samples");
info(`Check that the utility process ${utilityPid} is present.`);
let utilityProcessIndex = profile.processes.findIndex(
p => p.threads[0].pid == utilityPid
);
Assert.notEqual(utilityProcessIndex, -1, "Could find index of utility");
Assert.equal(
profile.processes[utilityProcessIndex].threads[0].processType,
"utility",
"Profile has processType utility"
);
Assert.equal(
profile.processes[utilityProcessIndex].threads[0].name,
"GeckoMain",
"Profile has correct main thread name"
);
Assert.equal(
profile.processes[utilityProcessIndex].threads[0].processName,
"Utility Process",
"Profile has correct process name"
);
Assert.greater(
profile.processes[utilityProcessIndex].threads.length,
0,
"The utility process should have threads"
);
Assert.equal(
profile.threads.length,
1,
"The parent process should have only one thread"
);
Services.profiler.StopProfiler();
await cleanUtilityProcessShutdown();
});