Title: [105292] trunk/Source/WebCore
- Revision
- 105292
- Author
- [email protected]
- Date
- 2012-01-18 10:20:40 -0800 (Wed, 18 Jan 2012)
Log Message
[chromium] Web Inspector: highlight DOM nodes from detached DOM trees.
https://bugs.webkit.org/show_bug.cgi?id=76545
Reviewed by Yury Semikhatsky.
* inspector/front-end/DetailedHeapshotGridNodes.js:
(WebInspector.HeapSnapshotGenericObjectNode):
(WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
* inspector/front-end/HeapSnapshot.js:
(WebInspector.HeapSnapshotNode.prototype.get isNativeRoot):
(WebInspector.HeapSnapshotNode.prototype.get isDetachedDOMTree):
(WebInspector.HeapSnapshot.prototype._init):
(WebInspector.HeapSnapshot.prototype._markDetachedDOMTreeNodes):
(WebInspector.HeapSnapshot.prototype._markQueriableHeapObjects):
(WebInspector.HeapSnapshot.prototype._calculateFlags):
* inspector/front-end/heapProfiler.css:
(.detached-dom-tree-node):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (105291 => 105292)
--- trunk/Source/WebCore/ChangeLog 2012-01-18 18:12:19 UTC (rev 105291)
+++ trunk/Source/WebCore/ChangeLog 2012-01-18 18:20:40 UTC (rev 105292)
@@ -1,3 +1,23 @@
+2012-01-18 Ilya Tikhonovsky <[email protected]>
+
+ [chromium] Web Inspector: highlight DOM nodes from detached DOM trees.
+ https://bugs.webkit.org/show_bug.cgi?id=76545
+
+ Reviewed by Yury Semikhatsky.
+
+ * inspector/front-end/DetailedHeapshotGridNodes.js:
+ (WebInspector.HeapSnapshotGenericObjectNode):
+ (WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
+ * inspector/front-end/HeapSnapshot.js:
+ (WebInspector.HeapSnapshotNode.prototype.get isNativeRoot):
+ (WebInspector.HeapSnapshotNode.prototype.get isDetachedDOMTree):
+ (WebInspector.HeapSnapshot.prototype._init):
+ (WebInspector.HeapSnapshot.prototype._markDetachedDOMTreeNodes):
+ (WebInspector.HeapSnapshot.prototype._markQueriableHeapObjects):
+ (WebInspector.HeapSnapshot.prototype._calculateFlags):
+ * inspector/front-end/heapProfiler.css:
+ (.detached-dom-tree-node):
+
2012-01-18 Pavel Feldman <[email protected]>
Web Inspector: there should be a way to set HTML for given frame.
Modified: trunk/Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js (105291 => 105292)
--- trunk/Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js 2012-01-18 18:12:19 UTC (rev 105291)
+++ trunk/Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js 2012-01-18 18:20:40 UTC (rev 105292)
@@ -188,6 +188,8 @@
this.hasHoverMessage = true;
} else if (node.flags & tree.snapshot.nodeFlags.canBeQueried)
this.hasHoverMessage = true;
+ if (node.flags & tree.snapshot.nodeFlags.detachedDOMTreeNode)
+ this.detachedDOMTreeNode = true;
};
WebInspector.HeapSnapshotGenericObjectNode.prototype = {
@@ -259,6 +261,8 @@
};
if (this.hasHoverMessage)
valueStyle += " highlight";
+ if (this.detachedDOMTreeNode)
+ valueStyle += " detached-dom-tree-node";
data["object"] = { valueStyle: valueStyle, value: value + " @" + this.snapshotNodeId };
var view = this.dataGrid.snapshotView;
Modified: trunk/Source/WebCore/inspector/front-end/HeapSnapshot.js (105291 => 105292)
--- trunk/Source/WebCore/inspector/front-end/HeapSnapshot.js 2012-01-18 18:12:19 UTC (rev 105291)
+++ trunk/Source/WebCore/inspector/front-end/HeapSnapshot.js 2012-01-18 18:20:40 UTC (rev 105292)
@@ -571,6 +571,16 @@
return this.name.substr(0, 9) === "DOMWindow";
},
+ get isNativeRoot()
+ {
+ return this.name === "(Native objects)";
+ },
+
+ get isDetachedDOMTree()
+ {
+ return this.className === "Detached DOM tree";
+ },
+
get isRoot()
{
return this.nodeIndex === this._snapshot._rootNodeIndex;
@@ -710,7 +720,10 @@
this._edgeInvisibleType = this._edgeTypes.length;
this._edgeTypes.push("invisible");
- this._nodeFlags = { canBeQueried: 1 };
+ this._nodeFlags = { // bit flags
+ canBeQueried: 1,
+ detachedDOMTreeNode: 2,
+ };
this._markInvisibleEdges();
},
@@ -1037,13 +1050,37 @@
return a < b ? -1 : (a > b ? 1 : 0);
},
- _calculateFlags: function()
+ _markDetachedDOMTreeNodes: function()
{
- var flag = this._nodeFlags.canBeQueried;
- this._flags = new Array(this.nodeCount);
+ var flag = this._nodeFlags.detachedDOMTreeNode;
+ var nativeRoot;
+ for (var iter = this.rootNode.edges; iter.hasNext(); iter.next()) {
+ var node = iter.edge.node;
+ if (node.isNativeRoot) {
+ nativeRoot = node;
+ break;
+ }
+ }
+
+ if (!nativeRoot)
+ return;
+
+ for (var iter = nativeRoot.edges; iter.hasNext(); iter.next()) {
+ var node = iter.edge.node;
+ if (node.isDetachedDOMTree) {
+ for (var edgesIter = node.edges; edgesIter.hasNext(); edgesIter.next())
+ this._flags[edgesIter.edge.node.nodeIndex] |= flag;
+ }
+ }
+ },
+
+ _markQueriableHeapObjects: function()
+ {
// Allow runtime properties query for objects accessible from DOMWindow objects
// via regular properties, and for DOM wrappers. Trying to access random objects
// can cause a crash due to insonsistent state of internal properties of wrappers.
+ var flag = this._nodeFlags.canBeQueried;
+
var list = [];
for (var iter = this.rootNode.edges; iter.hasNext(); iter.next()) {
if (iter.edge.node.isDOMWindow)
@@ -1052,9 +1089,9 @@
while (list.length) {
var node = list.pop();
- if (this._flags[node.nodeIndex])
+ if (this._flags[node.nodeIndex] & flag)
continue;
- this._flags[node.nodeIndex] = flag;
+ this._flags[node.nodeIndex] |= flag;
for (var iter = node.edges; iter.hasNext(); iter.next()) {
var edge = iter.edge;
var node = edge.node;
@@ -1072,6 +1109,13 @@
}
},
+ _calculateFlags: function()
+ {
+ this._flags = new Array(this.nodeCount);
+ this._markDetachedDOMTreeNodes();
+ this._markQueriableHeapObjects();
+ },
+
baseSnapshotHasNode: function(baseSnapshotId, className, nodeId)
{
return this._baseNodeIds[baseSnapshotId][className].binaryIndexOf(nodeId, this._numbersComparator) !== -1;
Modified: trunk/Source/WebCore/inspector/front-end/heapProfiler.css (105291 => 105292)
--- trunk/Source/WebCore/inspector/front-end/heapProfiler.css 2012-01-18 18:12:19 UTC (rev 105291)
+++ trunk/Source/WebCore/inspector/front-end/heapProfiler.css 2012-01-18 18:20:40 UTC (rev 105292)
@@ -120,6 +120,10 @@
position: static;
}
+.detached-dom-tree-node {
+ background-color: #FF9999;
+}
+
.detailed-heapshot-view .console-formatted-string {
white-space: nowrap;
}
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes