summaryrefslogtreecommitdiff
path: root/browser/devtools/shared/timeline/marker-details.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/devtools/shared/timeline/marker-details.js')
-rw-r--r--browser/devtools/shared/timeline/marker-details.js301
1 files changed, 0 insertions, 301 deletions
diff --git a/browser/devtools/shared/timeline/marker-details.js b/browser/devtools/shared/timeline/marker-details.js
deleted file mode 100644
index 8fbdc9f23..000000000
--- a/browser/devtools/shared/timeline/marker-details.js
+++ /dev/null
@@ -1,301 +0,0 @@
-/* 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";
-
-let { Ci } = require("chrome");
-let WebConsoleUtils = require("devtools/toolkit/webconsole/utils").Utils;
-
-/**
- * This file contains the rendering code for the marker sidebar.
- */
-
-loader.lazyRequireGetter(this, "L10N",
- "devtools/shared/timeline/global", true);
-loader.lazyRequireGetter(this, "TIMELINE_BLUEPRINT",
- "devtools/shared/timeline/global", true);
-loader.lazyRequireGetter(this, "EventEmitter",
- "devtools/toolkit/event-emitter");
-
-/**
- * A detailed view for one single marker.
- *
- * @param nsIDOMNode parent
- * The parent node holding the view.
- * @param nsIDOMNode splitter
- * The splitter node that the resize event is bound to.
- */
-function MarkerDetails(parent, splitter) {
- EventEmitter.decorate(this);
- this._document = parent.ownerDocument;
- this._parent = parent;
- this._splitter = splitter;
- this._splitter.addEventListener("mouseup", () => this.emit("resize"));
-}
-
-MarkerDetails.prototype = {
- /**
- * Removes any node references from this view.
- */
- destroy: function() {
- this.empty();
- this._parent = null;
- this._splitter = null;
- },
-
- /**
- * Clears the view.
- */
- empty: function() {
- this._parent.innerHTML = "";
- },
-
- /**
- * Builds the label representing marker's type.
- *
- * @param string type
- * Could be "Paint", "Reflow", "Styles", ...
- * See TIMELINE_BLUEPRINT in widgets/global.js
- */
- buildMarkerTypeLabel: function(type) {
- let blueprint = TIMELINE_BLUEPRINT[type];
-
- let hbox = this._document.createElement("hbox");
- hbox.setAttribute("align", "center");
-
- let bullet = this._document.createElement("hbox");
- bullet.className = "marker-details-bullet";
- bullet.style.backgroundColor = blueprint.fill;
- bullet.style.borderColor = blueprint.stroke;
-
- let label = this._document.createElement("label");
- label.className = "marker-details-type";
- label.setAttribute("value", blueprint.label);
-
- hbox.appendChild(bullet);
- hbox.appendChild(label);
-
- return hbox;
- },
-
- /**
- * Builds labels for name:value pairs. Like "Start: 100ms",
- * "Duration: 200ms", ...
- *
- * @param string l10nName
- * String identifier for label's name.
- * @param string value
- * Label's value.
- */
- buildNameValueLabel: function(l10nName, value) {
- let hbox = this._document.createElement("hbox");
- let labelName = this._document.createElement("label");
- let labelValue = this._document.createElement("label");
- labelName.className = "plain marker-details-labelname";
- labelValue.className = "plain marker-details-labelvalue";
- labelName.setAttribute("value", L10N.getStr(l10nName));
- labelValue.setAttribute("value", value);
- hbox.appendChild(labelName);
- hbox.appendChild(labelValue);
- return hbox;
- },
-
- /**
- * Populates view with marker's details.
- *
- * @param object params
- * An options object holding:
- * toolbox - The toolbox.
- * marker - The marker to display.
- * frames - Array of stack frame information; see stack.js.
- */
- render: function({toolbox: toolbox, marker: marker, frames: frames}) {
- this.empty();
-
- // UI for any marker
-
- let title = this.buildMarkerTypeLabel(marker.name);
-
- let toMs = ms => L10N.getFormatStrWithNumbers("timeline.tick", ms);
-
- let start = this.buildNameValueLabel("timeline.markerDetail.start", toMs(marker.start));
- let end = this.buildNameValueLabel("timeline.markerDetail.end", toMs(marker.end));
- let duration = this.buildNameValueLabel("timeline.markerDetail.duration", toMs(marker.end - marker.start));
-
- start.classList.add("marker-details-start");
- end.classList.add("marker-details-end");
- duration.classList.add("marker-details-duration");
-
- this._parent.appendChild(title);
- this._parent.appendChild(start);
- this._parent.appendChild(end);
- this._parent.appendChild(duration);
-
- // UI for specific markers
-
- switch (marker.name) {
- case "ConsoleTime":
- this.renderConsoleTimeMarker(this._parent, marker);
- break;
- case "DOMEvent":
- this.renderDOMEventMarker(this._parent, marker);
- break;
- default:
- }
-
- if (marker.stack) {
- let property = "timeline.markerDetail.stack";
- if (marker.endStack) {
- property = "timeline.markerDetail.startStack";
- }
- this.renderStackTrace({toolbox: toolbox, parent: this._parent, property: property,
- frameIndex: marker.stack, frames: frames});
- }
-
- if (marker.endStack) {
- this.renderStackTrace({toolbox: toolbox, parent: this._parent, property: "timeline.markerDetail.endStack",
- frameIndex: marker.endStack, frames: frames});
- }
- },
-
- /**
- * Render a stack trace.
- *
- * @param object params
- * An options object with the following members:
- * object toolbox - The toolbox.
- * nsIDOMNode parent - The parent node holding the view.
- * string property - String identifier for label's name.
- * integer frameIndex - The index of the topmost stack frame.
- * array frames - Array of stack frames.
- */
- renderStackTrace: function({toolbox: toolbox, parent: parent,
- property: property, frameIndex: frameIndex,
- frames: frames}) {
- let labelName = this._document.createElement("label");
- labelName.className = "plain marker-details-labelname";
- labelName.setAttribute("value", L10N.getStr(property));
- parent.appendChild(labelName);
-
- while (frameIndex > 0) {
- let frame = frames[frameIndex];
- let url = frame.source;
- let displayName = frame.functionDisplayName;
- let line = frame.line;
-
- let hbox = this._document.createElement("hbox");
-
- if (displayName) {
- let functionLabel = this._document.createElement("label");
- functionLabel.setAttribute("value", displayName);
- hbox.appendChild(functionLabel);
- }
-
- if (url) {
- let aNode = this._document.createElement("a");
- aNode.className = "waterfall-marker-location theme-link devtools-monospace";
- aNode.href = url;
- aNode.draggable = false;
- aNode.setAttribute("title", url);
-
- let text = WebConsoleUtils.abbreviateSourceURL(url) + ":" + line;
- let label = this._document.createElement("label");
- label.setAttribute("value", text);
- aNode.appendChild(label);
- hbox.appendChild(aNode);
-
- aNode.addEventListener("click", (event) => {
- event.preventDefault();
- viewSourceInDebugger(toolbox, url, line);
- });
- }
-
- if (!displayName && !url) {
- let label = this._document.createElement("label");
- label.setAttribute("value", L10N.getStr("timeline.markerDetail.unknownFrame"));
- hbox.appendChild(label);
- }
-
- parent.appendChild(hbox);
-
- frameIndex = frame.parent;
- }
- },
-
- /**
- * Render details of a console marker (console.time).
- *
- * @param nsIDOMNode parent
- * The parent node holding the view.
- * @param object marker
- * The marker to display.
- */
- renderConsoleTimeMarker: function(parent, marker) {
- if ("causeName" in marker) {
- let timerName = this.buildNameValueLabel("timeline.markerDetail.consoleTimerName", marker.causeName);
- this._parent.appendChild(timerName);
- }
- },
-
- /**
- * Render details of a DOM Event marker.
- *
- * @param nsIDOMNode parent
- * The parent node holding the view.
- * @param object marker
- * The marker to display.
- */
- renderDOMEventMarker: function(parent, marker) {
- if ("type" in marker) {
- let type = this.buildNameValueLabel("timeline.markerDetail.DOMEventType", marker.type);
- this._parent.appendChild(type);
- }
- if ("eventPhase" in marker) {
- let phaseL10NProp;
- if (marker.eventPhase == Ci.nsIDOMEvent.AT_TARGET) {
- phaseL10NProp = "timeline.markerDetail.DOMEventTargetPhase";
- }
- if (marker.eventPhase == Ci.nsIDOMEvent.CAPTURING_PHASE) {
- phaseL10NProp = "timeline.markerDetail.DOMEventCapturingPhase";
- }
- if (marker.eventPhase == Ci.nsIDOMEvent.BUBBLING_PHASE) {
- phaseL10NProp = "timeline.markerDetail.DOMEventBubblingPhase";
- }
- let phase = this.buildNameValueLabel("timeline.markerDetail.DOMEventPhase", L10N.getStr(phaseL10NProp));
- this._parent.appendChild(phase);
- }
- },
-
-};
-
-/**
- * Opens/selects the debugger in this toolbox and jumps to the specified
- * file name and line number.
- * @param object toolbox
- * The toolbox.
- * @param string url
- * @param number line
- */
-let viewSourceInDebugger = Task.async(function *(toolbox, url, line) {
- // If the Debugger was already open, switch to it and try to show the
- // source immediately. Otherwise, initialize it and wait for the sources
- // to be added first.
- let debuggerAlreadyOpen = toolbox.getPanel("jsdebugger");
- let { panelWin: dbg } = yield toolbox.selectTool("jsdebugger");
-
- if (!debuggerAlreadyOpen) {
- yield dbg.once(dbg.EVENTS.SOURCES_ADDED);
- }
-
- let { DebuggerView } = dbg;
- let { Sources } = DebuggerView;
-
- let item = Sources.getItemForAttachment(a => a.source.url === url);
- if (item) {
- return DebuggerView.setEditorLocation(item.attachment.source.actor, line, { noDebug: true });
- }
-
- return Promise.reject("Couldn't find the specified source in the debugger.");
-});
-
-exports.MarkerDetails = MarkerDetails;