Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* 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
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
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.`
);
}
});
});