diff options
Diffstat (limited to 'tools/profiler/tests/xpcshell/test_feature_cpufreq.js')
-rw-r--r-- | tools/profiler/tests/xpcshell/test_feature_cpufreq.js | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/tools/profiler/tests/xpcshell/test_feature_cpufreq.js b/tools/profiler/tests/xpcshell/test_feature_cpufreq.js new file mode 100644 index 0000000000..1d8e0d9a36 --- /dev/null +++ b/tools/profiler/tests/xpcshell/test_feature_cpufreq.js @@ -0,0 +1,102 @@ +/* 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 = 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, filename) { + const entries = 10000; + const interval = 10; + const threads = []; + await Services.profiler.StartProfiler(entries, interval, features, threads); + + const profile = await waitSamplingAndStopAndGetProfile(); + const mainThread = profile.threads.find(({ name }) => name === "GeckoMain"); + + const schema = getSchema(profile, "CPUSpeed"); + const markers = getInflatedCPUFreqMarkers(mainThread); + return { schema, markers }; +} |