Index: Source/devtools/front_end/timeline/PaintProfilerView.js |
diff --git a/Source/devtools/front_end/timeline/PaintProfilerView.js b/Source/devtools/front_end/timeline/PaintProfilerView.js |
index e71c33b97c097225103d0c4c508919603ddd2067..75f55a42512184b389a8bbed810dcf619e019d08 100644 |
--- a/Source/devtools/front_end/timeline/PaintProfilerView.js |
+++ b/Source/devtools/front_end/timeline/PaintProfilerView.js |
@@ -245,13 +245,12 @@ 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.element.classList.add("outline-disclosure", "profiler-log-view", "section"); |
+ var sidebarTreeElement = this.element.createChild("ol", "sidebar-tree properties monospace"); |
sidebarTreeElement.addEventListener("mousemove", this._onMouseMove.bind(this), false); |
sidebarTreeElement.addEventListener("mouseout", this._onMouseMove.bind(this), false); |
sidebarTreeElement.addEventListener("contextmenu", this._onContextMenu.bind(this), true); |
this.sidebarTree = new TreeOutline(sidebarTreeElement); |
- this._popoverHelper = new WebInspector.ObjectPopoverHelper(this.element, this._getHoverAnchor.bind(this), this._resolveObjectForPopover.bind(this), undefined, true); |
this._reset(); |
} |
@@ -269,6 +268,16 @@ WebInspector.PaintProfilerCommandLogView.prototype = { |
}, |
/** |
+ * @param {!TreeOutline} treeOutline |
+ * @param {!WebInspector.PaintProfilerLogItem} logItem |
+ */ |
+ _appendLogItem: function(treeOutline, logItem) |
+ { |
+ var treeElement = new WebInspector.LogTreeElement(this, logItem); |
+ treeOutline.appendChild(treeElement); |
+ }, |
+ |
+ /** |
* @param {number=} stepLeft |
* @param {number=} stepRight |
*/ |
@@ -277,10 +286,8 @@ WebInspector.PaintProfilerCommandLogView.prototype = { |
stepLeft = stepLeft || 0; |
stepRight = stepRight || this._log.length - 1; |
this.sidebarTree.removeChildren(); |
- for (var i = stepLeft; i <= stepRight; ++i) { |
- var node = new WebInspector.LogTreeElement(this, this._log[i]); |
- this.sidebarTree.appendChild(node); |
- } |
+ for (var i = stepLeft; i <= stepRight; ++i) |
+ this._appendLogItem(this.sidebarTree, this._log[i]); |
}, |
_reset: function() |
@@ -289,35 +296,12 @@ WebInspector.PaintProfilerCommandLogView.prototype = { |
}, |
/** |
- * @param {!Element} target |
- * @return {!Element} |
- */ |
- _getHoverAnchor: function(target) |
- { |
- return /** @type {!Element} */ (target.enclosingNodeOrSelfWithNodeName("span")); |
- }, |
- |
- /** |
- * @param {!Element} element |
- * @param {function(!WebInspector.RemoteObject, boolean, !Element=):undefined} showCallback |
- */ |
- _resolveObjectForPopover: function(element, showCallback) |
- { |
- var liElement = element.enclosingNodeOrSelfWithNodeName("li"); |
- var logItem = liElement.treeElement.representedObject; |
- var obj = {"method": logItem.method}; |
- if (logItem.params) |
- obj.params = logItem.params; |
- showCallback(WebInspector.RemoteObject.fromLocalObject(obj), false); |
- }, |
- |
- /** |
* @param {?Event} event |
*/ |
_onMouseMove: function(event) |
{ |
var node = this.sidebarTree.treeElementFromPoint(event.pageX, event.pageY); |
- if (node === this._lastHoveredNode) |
+ if (node === this._lastHoveredNode || !(node instanceof WebInspector.LogTreeElement)) |
return; |
if (this._lastHoveredNode) |
this._lastHoveredNode.setHovered(false); |
@@ -334,7 +318,7 @@ WebInspector.PaintProfilerCommandLogView.prototype = { |
if (!this._target) |
return; |
var node = this.sidebarTree.treeElementFromPoint(event.pageX, event.pageY); |
- if (!node || !node.representedObject) |
+ if (!node || !node.representedObject || !(node instanceof WebInspector.LogTreeElement)) |
return; |
var logItem = /** @type {!WebInspector.PaintProfilerLogItem} */ (node.representedObject); |
if (!logItem.nodeId()) |
@@ -358,10 +342,25 @@ WebInspector.LogTreeElement = function(ownerView, logItem) |
{ |
TreeElement.call(this, "", logItem); |
this._ownerView = ownerView; |
- this._update(); |
+ this._filled = false; |
} |
WebInspector.LogTreeElement.prototype = { |
+ onattach: function() |
+ { |
+ this._update(); |
+ this.hasChildren = !!this.representedObject.params; |
+ }, |
+ |
+ onexpand: function() |
+ { |
+ if (this._filled) |
+ return; |
+ this._filled = true; |
+ for (var param in this.representedObject.params) |
+ WebInspector.LogPropertyTreeElement._appendLogPropertyItem(this, param, this.representedObject.params[param]); |
+ }, |
+ |
/** |
* @param {!Object} param |
* @param {string} name |
@@ -403,11 +402,7 @@ WebInspector.LogTreeElement.prototype = { |
var logItem = this.representedObject; |
var title = document.createDocumentFragment(); |
title.createChild("div", "selection"); |
- var span = title.createChild("span"); |
- var textContent = logItem.method; |
- if (logItem.params) |
- textContent += "(" + this._paramsToString(logItem.params) + ")"; |
- span.textContent = textContent; |
+ title.createTextChild(logItem.method + "(" + this._paramsToString(logItem.params) + ")"); |
this.title = title; |
}, |
@@ -445,6 +440,52 @@ WebInspector.LogTreeElement.prototype = { |
}; |
/** |
+ * @constructor |
+ * @param {!{name: string, value}} property |
+ * @extends {TreeElement} |
+ */ |
+WebInspector.LogPropertyTreeElement = function(property) |
+{ |
+ TreeElement.call(this, "", property); |
+}; |
+ |
+/** |
+ * @param {!TreeElement} element |
+ * @param {string} name |
+ * @param {*} value |
+ */ |
+WebInspector.LogPropertyTreeElement._appendLogPropertyItem = function(element, name, value) |
+{ |
+ var treeElement = new WebInspector.LogPropertyTreeElement({name: name, value: value}); |
+ element.appendChild(treeElement); |
+ if (value && typeof value === "object") { |
+ for (var property in value) |
+ WebInspector.LogPropertyTreeElement._appendLogPropertyItem(treeElement, property, value[property]); |
+ } |
+}; |
+ |
+WebInspector.LogPropertyTreeElement.prototype = { |
+ onattach: function() |
+ { |
+ var property = this.representedObject; |
+ var title = document.createDocumentFragment(); |
+ title.createChild("div", "selection"); |
+ var nameElement = title.createChild("span", "name"); |
+ nameElement.textContent = property.name; |
+ var separatorElement = title.createChild("span", "separator"); |
+ separatorElement.textContent = ": "; |
+ if (property.value === null || typeof property.value !== "object") { |
+ var valueElement = title.createChild("span", "value"); |
+ valueElement.textContent = JSON.stringify(property.value); |
+ valueElement.classList.add("console-formatted-" + property.value === null ? "null" : typeof property.value); |
+ } |
+ this.title = title; |
+ }, |
+ |
+ __proto__: TreeElement.prototype |
+} |
+ |
+/** |
* @return {!Object.<string, !WebInspector.PaintProfilerCategory>} |
*/ |
WebInspector.PaintProfilerView.categories = function() |