Files
palemoon27/toolkit/devtools/profiler/test/browser_profiler_tabbed-browser-03.js
T

89 lines
3.1 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/**
* Tests if the profiler displays and organizes the recording data in tabs,
* spawning a new tab from a graph's selection when required.
*/
const WAIT_TIME = 1000; // ms
let gPrevShowPlatformData =
Services.prefs.getBoolPref("devtools.profiler.ui.show-platform-data");
let test = Task.async(function*() {
let [target, debuggee, panel] = yield initFrontend(SIMPLE_URL);
let { $, $$, EVENTS, Prefs, ProfileView } = panel.panelWin;
// Make sure platform data is displayed, so there's samples available.
Prefs.showPlatformData = true;
yield startRecording(panel);
busyWait(WAIT_TIME); // allow the profiler module to sample more cpu activity
yield stopRecording(panel, { waitForDisplay: true });
let categoriesGraph = ProfileView._getCategoriesGraph();
ok(categoriesGraph,
"There's a categories graph available on the profile view.");
ok(!categoriesGraph.hasSelection(),
"The categories graph shouldn't have a selection available yet.");
ok($("#profile-newtab-button").hidden,
"The new tab button on the profile view tab bar should be hidden.");
dragStart(categoriesGraph, 10);
dragStop(categoriesGraph, 50);
ok(categoriesGraph.hasSelection(),
"The categories graph should have a selection available now.");
ok(!$("#profile-newtab-button").hidden,
"The new tab button on the profile view tab bar should be visible.");
let tabSpawned = panel.panelWin.once(EVENTS.TAB_SPAWNED_FROM_SELECTION);
EventUtils.sendMouseEvent({ type: "click" }, $("#profile-newtab-button"));
yield tabSpawned;
is(ProfileView.tabCount, 2,
"There should be two tabs visible now.");
is($("#profile-pane").selectedPanel, $("#profile-content"),
"The profile content should still be displayed in the profile view.");
is($("#profile-content").selectedIndex, 1,
"The second tab is now selected.");
let firstTabTitle = $$("#profile-content .tab-title-label")[0].getAttribute("value");
let secondTabTitle = $$("#profile-content .tab-title-label")[1].getAttribute("value");
info("The first tab's title is: " + firstTabTitle);
info("The second tab's title is: " + secondTabTitle);
isnot(firstTabTitle, secondTabTitle,
"The first and second tab titles are different.");
ok(firstTabTitle.match(/\d+ ms . \d+ ms/),
"The recording's first tab title is correct.");
ok(secondTabTitle.match(/[\d\.,]+ ms . [\d\.,]+ ms/),
"The recording's second tab title is correct.");
yield teardown(panel);
finish();
});
registerCleanupFunction(() => {
Services.prefs.setBoolPref(
"devtools.profiler.ui.show-platform-data", gPrevShowPlatformData);
});
// EventUtils just doesn't work!
function dragStart(graph, x, y = 1) {
x /= window.devicePixelRatio;
y /= window.devicePixelRatio;
graph._onMouseMove({ clientX: x, clientY: y });
graph._onMouseDown({ clientX: x, clientY: y });
}
function dragStop(graph, x, y = 1) {
x /= window.devicePixelRatio;
y /= window.devicePixelRatio;
graph._onMouseMove({ clientX: x, clientY: y });
graph._onMouseUp({ clientX: x, clientY: y });
}