Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: tsan
- Manifest: tools/profiler/tests/browser/browser.toml
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
requestLongerTimeout(10);
const kContentPref = "font.size.variable.x-western";
function countPrefReadsInThread(pref, thread) {
let count = 0;
for (let payload of getPayloadsOfType(thread, "Preference")) {
if (payload.prefName === pref) {
count++;
}
}
return count;
}
async function waitForPaintAfterLoad() {
return SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => {
return new Promise(function (resolve) {
function listener() {
if (content.document.readyState == "complete") {
content.requestAnimationFrame(() => content.setTimeout(resolve, 0));
}
}
if (content.document.readyState != "complete") {
content.document.addEventListener("readystatechange", listener);
} else {
listener();
}
});
});
}
/**
* Test the Preference Read markers.
*/
add_task(async function test_profile_preferencereads_markers() {
Assert.ok(
!Services.profiler.IsActive(),
"The profiler is not currently active"
);
await startProfiler({ features: ["js"] });
const url = BASE_URL + "single_frame.html";
await BrowserTestUtils.withNewTab(url, async contentBrowser => {
const contentPid = await SpecialPowers.spawn(
contentBrowser,
[],
() => Services.appinfo.processID
);
await waitForPaintAfterLoad();
// Ensure we read a pref in the content process.
await SpecialPowers.spawn(contentBrowser, [kContentPref], pref => {
Services.prefs.getIntPref(pref);
});
// Check that some Preference Read profile markers were generated.
{
const { contentThread } = await stopProfilerNowAndGetThreads(contentPid);
Assert.greater(
countPrefReadsInThread(kContentPref, contentThread),
0,
`Preference Read profile markers for ${kContentPref} were recorded.`
);
}
});
});