summaryrefslogtreecommitdiff
path: root/toolkit/devtools/profiler/test/browser_profiler_recording-utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/devtools/profiler/test/browser_profiler_recording-utils.js')
-rw-r--r--toolkit/devtools/profiler/test/browser_profiler_recording-utils.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/toolkit/devtools/profiler/test/browser_profiler_recording-utils.js b/toolkit/devtools/profiler/test/browser_profiler_recording-utils.js
new file mode 100644
index 000000000..5b00a7ec8
--- /dev/null
+++ b/toolkit/devtools/profiler/test/browser_profiler_recording-utils.js
@@ -0,0 +1,68 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * Tests if the recording utility functions work as expected.
+ */
+
+const WAIT_TIME = 100; // ms
+
+let test = Task.async(function*() {
+ let [target, debuggee, panel] = yield initFrontend(SIMPLE_URL);
+ let { RecordingsListView, RecordingUtils } = panel.panelWin;
+
+ yield startRecording(panel);
+ yield idleWait(WAIT_TIME); // allow refresh driver ticks to accumulate
+ busyWait(WAIT_TIME); // allow the profiler module to sample more cpu activity
+ yield stopRecording(panel, { waitForDisplay: true });
+
+ let recordingData = RecordingsListView.selectedItem.attachment;
+ ok(recordingData, "The recording data was successfully retrieved.");
+
+ // Test plotting categories...
+
+ let profilerData = recordingData.profilerData;
+ let categoriesData = RecordingUtils.plotCategoriesFor(profilerData, 0, Infinity);
+
+ for (let category of categoriesData) {
+ is(Object.keys(category).toSource(), '["delta", "values"]',
+ "The correct keys are in the cateogries data.");
+ is(typeof category.delta, "number",
+ "The delta property is a number, as expected.");
+ is(typeof category.values, "object",
+ "The values property is a object, as expected.");
+ ok("length" in category.values,
+ "The values property is an array, as expected.");
+ }
+
+ // Test plotting framerate...
+
+ let ticksData = recordingData.ticksData;
+ let framerateData = RecordingUtils.plotFramerateFor(ticksData, 0, Infinity);
+
+ ok("length" in framerateData,
+ "The framerate data is an array, as expected.");
+
+ for (let rate of framerateData) {
+ is(typeof rate.delta, "number",
+ "The delta property is a number, as expected.");
+ is(typeof rate.value, "number",
+ "The value property is a number, as expected.");
+ }
+
+ // Test categories and framerate syncing...
+
+ RecordingUtils.syncCategoriesWithFramerate(categoriesData, framerateData);
+ info("Total framerate data: " + framerateData.length);
+ info("Total categories data: " + categoriesData.length);
+
+ if (framerateData.length >= 2 && categoriesData.length >= 2) {
+ is(categoriesData[0].delta, framerateData[0].delta,
+ "The categories and framerate data now start at the exact same time.");
+ is(categoriesData.pop().delta, framerateData.pop().delta,
+ "The categories and framerate data now end at the exact same time.");
+ }
+
+ yield teardown(panel);
+ finish();
+});