102 lines
2.8 KiB
JavaScript
102 lines
2.8 KiB
JavaScript
/* 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/. */
|
|
|
|
/**
|
|
* Test that the CPU Speed markers exist if and only if the cpufreq feature
|
|
* is enabled.
|
|
*/
|
|
add_task(async () => {
|
|
{
|
|
Assert.ok(
|
|
Services.profiler.GetAllFeatures().includes("cpufreq"),
|
|
"the CPU Frequency feature should exist on all platforms."
|
|
);
|
|
const shouldBeEnabled = ["win", "linux", "android"].includes(
|
|
AppConstants.platform
|
|
);
|
|
Assert.equal(
|
|
Services.profiler.GetFeatures().includes("cpufreq"),
|
|
shouldBeEnabled,
|
|
"the CPU Frequency feature should only be enabled on some platforms."
|
|
);
|
|
|
|
if (!shouldBeEnabled) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
{
|
|
const { markers, schema } = await runProfilerWithCPUSpeed(["cpufreq"]);
|
|
|
|
checkSchema(schema, {
|
|
name: "CPUSpeed",
|
|
tableLabel: "{marker.name} Speed = {marker.data.speed}GHz",
|
|
display: ["marker-chart", "marker-table"],
|
|
data: [
|
|
{
|
|
key: "speed",
|
|
label: "CPU Speed (GHz)",
|
|
format: "string",
|
|
},
|
|
],
|
|
graphs: [
|
|
{
|
|
key: "speed",
|
|
type: "bar",
|
|
color: "ink",
|
|
},
|
|
],
|
|
});
|
|
|
|
Assert.greater(markers.length, 0, "There should be CPU Speed markers");
|
|
const names = new Set();
|
|
for (let marker of markers) {
|
|
names.add(marker.name);
|
|
}
|
|
let processData = await Services.sysinfo.processInfo;
|
|
equal(
|
|
names.size,
|
|
processData.count,
|
|
"We have as many CPU Speed marker names as CPU cores on the machine"
|
|
);
|
|
}
|
|
|
|
{
|
|
const { markers } = await runProfilerWithCPUSpeed([]);
|
|
equal(
|
|
markers.length,
|
|
0,
|
|
"No CPUSpeed markers are found when the cpufreq feature is not turned on " +
|
|
"in the profiler."
|
|
);
|
|
}
|
|
});
|
|
|
|
function getInflatedCPUFreqMarkers(thread) {
|
|
const markers = ProfilerTestUtils.getInflatedMarkerData(thread);
|
|
return markers.filter(marker => marker.data?.type === "CPUSpeed");
|
|
}
|
|
|
|
/**
|
|
* Start the profiler and get CPUSpeed markers and schema.
|
|
*
|
|
* @param {Array} features The list of profiler features
|
|
* @returns {{
|
|
* markers: InflatedMarkers[];
|
|
* schema: MarkerSchema;
|
|
* }}
|
|
*/
|
|
async function runProfilerWithCPUSpeed(features) {
|
|
const entries = 10000;
|
|
const interval = 10;
|
|
const threads = [];
|
|
await Services.profiler.StartProfiler(entries, interval, features, threads);
|
|
|
|
const profile = await ProfilerTestUtils.waitSamplingAndStopAndGetProfile();
|
|
const mainThread = profile.threads.find(({ name }) => name === "GeckoMain");
|
|
|
|
const schema = ProfilerTestUtils.getSchema(profile, "CPUSpeed");
|
|
const markers = getInflatedCPUFreqMarkers(mainThread);
|
|
return { schema, markers };
|
|
}
|