tenfourfox/devtools/client/performance/test/browser_perf-console-record-08.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

89 lines
3.7 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/**
* Tests if the profiler can correctly handle simultaneous console and manual
* recordings (via `console.profile` and clicking the record button).
*/
var C = 1; // is console
var R = 2; // is recording
var S = 4; // is selected
function testRecordings (win, expected) {
let recordings = win.PerformanceController.getRecordings();
let current = win.PerformanceController.getCurrentRecording();
is(recordings.length, expected.length, "expected number of recordings");
recordings.forEach((recording, i) => {
ok(recording.isConsole() == !!(expected[i] & C), `recording ${i+1} has expected console state.`);
ok(recording.isRecording() == !!(expected[i] & R), `recording ${i+1} has expected console state.`);
ok((recording === current) == !!(expected[i] & S), `recording ${i+1} has expected selected state.`);
});
}
function* spawnTest() {
PMM_loadFrameScripts(gBrowser);
let { target, toolbox, panel } = yield initPerformance(SIMPLE_URL);
let { EVENTS, PerformanceController, OverviewView, RecordingsView, WaterfallView } = panel.panelWin;
info("Starting console.profile()...");
yield consoleProfile(panel.panelWin);
testRecordings(panel.panelWin, [C+S+R]);
info("Starting manual recording...");
yield startRecording(panel);
testRecordings(panel.panelWin, [C+R, R+S]);
info("Starting console.profile(\"3\")...");
yield consoleProfile(panel.panelWin, "3");
testRecordings(panel.panelWin, [C+R, R+S, C+R]);
info("Starting console.profile(\"3\")...");
yield consoleProfile(panel.panelWin, "4");
testRecordings(panel.panelWin, [C+R, R+S, C+R, C+R]);
info("Ending console.profileEnd()...");
yield consoleProfileEnd(panel.panelWin);
testRecordings(panel.panelWin, [C+R, R+S, C+R, C]);
ok(OverviewView.isRendering(), "still rendering overview with manual recorded selected.");
let onSelected = once(WaterfallView, EVENTS.WATERFALL_RENDERED);
info("Select last recording...");
RecordingsView.selectedIndex = 3;
yield onSelected;
testRecordings(panel.panelWin, [C+R, R, C+R, C+S]);
ok(!OverviewView.isRendering(), "stop rendering overview when selected completed recording.");
info("Manually stop manual recording...");
yield stopRecording(panel);
testRecordings(panel.panelWin, [C+R, S, C+R, C]);
ok(!OverviewView.isRendering(), "stop rendering overview when selected completed recording.");
onSelected = once(PerformanceController, EVENTS.RECORDING_SELECTED);
info("Select first recording...");
RecordingsView.selectedIndex = 0;
yield onSelected;
testRecordings(panel.panelWin, [C+R+S, 0, C+R, C]);
yield once(OverviewView, EVENTS.OVERVIEW_RENDERED);
ok(OverviewView.isRendering(), "should be rendering overview when selected recording in progress.");
info("Ending console.profileEnd()...");
yield consoleProfileEnd(panel.panelWin);
testRecordings(panel.panelWin, [C+R+S, 0, C, C]);
ok(OverviewView.isRendering(), "should still be rendering overview when selected recording in progress.");
info("Start one more manual recording...");
yield startRecording(panel);
testRecordings(panel.panelWin, [C+R, 0, C, C, R+S]);
ok(OverviewView.isRendering(), "should be rendering overview when selected recording in progress.");
info("Stop manual recording...");
yield stopRecording(panel);
testRecordings(panel.panelWin, [C+R, 0, C, C, S]);
ok(!OverviewView.isRendering(), "stop rendering overview when selected completed recording.");
info("Ending console.profileEnd()...");
yield consoleProfileEnd(panel.panelWin);
testRecordings(panel.panelWin, [C, 0, C, C, S]);
ok(!OverviewView.isRendering(), "stop rendering overview when selected completed recording.");
yield teardown(panel);
finish();
}