Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2272)

Unified Diff: Source/devtools/front_end/layers/PaintProfilerView.js

Issue 319603007: DevTools: Add snapshot command log on the frontend. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Small fix. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/devtools/front_end/layersPanel.css » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/layers/PaintProfilerView.js
diff --git a/Source/devtools/front_end/layers/PaintProfilerView.js b/Source/devtools/front_end/layers/PaintProfilerView.js
index 99282c122866e40842b2eb1140e0a5aa78637702..f71f1167c2204626057d26912b8a2ff096fe4bd1 100644
--- a/Source/devtools/front_end/layers/PaintProfilerView.js
+++ b/Source/devtools/front_end/layers/PaintProfilerView.js
@@ -32,19 +32,22 @@
* @constructor
* @param {!WebInspector.LayerTreeModel} model
* @param {!WebInspector.Layers3DView} layers3DView
- * @extends {WebInspector.VBox}
+ * @extends {WebInspector.SplitView}
*/
WebInspector.PaintProfilerView = function(model, layers3DView)
{
- WebInspector.VBox.call(this);
+ WebInspector.SplitView.call(this, true, false);
this.element.classList.add("paint-profiler-view");
+ this._logTreeView = new WebInspector.PaintProfilerCommandLogView();
+ this._logTreeView.show(this.sidebarElement());
+ this.addEventListener(WebInspector.SplitView.Events.SidebarSizeChanged, this.onResize, this);
this._model = model;
this._layers3DView = layers3DView;
- this._canvas = this.element.createChild("canvas", "fill");
+ this._canvas = this.mainElement().createChild("canvas", "fill");
this._context = this._canvas.getContext("2d");
- this._selectionWindow = new WebInspector.OverviewGrid.Window(this.element, this.element);
+ this._selectionWindow = new WebInspector.OverviewGrid.Window(this.mainElement(), this.mainElement());
this._selectionWindow.addEventListener(WebInspector.OverviewGrid.Events.WindowChanged, this._onWindowChanged, this);
this._innerBarWidth = 4 * window.devicePixelRatio;
@@ -63,8 +66,8 @@ WebInspector.PaintProfilerView.prototype = {
_update: function()
{
- this._canvas.width = this.element.clientWidth * window.devicePixelRatio;
- this._canvas.height = this.element.clientHeight * window.devicePixelRatio;
+ this._canvas.width = this.mainElement().clientWidth * window.devicePixelRatio;
+ this._canvas.height = this.mainElement().clientHeight * window.devicePixelRatio;
this._samplesPerBar = 0;
if (!this._profiles || !this._profiles.length)
return;
@@ -130,6 +133,7 @@ WebInspector.PaintProfilerView.prototype = {
var stepLeft = Math.max(0, barLeft * this._samplesPerBar);
var stepRight = Math.min(barRight * this._samplesPerBar, this._profiles[0].length);
this._snapshot.requestImage(stepLeft, stepRight, this._layers3DView.showImageForLayer.bind(this._layers3DView, this._layer));
+ this._logTreeView.updateLog(stepLeft, stepRight);
},
_reset: function()
@@ -161,7 +165,10 @@ WebInspector.PaintProfilerView.prototype = {
return;
}
snapshot.requestImage(null, null, this._layers3DView.showImageForLayer.bind(this._layers3DView, this._layer));
- snapshot.profile(onProfileDone.bind(this));
+ var barrier = new CallbackBarrier();
+ snapshot.profile(barrier.createCallback(onProfileDone.bind(this)));
+ snapshot.commandLog(barrier.createCallback(onCommandLogDone.bind(this)));
+ barrier.callWhenDone(this._update.bind(this));
}
/**
@@ -171,9 +178,129 @@ WebInspector.PaintProfilerView.prototype = {
function onProfileDone(profiles)
{
this._profiles = profiles;
- this._update();
+ }
+
+ /**
+ * @param {!Array.<!Object>=} log
+ * @this {WebInspector.PaintProfilerView}
+ */
+ function onCommandLogDone(log)
+ {
+ this._logTreeView.setLog(log);
+ this._logTreeView.updateLog();
+ }
+ },
+
+ __proto__: WebInspector.SplitView.prototype
+};
+
+/**
+ * @constructor
+ * @extends {WebInspector.VBox}
+ */
+WebInspector.PaintProfilerCommandLogView = function()
+{
+ WebInspector.VBox.call(this);
+ this.setMinimumSize(100, 25);
+ this.element.classList.add("outline-disclosure");
+ var sidebarTreeElement = this.element.createChild("ol", "sidebar-tree");
+ this.sidebarTree = new TreeOutline(sidebarTreeElement);
+
+ this._log = [];
+}
+
+WebInspector.PaintProfilerCommandLogView.prototype = {
+ setLog: function(log)
+ {
+ this._log = log;
+ },
+
+ /**
+ * @param {number=} stepLeft
+ * @param {number=} stepRight
+ */
+ updateLog: function(stepLeft, stepRight)
+ {
+ var log = this._log;
+ stepLeft = stepLeft || 0;
+ stepRight = stepRight || log.length - 1;
+ this.sidebarTree.removeChildren();
+ for (var i = stepLeft; i <= stepRight; ++i) {
+ var node = new WebInspector.LogTreeElement(log[i]);
+ this.sidebarTree.appendChild(node);
}
},
__proto__: WebInspector.VBox.prototype
};
+
+/**
+ * @constructor
+ * @param {!Object} logItem
+ * @extends {TreeElement}
+ */
+WebInspector.LogTreeElement = function(logItem)
+{
+ TreeElement.call(this, "", logItem);
+ this._update();
+}
+
+WebInspector.LogTreeElement.prototype = {
+ /**
+ * @param {!Object} param
+ * @param {string} name
+ * @return {string}
+ */
+ _paramToString: function(param, name)
+ {
+ if (typeof param !== "object")
+ return typeof param === "string" && param.length > 100 ? name : JSON.stringify(param);
+ var str = "";
+ var keyCount = 0;
+ for (var key in param) {
+ if (++keyCount > 4 || typeof param[key] === "object" || (typeof param[key] === "string" && param[key].length > 100))
+ return name;
+ if (str)
+ str += ", ";
+ str += param[key];
+ }
+ return str;
+ },
+
+ /**
+ * @param {!Object} params
+ * @return {string}
+ */
+ _paramsToString: function(params)
+ {
+ var str = "";
+ for (var key in params) {
+ if (str)
+ str += ", ";
+ str += this._paramToString(params[key], key);
+ }
+ return str;
+ },
+
+ _update: function()
+ {
+ var logItem = this.representedObject;
+ var title = document.createDocumentFragment();
+ title.createChild("div", "selection");
+ var textContent = logItem.method;
+ if (logItem.params)
+ textContent += "(" + this._paramsToString(logItem.params) + ")";
+ title.appendChild(document.createTextNode(textContent));
+ this.title = title;
+ },
+
+ /**
+ * @param {boolean} hovered
+ */
+ setHovered: function(hovered)
+ {
+ this.listItemElement.classList.toggle("hovered", hovered);
+ },
+
+ __proto__: TreeElement.prototype
+};
« no previous file with comments | « no previous file | Source/devtools/front_end/layersPanel.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698