1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
/* 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);
function countDpiPrefReadsInThread(thread) {
let count = 0;
for (let payload of getPayloadsOfType(thread, "PreferenceRead")) {
if (payload.prefName === "layout.css.dpi") {
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 PreferenceRead feature.
*/
add_task(async function test_profile_feature_preferencereads() {
if (!AppConstants.MOZ_GECKO_PROFILER) {
return;
}
Assert.ok(
!Services.profiler.IsActive(),
"The profiler is not currently active"
);
startProfiler({ features: ["threads", "leaf", "preferencereads"] });
const url = BASE_URL + "fixed_height.html";
await BrowserTestUtils.withNewTab(url, async contentBrowser => {
const contentPid = await SpecialPowers.spawn(
contentBrowser,
[],
() => Services.appinfo.processID
);
await waitForPaintAfterLoad();
// Check that some PreferenceRead profile markers were generated when the
// feature is enabled.
{
const { contentThread } = await stopProfilerNowAndGetThreads(contentPid);
const timesReadDpiInContent = countDpiPrefReadsInThread(contentThread);
Assert.greater(
timesReadDpiInContent,
0,
"PreferenceRead profile markers for layout.css.dpi were recorded " +
"when the PreferenceRead feature was turned on."
);
}
startProfiler({ features: ["threads", "leaf"] });
// Now reload the tab with a clean run.
await ContentTask.spawn(contentBrowser, null, () => {
return new Promise(resolve => {
addEventListener("pageshow", () => resolve(), {
capturing: true,
once: true,
});
content.location.reload();
});
});
await waitForPaintAfterLoad();
// Check that no PreferenceRead markers were recorded when the feature
// is turned off.
{
const {
parentThread,
contentThread,
} = await stopProfilerNowAndGetThreads(contentPid);
Assert.equal(
getPayloadsOfType(parentThread, "PreferenceRead").length,
0,
"No PreferenceRead profile markers for layout.css.dpi were recorded " +
"when the PreferenceRead feature was turned on."
);
Assert.equal(
getPayloadsOfType(contentThread, "PreferenceRead").length,
0,
"No PreferenceRead profile markers for layout.css.dpi were recorded " +
"when the PreferenceRead feature was turned on."
);
}
});
});
|