Files
tubestation/browser/devtools/performance/views/details.js

83 lines
2.1 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/. */
"use strict";
const DEFAULT_DETAILS_SUBVIEW = "waterfall";
/**
* Details view containing profiler call tree and markers waterfall. Manages
* subviews and toggles visibility between them.
*/
let DetailsView = {
/**
* Name to index mapping of subviews, used by selecting view.
*/
viewIndexes: {
waterfall: 0,
calltree: 1
},
/**
* Sets up the view with event binding, initializes subviews.
*/
initialize: Task.async(function *() {
this.el = $("#details-pane");
this._onViewToggle = this._onViewToggle.bind(this);
for (let button of $$("toolbarbutton[data-view]", $("#details-toolbar"))) {
button.addEventListener("command", this._onViewToggle);
}
yield CallTreeView.initialize();
yield WaterfallView.initialize();
this.selectView(DEFAULT_DETAILS_SUBVIEW);
}),
/**
* Unbinds events, destroys subviews.
*/
destroy: Task.async(function *() {
for (let button of $$("toolbarbutton[data-view]", $("#details-toolbar"))) {
button.removeEventListener("command", this._onViewToggle);
}
yield CallTreeView.destroy();
yield WaterfallView.destroy();
}),
/**
* Select one of the DetailView's subviews to be rendered,
* hiding the others.
*
* @params {String} selectedView
* Name of the view to be shown.
*/
selectView: function (selectedView) {
this.el.selectedIndex = this.viewIndexes[selectedView];
for (let button of $$("toolbarbutton[data-view]", $("#details-toolbar"))) {
if (button.getAttribute("data-view") === selectedView)
button.setAttribute("checked", true);
else
button.removeAttribute("checked");
}
this.emit(EVENTS.DETAILS_VIEW_SELECTED, selectedView);
},
/**
* Called when a view button is clicked.
*/
_onViewToggle: function (e) {
this.selectView(e.target.getAttribute("data-view"));
}
};
/**
* Convenient way of emitting events from the view.
*/
EventEmitter.decorate(DetailsView);