<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[200474] trunk/Source/WebInspectorUI</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/200474">200474</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-05-05 13:34:17 -0700 (Thu, 05 May 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Web Inspector: HeapSnapshot should exploratory Object Graph view
https://bugs.webkit.org/show_bug.cgi?id=157371
<rdar://problem/26107304>
Patch by Joseph Pecoraro <pecoraro@apple.com> on 2016-05-05
Reviewed by Timothy Hatcher.
HeapSnapshots now have two ContentViews for viewing the graph.
HeapSnapshotInstancesContentView:
- top level are Class Categories nodes
- categories expand to Instances
- instances expand to show what they retain
- retained sizes only shown for dominated nodes of the instance
HeapSnapshotObjectGraphContentView:
- top level are GlobalObject or Window nodes
- expand to show what they retain
- retained sizes are shown for all nodes, everything is shown
This also provides a custom preview for Window instances. Instead of
showing an ObjectPreview, it just shows the `window.location.href`
for that instance, which is useful when there are multiple Window
instances for different frames.
* Localizations/en.lproj/localizedStrings.js:
* UserInterface/Main.html:
New "Object Graph" string and new files.
* UserInterface/Images/HeapSnapshotObjectGraph.svg: Added.
* UserInterface/Images/gtk/HeapSnapshotObjectGraph.svg: Added.
* UserInterface/Views/PathComponentIcons.css:
(.heap-snapshot-object-graph-icon .icon):
Copy the red [{}] icon from Style Rules.
* UserInterface/Views/HeapSnapshotClusterContentView.js:
(WebInspector.HeapSnapshotClusterContentView):
(WebInspector.HeapSnapshotClusterContentView.prototype.get objectGraphContentView):
(WebInspector.HeapSnapshotClusterContentView.prototype.showObjectGraph):
(WebInspector.HeapSnapshotClusterContentView.prototype._supportsObjectGraph):
(WebInspector.HeapSnapshotClusterContentView.prototype._pathComponentForContentView):
(WebInspector.HeapSnapshotClusterContentView.prototype._identifierForContentView):
(WebInspector.HeapSnapshotClusterContentView.prototype._showContentViewForIdentifier):
Include an "Object Graph" content view. This is unavailable in Diff views
but is available for individual HeapSnapshots.
* UserInterface/Views/HeapSnapshotContentView.js: Renamed from Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesContentView.js.
(WebInspector.HeapSnapshotContentView):
(WebInspector.HeapSnapshotContentView.prototype.shown):
(WebInspector.HeapSnapshotContentView.prototype.hidden):
(WebInspector.HeapSnapshotContentView.prototype._sortDataGrid):
(WebInspector.HeapSnapshotContentView.prototype._heapSnapshotDataGridTreeDidPopulate):
(WebInspector.HeapSnapshotInstancesContentView):
(WebInspector.HeapSnapshotObjectGraphContentView):
Share and generalize a HeapSnapshot ContentView. The only differences are
the DataGrid columns, DataGridTree class, and identifier prefix for settings.
* UserInterface/Views/HeapSnapshotDataGridTree.js: Renamed from Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesDataGridTree.js.
(WebInspector.HeapSnapshotDataGridTree):
(WebInspector.HeapSnapshotDataGridTree.buildSortComparator):
(WebInspector.HeapSnapshotDataGridTree.prototype.get heapSnapshot):
(WebInspector.HeapSnapshotDataGridTree.prototype.get visible):
(WebInspector.HeapSnapshotDataGridTree.prototype.get popover):
(WebInspector.HeapSnapshotDataGridTree.prototype.get popoverNode):
(WebInspector.HeapSnapshotDataGridTree.prototype.set popoverNode):
(WebInspector.HeapSnapshotDataGridTree.prototype.get children):
(WebInspector.HeapSnapshotDataGridTree.prototype.appendChild):
(WebInspector.HeapSnapshotDataGridTree.prototype.insertChild):
(WebInspector.HeapSnapshotDataGridTree.prototype.removeChildren):
(WebInspector.HeapSnapshotDataGridTree.prototype.set sortComparator):
(WebInspector.HeapSnapshotDataGridTree.prototype.sort):
(WebInspector.HeapSnapshotDataGridTree.prototype.shown):
(WebInspector.HeapSnapshotDataGridTree.prototype.hidden):
(WebInspector.HeapSnapshotDataGridTree.prototype.willDismissPopover):
(WebInspector.HeapSnapshotDataGridTree.prototype.get alwaysShowRetainedSize):
(WebInspector.HeapSnapshotDataGridTree.prototype.populateTopLevel):
(WebInspector.HeapSnapshotDataGridTree.prototype.didPopulate):
(WebInspector.HeapSnapshotInstancesDataGridTree.prototype.get alwaysShowRetainedSize):
(WebInspector.HeapSnapshotInstancesDataGridTree.prototype.populateTopLevel):
(WebInspector.HeapSnapshotInstancesDataGridTree):
(WebInspector.HeapSnapshotObjectGraphDataGridTree.prototype.get alwaysShowRetainedSize):
(WebInspector.HeapSnapshotObjectGraphDataGridTree.prototype.populateTopLevel):
(WebInspector.HeapSnapshotObjectGraphDataGridTree):
* UserInterface/Views/HeapSnapshotInstanceDataGridNode.js:
(WebInspector.HeapSnapshotInstanceDataGridNode.prototype.createCellContent):
Start using different previews based on instance type.
(WebInspector.HeapSnapshotInstanceDataGridNode.prototype._populateError):
Common preview error logic. Also, don't output "Internal object" next to things
like Structure, InferredType, etc. Just don't output anything. Eventually, if
we provide preview data, something will show, but for now nothing is fine.
(WebInspector.HeapSnapshotInstanceDataGridNode.prototype._populateWindowPreview.inspectedPage_window_getLocationHref):
(WebInspector.HeapSnapshotInstanceDataGridNode.prototype._populateWindowPreview):
Custom preview logic for Window's gets `window.location.href` on the instance if it is alive.
(WebInspector.HeapSnapshotInstanceDataGridNode.prototype._populatePreview):
Normal preview logic.
* UserInterface/Views/HeapSnapshotInstancesContentView.css:
(.heap-snapshot > .data-grid tr:not(.selected) td .preview-error): Deleted.
The red text for errors was standing out too much. Make it the default black.
* UserInterface/Views/HeapAllocationsTimelineView.js:
(WebInspector.HeapAllocationsTimelineView.prototype.showHeapSnapshotTimelineRecord):
Better variable name.
* UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
(WebInspector.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.inspectedPage_evalResult_getArrayCompletions):
(WebInspector.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.inspectedPage_evalResult_getCompletions):
(WebInspector.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.getArrayCompletions): Deleted.
(WebInspector.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.getCompletions): Deleted.
(WebInspector.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.evaluated):
Try to be clearer about functions that run on the inspected page
by using the pattern with inspectedPage_<thisObject>_functionName.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUILocalizationsenlprojlocalizedStringsjs">trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceControllersJavaScriptRuntimeCompletionProviderjs">trunk/Source/WebInspectorUI/UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceMainhtml">trunk/Source/WebInspectorUI/UserInterface/Main.html</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsHeapAllocationsTimelineViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/HeapAllocationsTimelineView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotClusterContentViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotClusterContentView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotInstanceDataGridNodejs">trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstanceDataGridNode.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotInstancesContentViewcss">trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesContentView.css</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsPathComponentIconscss">trunk/Source/WebInspectorUI/UserInterface/Views/PathComponentIcons.css</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceImagesHeapSnapshotObjectGraphsvg">trunk/Source/WebInspectorUI/UserInterface/Images/HeapSnapshotObjectGraph.svg</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceImagesgtkHeapSnapshotObjectGraphsvg">trunk/Source/WebInspectorUI/UserInterface/Images/gtk/HeapSnapshotObjectGraph.svg</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotContentViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotContentView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotDataGridTreejs">trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotDataGridTree.js</a></li>
</ul>
<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotInstancesContentViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesContentView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotInstancesDataGridTreejs">trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesDataGridTree.js</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (200473 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2016-05-05 20:27:12 UTC (rev 200473)
+++ trunk/Source/WebInspectorUI/ChangeLog        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -1,3 +1,121 @@
</span><ins>+2016-05-05 Joseph Pecoraro <pecoraro@apple.com>
+
+ Web Inspector: HeapSnapshot should exploratory Object Graph view
+ https://bugs.webkit.org/show_bug.cgi?id=157371
+ <rdar://problem/26107304>
+
+ Reviewed by Timothy Hatcher.
+
+ HeapSnapshots now have two ContentViews for viewing the graph.
+
+ HeapSnapshotInstancesContentView:
+ - top level are Class Categories nodes
+ - categories expand to Instances
+ - instances expand to show what they retain
+ - retained sizes only shown for dominated nodes of the instance
+
+ HeapSnapshotObjectGraphContentView:
+ - top level are GlobalObject or Window nodes
+ - expand to show what they retain
+ - retained sizes are shown for all nodes, everything is shown
+
+ This also provides a custom preview for Window instances. Instead of
+ showing an ObjectPreview, it just shows the `window.location.href`
+ for that instance, which is useful when there are multiple Window
+ instances for different frames.
+
+ * Localizations/en.lproj/localizedStrings.js:
+ * UserInterface/Main.html:
+ New "Object Graph" string and new files.
+
+ * UserInterface/Images/HeapSnapshotObjectGraph.svg: Added.
+ * UserInterface/Images/gtk/HeapSnapshotObjectGraph.svg: Added.
+ * UserInterface/Views/PathComponentIcons.css:
+ (.heap-snapshot-object-graph-icon .icon):
+ Copy the red [{}] icon from Style Rules.
+
+ * UserInterface/Views/HeapSnapshotClusterContentView.js:
+ (WebInspector.HeapSnapshotClusterContentView):
+ (WebInspector.HeapSnapshotClusterContentView.prototype.get objectGraphContentView):
+ (WebInspector.HeapSnapshotClusterContentView.prototype.showObjectGraph):
+ (WebInspector.HeapSnapshotClusterContentView.prototype._supportsObjectGraph):
+ (WebInspector.HeapSnapshotClusterContentView.prototype._pathComponentForContentView):
+ (WebInspector.HeapSnapshotClusterContentView.prototype._identifierForContentView):
+ (WebInspector.HeapSnapshotClusterContentView.prototype._showContentViewForIdentifier):
+ Include an "Object Graph" content view. This is unavailable in Diff views
+ but is available for individual HeapSnapshots.
+
+ * UserInterface/Views/HeapSnapshotContentView.js: Renamed from Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesContentView.js.
+ (WebInspector.HeapSnapshotContentView):
+ (WebInspector.HeapSnapshotContentView.prototype.shown):
+ (WebInspector.HeapSnapshotContentView.prototype.hidden):
+ (WebInspector.HeapSnapshotContentView.prototype._sortDataGrid):
+ (WebInspector.HeapSnapshotContentView.prototype._heapSnapshotDataGridTreeDidPopulate):
+ (WebInspector.HeapSnapshotInstancesContentView):
+ (WebInspector.HeapSnapshotObjectGraphContentView):
+ Share and generalize a HeapSnapshot ContentView. The only differences are
+ the DataGrid columns, DataGridTree class, and identifier prefix for settings.
+
+ * UserInterface/Views/HeapSnapshotDataGridTree.js: Renamed from Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesDataGridTree.js.
+ (WebInspector.HeapSnapshotDataGridTree):
+ (WebInspector.HeapSnapshotDataGridTree.buildSortComparator):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.get heapSnapshot):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.get visible):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.get popover):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.get popoverNode):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.set popoverNode):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.get children):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.appendChild):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.insertChild):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.removeChildren):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.set sortComparator):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.sort):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.shown):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.hidden):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.willDismissPopover):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.get alwaysShowRetainedSize):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.populateTopLevel):
+ (WebInspector.HeapSnapshotDataGridTree.prototype.didPopulate):
+ (WebInspector.HeapSnapshotInstancesDataGridTree.prototype.get alwaysShowRetainedSize):
+ (WebInspector.HeapSnapshotInstancesDataGridTree.prototype.populateTopLevel):
+ (WebInspector.HeapSnapshotInstancesDataGridTree):
+ (WebInspector.HeapSnapshotObjectGraphDataGridTree.prototype.get alwaysShowRetainedSize):
+ (WebInspector.HeapSnapshotObjectGraphDataGridTree.prototype.populateTopLevel):
+ (WebInspector.HeapSnapshotObjectGraphDataGridTree):
+
+ * UserInterface/Views/HeapSnapshotInstanceDataGridNode.js:
+ (WebInspector.HeapSnapshotInstanceDataGridNode.prototype.createCellContent):
+ Start using different previews based on instance type.
+
+ (WebInspector.HeapSnapshotInstanceDataGridNode.prototype._populateError):
+ Common preview error logic. Also, don't output "Internal object" next to things
+ like Structure, InferredType, etc. Just don't output anything. Eventually, if
+ we provide preview data, something will show, but for now nothing is fine.
+
+ (WebInspector.HeapSnapshotInstanceDataGridNode.prototype._populateWindowPreview.inspectedPage_window_getLocationHref):
+ (WebInspector.HeapSnapshotInstanceDataGridNode.prototype._populateWindowPreview):
+ Custom preview logic for Window's gets `window.location.href` on the instance if it is alive.
+
+ (WebInspector.HeapSnapshotInstanceDataGridNode.prototype._populatePreview):
+ Normal preview logic.
+
+ * UserInterface/Views/HeapSnapshotInstancesContentView.css:
+ (.heap-snapshot > .data-grid tr:not(.selected) td .preview-error): Deleted.
+ The red text for errors was standing out too much. Make it the default black.
+
+ * UserInterface/Views/HeapAllocationsTimelineView.js:
+ (WebInspector.HeapAllocationsTimelineView.prototype.showHeapSnapshotTimelineRecord):
+ Better variable name.
+
+ * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
+ (WebInspector.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.inspectedPage_evalResult_getArrayCompletions):
+ (WebInspector.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.inspectedPage_evalResult_getCompletions):
+ (WebInspector.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.getArrayCompletions): Deleted.
+ (WebInspector.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.getCompletions): Deleted.
+ (WebInspector.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.evaluated):
+ Try to be clearer about functions that run on the inspected page
+ by using the pattern with inspectedPage_<thisObject>_functionName.
+
</ins><span class="cx"> 2016-05-05 Nikita Vasilyev <nvasilyev@apple.com>
</span><span class="cx">
</span><span class="cx"> Web Inspector: Console is unresponsive for >10 seconds when it tries to render 10,000 messages
</span></span></pre></div>
<a id="trunkSourceWebInspectorUILocalizationsenlprojlocalizedStringsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js (200473 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js        2016-05-05 20:27:12 UTC (rev 200473)
+++ trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -410,7 +410,6 @@
</span><span class="cx"> localizedStrings["Input: "] = "Input: ";
</span><span class="cx"> localizedStrings["Inset"] = "Inset";
</span><span class="cx"> localizedStrings["Instances"] = "Instances";
</span><del>-localizedStrings["Internal object"] = "Internal object";
</del><span class="cx"> localizedStrings["Invalid"] = "Invalid";
</span><span class="cx"> localizedStrings["Invoke getter"] = "Invoke getter";
</span><span class="cx"> localizedStrings["Iterations"] = "Iterations";
</span><span class="lines">@@ -509,6 +508,7 @@
</span><span class="cx"> localizedStrings["Not found"] = "Not found";
</span><span class="cx"> localizedStrings["Number"] = "Number";
</span><span class="cx"> localizedStrings["Numeric"] = "Numeric";
</span><ins>+localizedStrings["Object Graph"] = "Object Graph";
</ins><span class="cx"> localizedStrings["Offset"] = "Offset";
</span><span class="cx"> localizedStrings["Online"] = "Online";
</span><span class="cx"> localizedStrings["Opacity"] = "Opacity";
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceControllersJavaScriptRuntimeCompletionProviderjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js (200473 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js        2016-05-05 20:27:12 UTC (rev 200473)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -125,7 +125,7 @@
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- function getArrayCompletions(primitiveType)
</del><ins>+ function inspectedPage_evalResult_getArrayCompletions(primitiveType)
</ins><span class="cx"> {
</span><span class="cx"> var array = this;
</span><span class="cx"> var arrayLength;
</span><span class="lines">@@ -153,7 +153,7 @@
</span><span class="cx"> return resultSet;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- function getCompletions(primitiveType)
</del><ins>+ function inspectedPage_evalResult_getCompletions(primitiveType)
</ins><span class="cx"> {
</span><span class="cx"> var object;
</span><span class="cx"> if (primitiveType === "string")
</span><span class="lines">@@ -182,9 +182,9 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (result.subtype === "array")
</span><del>- result.callFunctionJSON(getArrayCompletions, undefined, receivedArrayPropertyNames.bind(this));
</del><ins>+ result.callFunctionJSON(inspectedPage_evalResult_getArrayCompletions, undefined, receivedArrayPropertyNames.bind(this));
</ins><span class="cx"> else if (result.type === "object" || result.type === "function")
</span><del>- result.callFunctionJSON(getCompletions, undefined, receivedPropertyNames.bind(this));
</del><ins>+ result.callFunctionJSON(inspectedPage_evalResult_getCompletions, undefined, receivedPropertyNames.bind(this));
</ins><span class="cx"> else if (result.type === "string" || result.type === "number" || result.type === "boolean" || result.type === "symbol")
</span><span class="cx"> WebInspector.runtimeManager.evaluateInInspectedWindow("(" + getCompletions + ")(\"" + result.type + "\")", "completion", false, true, true, false, false, receivedPropertyNamesFromEvaluate.bind(this));
</span><span class="cx"> else
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceImagesHeapSnapshotObjectGraphsvg"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Images/HeapSnapshotObjectGraph.svg (0 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Images/HeapSnapshotObjectGraph.svg         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Images/HeapSnapshotObjectGraph.svg        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright © 2013 Apple Inc. All rights reserved. -->
+<svg xmlns="http://www.w3.org/2000/svg" id="root" version="1.1" viewBox="0 0 16 16">
+ <path fill="rgb(236, 151, 153)" d="M 13 1 L 3 1 C 1.898438 1 1 1.898438 1 3 L 1 13 C 1 14.101562 1.898438 15 3 15 L 13 15 C 14.101562 15 15 14.101562 15 13 L 15 3 C 15 1.898438 14.101562 1 13 1 Z"/>
+ <path fill="rgb(191, 109, 113)" d="M 13 1 L 3 1 C 1.898438 1 1 1.898438 1 3 L 1 13 C 1 14.101562 1.898438 15 3 15 L 13 15 C 14.101562 15 15 14.101562 15 13 L 15 3 C 15 1.898438 14.101562 1 13 1 M 13 2 C 13.550781 2 14 2.449219 14 3 L 14 13 C 14 13.550781 13.550781 14 13 14 L 3 14 C 2.449219 14 2 13.550781 2 13 L 2 3 C 2 2.449219 2.449219 2 3 2 L 13 2"/>
+ <path fill="white" d="M 6.585938 12.023438 C 6.152344 12.023438 5.820312 11.96875 5.574219 11.863281 C 5.308594 11.746094 5.113281 11.550781 4.992188 11.285156 C 4.882812 11.035156 4.828125 10.660156 4.828125 10.136719 C 4.828125 9.453125 4.796875 9.226562 4.78125 9.152344 C 4.753906 9.03125 4.699219 8.925781 4.617188 8.824219 C 4.558594 8.75 4.40625 8.703125 4.191406 8.695312 L 4 8.6875 L 4 7.328125 L 4.199219 7.328125 C 4.414062 7.324219 4.566406 7.265625 4.667969 7.144531 C 4.714844 7.085938 4.828125 6.875 4.828125 6.152344 C 4.828125 5.691406 4.84375 5.355469 4.878906 5.128906 C 4.914062 4.875 5.007812 4.660156 5.152344 4.484375 C 5.296875 4.308594 5.484375 4.183594 5.710938 4.109375 C 5.925781 4.035156 6.210938 4 6.585938 4 L 6.984375 4 L 6.984375 5.367188 L 6.785156 5.367188 C 6.363281 5.367188 6.273438 5.417969 6.265625 5.425781 C 6.265625 5.425781 6.21875 5.488281 6.214844 5.742188 C 6.199219 6.386719 6.175781 6.804688 6.152344 7 C 6.125 7.21093
8 6.0625 7.417969 5.964844 7.613281 C 5.894531 7.753906 5.789062 7.882812 5.644531 8.011719 C 5.78125 8.132812 5.890625 8.273438 5.96875 8.421875 C 6.085938 8.648438 6.152344 8.957031 6.171875 9.367188 L 6.226562 10.515625 C 6.234375 10.539062 6.257812 10.574219 6.300781 10.601562 C 6.308594 10.605469 6.394531 10.65625 6.78125 10.65625 L 6.980469 10.65625 L 6.980469 12.023438 Z"/>
+ <path fill="rgb(204, 116, 121)" d="M 7.984375 3 L 6.585938 3 C 6.101562 3 5.714844 3.050781 5.394531 3.160156 C 4.984375 3.296875 4.648438 3.527344 4.382812 3.84375 C 4.121094 4.160156 3.953125 4.546875 3.886719 4.984375 C 3.847656 5.265625 3.828125 5.636719 3.828125 6.152344 C 3.828125 6.21875 3.828125 6.277344 3.824219 6.332031 L 3 6.339844 L 3 9.652344 L 3.820312 9.683594 C 3.824219 9.796875 3.828125 9.941406 3.828125 10.136719 C 3.828125 10.8125 3.90625 11.308594 4.082031 11.691406 C 4.300781 12.1875 4.679688 12.558594 5.171875 12.777344 C 5.546875 12.941406 6.011719 13.023438 6.585938 13.023438 L 7.980469 13.023438 L 7.980469 9.652344 L 7.1875 9.652344 L 7.171875 9.316406 C 7.144531 8.789062 7.050781 8.363281 6.882812 8.015625 C 7.015625 7.730469 7.105469 7.433594 7.144531 7.121094 C 7.160156 7.015625 7.175781 6.820312 7.195312 6.363281 L 7.984375 6.363281 Z M 6.984375 4 L 6.984375 5.363281 L 6.785156 5.363281 C 6.367188 5.363281 6.277344 5.417969
6.265625 5.425781 C 6.265625 5.425781 6.21875 5.488281 6.214844 5.742188 C 6.199219 6.386719 6.175781 6.804688 6.152344 7 C 6.125 7.210938 6.0625 7.417969 5.964844 7.613281 C 5.894531 7.753906 5.789062 7.886719 5.644531 8.011719 C 5.78125 8.132812 5.890625 8.269531 5.96875 8.421875 C 6.085938 8.648438 6.152344 8.957031 6.171875 9.363281 L 6.226562 10.515625 C 6.234375 10.539062 6.257812 10.574219 6.296875 10.601562 C 6.308594 10.605469 6.394531 10.652344 6.78125 10.652344 L 6.980469 10.652344 L 6.980469 12.023438 L 6.585938 12.023438 C 6.152344 12.023438 5.820312 11.96875 5.574219 11.859375 C 5.308594 11.742188 5.113281 11.550781 4.992188 11.285156 C 4.882812 11.035156 4.828125 10.660156 4.828125 10.136719 C 4.828125 9.453125 4.796875 9.230469 4.78125 9.152344 C 4.753906 9.03125 4.699219 8.925781 4.617188 8.824219 C 4.554688 8.75 4.40625 8.703125 4.195312 8.695312 L 4 8.6875 L 4 7.328125 L 4.199219 7.328125 C 4.414062 7.324219 4.570312 7.265625 4.667969 7.144531 C 4.714844 7
.085938 4.828125 6.875 4.828125 6.152344 C 4.828125 5.691406 4.84375 5.355469 4.878906 5.128906 C 4.914062 4.875 5.007812 4.65625 5.152344 4.484375 C 5.296875 4.3125 5.484375 4.183594 5.710938 4.105469 C 5.925781 4.035156 6.210938 4 6.585938 4 L 6.984375 4"/>
+ <path fill="rgb(204, 116, 121)" d="M 9.414062 3 L 8.015625 3 L 8.015625 6.363281 L 8.808594 6.363281 C 8.824219 6.804688 8.851562 7.113281 8.890625 7.328125 C 8.933594 7.570312 9.011719 7.804688 9.117188 8.019531 C 9 8.261719 8.921875 8.519531 8.878906 8.785156 C 8.851562 8.921875 8.828125 9.136719 8.808594 9.652344 L 8.019531 9.652344 L 8.019531 13.023438 L 9.421875 13.023438 C 9.90625 13.023438 10.296875 12.96875 10.617188 12.859375 C 11.003906 12.730469 11.355469 12.496094 11.617188 12.179688 C 11.886719 11.855469 12.054688 11.472656 12.117188 11.035156 C 12.15625 10.753906 12.171875 10.382812 12.171875 9.863281 C 12.171875 9.800781 12.175781 9.742188 12.175781 9.691406 L 13 9.683594 L 13 6.371094 L 12.179688 6.339844 C 12.175781 6.230469 12.171875 6.078125 12.171875 5.886719 C 12.171875 5.210938 12.09375 4.714844 11.921875 4.328125 C 11.699219 3.839844 11.324219 3.464844 10.828125 3.246094 C 10.453125 3.078125 9.988281 3 9.414062 3 M 9.414062 4 C 9.
847656 4 10.179688 4.054688 10.425781 4.160156 C 10.691406 4.277344 10.886719 4.472656 11.007812 4.738281 C 11.117188 4.988281 11.171875 5.363281 11.171875 5.886719 C 11.171875 6.59375 11.203125 6.816406 11.222656 6.886719 C 11.253906 7.003906 11.308594 7.105469 11.390625 7.203125 C 11.425781 7.246094 11.523438 7.316406 11.808594 7.328125 L 12 7.335938 L 12 8.695312 L 11.800781 8.695312 C 11.585938 8.699219 11.433594 8.757812 11.332031 8.878906 C 11.273438 8.953125 11.171875 9.175781 11.171875 9.863281 C 11.171875 10.332031 11.15625 10.667969 11.125 10.894531 C 11.089844 11.144531 10.996094 11.363281 10.851562 11.539062 C 10.707031 11.714844 10.519531 11.839844 10.292969 11.914062 C 10.082031 11.984375 9.796875 12.023438 9.421875 12.023438 L 9.019531 12.023438 L 9.019531 10.652344 L 9.21875 10.652344 C 9.636719 10.652344 9.726562 10.59375 9.730469 10.59375 C 9.730469 10.59375 9.785156 10.53125 9.789062 10.277344 C 9.808594 9.582031 9.828125 9.148438 9.863281 8.945312 C 9.898
438 8.730469 9.972656 8.527344 10.078125 8.339844 C 10.144531 8.21875 10.238281 8.109375 10.355469 8.007812 C 10.230469 7.902344 10.140625 7.796875 10.074219 7.6875 C 9.976562 7.523438 9.910156 7.34375 9.875 7.148438 C 9.839844 6.96875 9.816406 6.644531 9.800781 6.183594 C 9.78125 5.597656 9.761719 5.480469 9.757812 5.457031 C 9.695312 5.402344 9.609375 5.363281 9.214844 5.363281 L 9.015625 5.363281 L 9.015625 4 L 9.414062 4"/>
+ <path fill="white" d="M 9.019531 12.023438 L 9.019531 10.65625 L 9.21875 10.65625 C 9.636719 10.65625 9.726562 10.59375 9.734375 10.589844 C 9.734375 10.589844 9.785156 10.53125 9.789062 10.277344 C 9.804688 9.582031 9.832031 9.148438 9.863281 8.945312 C 9.898438 8.730469 9.96875 8.527344 10.078125 8.339844 C 10.144531 8.21875 10.238281 8.109375 10.351562 8.007812 C 10.230469 7.902344 10.140625 7.796875 10.074219 7.6875 C 9.976562 7.523438 9.910156 7.34375 9.875 7.152344 C 9.839844 6.96875 9.816406 6.644531 9.800781 6.183594 C 9.78125 5.597656 9.761719 5.476562 9.757812 5.457031 C 9.695312 5.402344 9.609375 5.367188 9.214844 5.367188 L 9.015625 5.367188 L 9.015625 4 L 9.414062 4 C 9.847656 4 10.179688 4.050781 10.425781 4.160156 C 10.691406 4.277344 10.886719 4.472656 11.007812 4.738281 C 11.117188 4.988281 11.171875 5.363281 11.171875 5.886719 C 11.171875 6.589844 11.207031 6.816406 11.222656 6.886719 C 11.253906 7.003906 11.308594 7.105469 11.390625 7
.203125 C 11.425781 7.246094 11.527344 7.316406 11.804688 7.328125 L 12 7.335938 L 12 8.695312 L 11.800781 8.695312 C 11.585938 8.699219 11.433594 8.757812 11.332031 8.878906 C 11.273438 8.953125 11.171875 9.175781 11.171875 9.867188 C 11.171875 10.332031 11.15625 10.667969 11.125 10.890625 C 11.089844 11.144531 11 11.363281 10.851562 11.539062 C 10.707031 11.710938 10.519531 11.839844 10.292969 11.914062 C 10.082031 11.988281 9.792969 12.023438 9.417969 12.023438 Z"/>
+</svg>
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceImagesgtkHeapSnapshotObjectGraphsvg"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/UserInterface/Images/gtk/HeapSnapshotObjectGraph.svg (0 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Images/gtk/HeapSnapshotObjectGraph.svg         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Images/gtk/HeapSnapshotObjectGraph.svg        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -0,0 +1,27 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Licensed under the Creative Commons Attribution-Share Alike 3.0 United States License (http://creativecommons.org/licenses/by-sa/3.0/) -->
+<svg xmlns="http://www.w3.org/2000/svg" id="root" version="1.1" viewBox="0 0 16 16">
+ <defs>
+ <radialGradient id="b" cx="301" cy="51.5" r="19.5" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.97063 1.9684e-8 0 .28611 -291.16 -14.63)">
+ <stop stop-color="#fff" offset="0"/>
+ <stop stop-color="#fff" stop-opacity="0" offset="1"/>
+ </radialGradient>
+ <radialGradient id="a" cx="24.446" cy="35.878" r="20.531" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.85696 3.2529e-7 -1.253e-7 .33010 -12.949 .77181)">
+ <stop stop-color="#fff" offset="0"/>
+ <stop stop-color="#fabebe" offset="1"/>
+ </radialGradient>
+ <linearGradient id="c" x1="321.57" x2="311.65" y1="145.52" y2="118.5" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.55569 0 0 .55568 -169.27 -70.906)">
+ <stop stop-color="#a40000" offset="0"/>
+ <stop stop-color="#f9adad" offset="1"/>
+ </linearGradient>
+ <linearGradient id="d" x1="491.22" x2="491.22" y1="506.65" y2="732.05" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.093294 0 0 .093294 -35.871 -43.769)">
+ <stop stop-color="#a40000" offset="0"/>
+ <stop stop-color="#f9adad" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect width="15.004" height="15.003" x=".49815" y=".49833" fill="url(#a)" fill-rule="evenodd" stroke="url(#c)" stroke-miterlimit="10" rx="1.5143" ry="1.5143" stroke-linejoin="bevel"/>
+ <rect width="12.997" height="13" x="1.5014" y="1.5016" fill="none" stroke="#fff" stroke-miterlimit="10" ry=".50810" stroke-linejoin="bevel" rx=".50812"/>
+ <rect width="14" height="14" x="1.0017" y="1.0016" fill="url(#b)" fill-rule="evenodd" rx="1.9062" ry="1.9062"/>
+ <path fill="#fff" d="m6.4497 4.8501c-0.25562 0.01929-0.68218 0.12665-1.0625 0.4375s-0.7029 0.82923-0.78125 1.6562c-0.01595 0.21541-0.04213 0.44238-0.0625 0.625-0.001 0.009 0.0011 0.02233 0 0.03125-0.08624 0.5742-0.34913 0.76554-0.625 0.8125l-0.125 0.03125a0.25002 0.25002 0 0 0 -0.09375 0.03125 0.25002 0.25002 0 0 0 -0.09375 0.09375 0.25002 0.25002 0 0 0 -0.03125 0.125v0.8125a0.25002 0.25002 0 0 0 0.03125 0.09375 0.25002 0.25002 0 0 0 0.03125 0.0625 0.25002 0.25002 0 0 0 0.03125 0.03125 0.25002 0.25002 0 0 0 0.03125 0.03125 0.25002 0.25002 0 0 0 0.09375 0.03125l0.125 0.03125h0.03125c0.08878 0.02005 0.17292 0.03869 0.25 0.09375 0.1907 0.13841 0.2651 0.34781 0.3125 0.59375s0.06321 0.51581 0.09375 0.8125c0.08313 0.81821 0.426 1.3579 0.8125 1.6562 0.37615 0.2904 0.76763 0.35692 1 0.375 0.0064 0.000497 0.02511-0.0004 0.03125 0l0.125 0.03125a0.25002 0.25002 0 0 0 0.0625 0 0.25002 0.25002 0 0 0 0.0625 -0.03125 0.25002 0.25002 0 0 0 0.0625 -0.03125 0.25002 0.25002
0 0 0 0.03125 -0.03125 0.25002 0.25002 0 0 0 0.03125 -0.0625 0.25002 0.25002 0 0 0 0 -0.03125l0.21875-0.84375a0.25002 0.25002 0 0 0 0 -0.03125 0.25002 0.25002 0 0 0 0 -0.0625 0.25002 0.25002 0 0 0 -0.03125 -0.0625 0.25002 0.25002 0 0 0 -0.03125 -0.0625 0.25002 0.25002 0 0 0 -0.03125 -0.03125 0.25002 0.25002 0 0 0 -0.03125 -0.03125 0.25002 0.25002 0 0 0 -0.09375 -0.03125h-0.1875c-0.18184-0.02204-0.34449-0.17298-0.4375-0.3125-0.1576-0.24224-0.16703-0.69416-0.21875-1.2188-0.04542-0.46068-0.24764-0.95497-0.625-1.375 0.37302-0.41951 0.54842-0.91617 0.59375-1.375 0.05042-0.51041 0.09838-0.96692 0.25-1.2188 0.09479-0.14218 0.2606-0.29106 0.4375-0.3125l0.1875-0.03125a0.25002 0.25002 0 0 0 0.0625 0 0.25002 0.25002 0 0 0 0.09375 -0.0625 0.25002 0.25002 0 0 0 0.03125 -0.0625 0.25002 0.25002 0 0 0 0.03125 -0.09375 0.25002 0.25002 0 0 0 0 -0.0625 0.25002 0.25002 0 0 0 0 -0.03125l-0.2187-0.8121a0.25002 0.25002 0 0 0 0 -0.03125 0.25002 0.25002 0 0 0 -0.03125 -0.0625 0.25002 0.25002 0 0 0 -
0.0625 -0.0625 0.25002 0.25002 0 0 0 -0.0625 -0.03125 0.25002 0.25002 0 0 0 -0.0625 0 0.25002 0.25002 0 0 0 -0.03125 0h-0.125zm2.625 0a0.25002 0.25002 0 0 0 -0.0625 0.0625 0.25002 0.25002 0 0 0 -0.03125 0.03125 0.25002 0.25002 0 0 0 -0.03125 0.0625 0.25002 0.25002 0 0 0 -0.03125 0.03125l-0.1875 0.8125a0.25002 0.25002 0 0 0 0 0.0625 0.25002 0.25002 0 0 0 0.03125 0.09375 0.25002 0.25002 0 0 0 0.03125 0.0625 0.25002 0.25002 0 0 0 0.03125 0.03125 0.25002 0.25002 0 0 0 0.03125 0.03125 0.25002 0.25002 0 0 0 0.09375 0.03125l0.1875 0.03125c0.1763 0.02137 0.34004 0.16632 0.4375 0.3125 0.15152 0.25187 0.16834 0.70846 0.21875 1.2188 0.045371 0.45927 0.25111 0.95529 0.625 1.375-0.37736 0.42003-0.57958 0.91432-0.625 1.375-0.05172 0.52459-0.061149 0.97651-0.21875 1.2188-0.095677 0.14352-0.25626 0.29053-0.4375 0.3125h-0.1875a0.25002 0.25002 0 0 0 -0.03125 0.03125 0.25002 0.25002 0 0 0 -0.09375 0.0625 0.25002 0.25002 0 0 0 -0.03125 0.03125 0.25002 0.25002 0 0 0 -0.03125 0.0625 0.25002 0.250
02 0 0 0 -0.03125 0.125l0.1875 0.84375a0.25002 0.25002 0 0 0 0.0625 0.09375 0.25002 0.25002 0 0 0 0.03125 0.03125 0.25002 0.25002 0 0 0 0.03125 0.03125 0.25002 0.25002 0 0 0 0.09375 0.03125 0.25002 0.25002 0 0 0 0.0625 0l0.125-0.03125c0.00614-0.0004 0.02486 0.000497 0.03125 0 0.23237-0.01808 0.62385-0.0846 1-0.375 0.3865-0.29839 0.72937-0.83804 0.8125-1.6562 0.03054-0.29669 0.04635-0.56656 0.09375-0.8125s0.12182-0.45534 0.3125-0.59375c0.07296-0.05211 0.15827-0.07303 0.25-0.09375h0.03125l0.125-0.03125a0.25002 0.25002 0 0 0 0.09375 -0.03125 0.25002 0.25002 0 0 0 0.09375 -0.09375 0.25002 0.25002 0 0 0 0.03125 -0.09375 0.25002 0.25002 0 0 0 0 -0.03125v-0.8125a0.25002 0.25002 0 0 0 -0.03125 -0.09375 0.25002 0.25002 0 0 0 -0.0625 -0.09375 0.25002 0.25002 0 0 0 -0.0625 -0.03125 0.25002 0.25002 0 0 0 -0.0625 -0.03125l-0.125-0.03125c-0.27587-0.04696-0.53876-0.2383-0.625-0.8125-0.0011-0.0092 0.0011-0.02193 0-0.03125-0.02172-0.18821-0.04698-0.41542-0.0625-0.625-0.07836-0.82274-0.40221-
1.3443-0.78125-1.6562-0.37904-0.31194-0.80161-0.41818-1.0625-0.4375h-0.125a0.25002 0.25002 0 0 0 -0.0625 0 0.25002 0.25002 0 0 0 -0.03125 0 0.25002 0.25002 0 0 0 -0.03125 0z" display="block"/>
+ <path fill="url(#d)" d="m6.5623 3.75c-0.25562 0.01929-0.68218 0.12665-1.0625 0.4375s-0.7029 0.82923-0.78125 1.6562c-0.01595 0.21541-0.04213 0.44238-0.0625 0.625-0.001 0.009 0.0011 0.02233 0 0.03125-0.08624 0.5742-0.34913 0.76554-0.625 0.8125l-0.125 0.03125a0.25002 0.25002 0 0 0 -0.09375 0.03125 0.25002 0.25002 0 0 0 -0.09375 0.09375 0.25002 0.25002 0 0 0 -0.03125 0.125v0.8125a0.25002 0.25002 0 0 0 0.03125 0.09375 0.25002 0.25002 0 0 0 0.03125 0.0625 0.25002 0.25002 0 0 0 0.03125 0.03125 0.25002 0.25002 0 0 0 0.03125 0.03125 0.25002 0.25002 0 0 0 0.09375 0.03125l0.125 0.03125h0.03125c0.08878 0.02005 0.17292 0.03869 0.25 0.09375 0.1907 0.13841 0.2651 0.34781 0.3125 0.59375s0.06321 0.51581 0.09375 0.8125c0.08313 0.81821 0.426 1.3579 0.8125 1.6562 0.37615 0.2904 0.76763 0.35692 1 0.375 0.0064 0.000497 0.02511-0.0004 0.03125 0l0.125 0.03125a0.25002 0.25002 0 0 0 0.0625 0 0.25002 0.25002 0 0 0 0.0625 -0.03125 0.25002 0.25002 0 0 0 0.0625 -0.03125 0.25002 0.25002
0 0 0 0.03125 -0.03125 0.25002 0.25002 0 0 0 0.03125 -0.0625 0.25002 0.25002 0 0 0 0 -0.03125l0.21875-0.84375a0.25002 0.25002 0 0 0 0 -0.03125 0.25002 0.25002 0 0 0 0 -0.0625 0.25002 0.25002 0 0 0 -0.03125 -0.0625 0.25002 0.25002 0 0 0 -0.03125 -0.0625 0.25002 0.25002 0 0 0 -0.03125 -0.03125 0.25002 0.25002 0 0 0 -0.03125 -0.03125 0.25002 0.25002 0 0 0 -0.09375 -0.03125h-0.1875c-0.18184-0.02204-0.34449-0.17298-0.4375-0.3125-0.1576-0.24224-0.16703-0.69416-0.21875-1.2188-0.04542-0.46068-0.24764-0.95497-0.625-1.375 0.37302-0.41951 0.54842-0.91617 0.59375-1.375 0.05042-0.51041 0.09838-0.96692 0.25-1.2188 0.09479-0.14218 0.2606-0.29106 0.4375-0.3125l0.1875-0.03125a0.25002 0.25002 0 0 0 0.0625 0 0.25002 0.25002 0 0 0 0.09375 -0.0625 0.25002 0.25002 0 0 0 0.03125 -0.0625 0.25002 0.25002 0 0 0 0.03125 -0.09375 0.25002 0.25002 0 0 0 0 -0.0625 0.25002 0.25002 0 0 0 0 -0.03125l-0.2187-0.8122a0.25002 0.25002 0 0 0 0 -0.03125 0.25002 0.25002 0 0 0 -0.03125 -0.0625 0.25002 0.25002 0 0 0
-0.0625 -0.0625 0.25002 0.25002 0 0 0 -0.0625 -0.03125 0.25002 0.25002 0 0 0 -0.0625 0 0.25002 0.25002 0 0 0 -0.03125 0h-0.125zm2.625 0a0.25002 0.25002 0 0 0 -0.0625 0.0625 0.25002 0.25002 0 0 0 -0.03125 0.03125 0.25002 0.25002 0 0 0 -0.03125 0.0625 0.25002 0.25002 0 0 0 -0.03125 0.03125l-0.1875 0.8125a0.25002 0.25002 0 0 0 0 0.0625 0.25002 0.25002 0 0 0 0.03125 0.09375 0.25002 0.25002 0 0 0 0.03125 0.0625 0.25002 0.25002 0 0 0 0.03125 0.03125 0.25002 0.25002 0 0 0 0.03125 0.03125 0.25002 0.25002 0 0 0 0.09375 0.03125l0.1875 0.03125c0.1763 0.02137 0.34004 0.16632 0.4375 0.3125 0.15152 0.25187 0.16834 0.70846 0.21875 1.2188 0.045371 0.45927 0.25111 0.95529 0.625 1.375-0.37736 0.42003-0.57958 0.91432-0.625 1.375-0.05172 0.52459-0.061149 0.97651-0.21875 1.2187-0.095677 0.14352-0.25626 0.29053-0.4375 0.3125h-0.1875a0.25002 0.25002 0 0 0 -0.03125 0.03125 0.25002 0.25002 0 0 0 -0.09375 0.0625 0.25002 0.25002 0 0 0 -0.03125 0.03125 0.25002 0.25002 0 0 0 -0.03125 0.0625 0.25002 0.25
002 0 0 0 -0.03125 0.125l0.1875 0.84375a0.25002 0.25002 0 0 0 0.0625 0.09375 0.25002 0.25002 0 0 0 0.03125 0.03125 0.25002 0.25002 0 0 0 0.03125 0.03125 0.25002 0.25002 0 0 0 0.09375 0.03125 0.25002 0.25002 0 0 0 0.0625 0l0.125-0.03125c0.00614-0.0004 0.02486 0.000497 0.03125 0 0.23237-0.01808 0.62385-0.0846 1-0.375 0.3865-0.29839 0.72937-0.83804 0.8125-1.6562 0.03054-0.29669 0.04635-0.56656 0.09375-0.8125s0.12182-0.45534 0.3125-0.59375c0.07296-0.05211 0.15827-0.07303 0.25-0.09375h0.03125l0.125-0.03125a0.25002 0.25002 0 0 0 0.09375 -0.03125 0.25002 0.25002 0 0 0 0.09375 -0.09375 0.25002 0.25002 0 0 0 0.03125 -0.09375 0.25002 0.25002 0 0 0 0 -0.03125v-0.8125a0.25002 0.25002 0 0 0 -0.03125 -0.09375 0.25002 0.25002 0 0 0 -0.0625 -0.09375 0.25002 0.25002 0 0 0 -0.0625 -0.03125 0.25002 0.25002 0 0 0 -0.0625 -0.03125l-0.125-0.03125c-0.27587-0.04696-0.53876-0.2383-0.625-0.8125-0.0011-0.0092 0.0011-0.02193 0-0.03125-0.02172-0.18821-0.04698-0.41542-0.0625-0.625-0.07836-0.82274-0.40221
-1.3443-0.78125-1.6562-0.37904-0.31194-0.80161-0.41818-1.0625-0.4375h-0.125a0.25002 0.25002 0 0 0 -0.0625 0 0.25002 0.25002 0 0 0 -0.03125 0 0.25002 0.25002 0 0 0 -0.03125 0z" display="block"/>
+</svg>
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceMainhtml"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Main.html (200473 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Main.html        2016-05-05 20:27:12 UTC (rev 200473)
+++ trunk/Source/WebInspectorUI/UserInterface/Main.html        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -529,10 +529,10 @@
</span><span class="cx"> <script src="Views/HeapAllocationsTimelineView.js"></script>
</span><span class="cx"> <script src="Views/HeapSnapshotClassDataGridNode.js"></script>
</span><span class="cx"> <script src="Views/HeapSnapshotClusterContentView.js"></script>
</span><ins>+ <script src="Views/HeapSnapshotContentView.js"></script>
+ <script src="Views/HeapSnapshotDataGridTree.js"></script>
</ins><span class="cx"> <script src="Views/HeapSnapshotInstanceDataGridNode.js"></script>
</span><span class="cx"> <script src="Views/HeapSnapshotInstanceFetchMoreDataGridNode.js"></script>
</span><del>- <script src="Views/HeapSnapshotInstancesContentView.js"></script>
- <script src="Views/HeapSnapshotInstancesDataGridTree.js"></script>
</del><span class="cx"> <script src="Views/HeapSnapshotSummaryContentView.js"></script>
</span><span class="cx"> <script src="Views/HierarchicalPathNavigationItem.js"></script>
</span><span class="cx"> <script src="Views/HoverMenu.js"></script>
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsHeapAllocationsTimelineViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/HeapAllocationsTimelineView.js (200473 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/HeapAllocationsTimelineView.js        2016-05-05 20:27:12 UTC (rev 200473)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/HeapAllocationsTimelineView.js        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -129,11 +129,11 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>- let shouldManuallyTriggerContentViewUpdate = this._contentViewContainer.currentContentView && this._contentViewContainer.currentContentView.representedObject === heapSnapshotTimelineRecord.heapSnapshot;
</del><ins>+ let shouldTriggerContentViewUpdate = this._contentViewContainer.currentContentView && this._contentViewContainer.currentContentView.representedObject === heapSnapshotTimelineRecord.heapSnapshot;
</ins><span class="cx">
</span><span class="cx"> this._contentViewContainer.showContentViewForRepresentedObject(heapSnapshotTimelineRecord.heapSnapshot);
</span><span class="cx">
</span><del>- if (shouldManuallyTriggerContentViewUpdate)
</del><ins>+ if (shouldTriggerContentViewUpdate)
</ins><span class="cx"> this._currentContentViewDidChange();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotClusterContentViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotClusterContentView.js (200473 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotClusterContentView.js        2016-05-05 20:27:12 UTC (rev 200473)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotClusterContentView.js        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -43,14 +43,21 @@
</span><span class="cx"> this._shownInitialContent = false;
</span><span class="cx"> this._summaryContentView = null;
</span><span class="cx"> this._instancesContentView = null;
</span><ins>+ this._objectGraphContentView = null;
</ins><span class="cx">
</span><span class="cx"> this._summaryPathComponent = createPathComponent.call(this, WebInspector.UIString("Summary"), "heap-snapshot-summary-icon", WebInspector.HeapSnapshotClusterContentView.SummaryIdentifier);
</span><span class="cx"> this._instancesPathComponent = createPathComponent.call(this, WebInspector.UIString("Instances"), "heap-snapshot-instances-icon", WebInspector.HeapSnapshotClusterContentView.InstancesIdentifier);
</span><ins>+ this._objectGraphPathComponent = createPathComponent.call(this, WebInspector.UIString("Object Graph"), "heap-snapshot-object-graph-icon", WebInspector.HeapSnapshotClusterContentView.ObjectGraphIdentifier);
</ins><span class="cx">
</span><span class="cx"> this._summaryPathComponent.nextSibling = this._instancesPathComponent;
</span><span class="cx"> this._instancesPathComponent.previousSibling = this._summaryPathComponent;
</span><span class="cx">
</span><del>- this._currentContentViewSetting = new WebInspector.Setting("heap-snapshot-cluster-current-view", WebInspector.HeapSnapshotClusterContentView.SummaryIdentifier);
</del><ins>+ if (this._supportsObjectGraph()) {
+ this._instancesPathComponent.nextSibling = this._objectGraphPathComponent;
+ this._objectGraphPathComponent.previousSibling = this._instancesPathComponent;
+ }
+
+ this._currentContentViewSetting = new WebInspector.Setting("heap-snapshot-cluster-current-view", WebInspector.HeapSnapshotClusterContentView.InstancesIdentifier);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Static
</span><span class="lines">@@ -118,6 +125,16 @@
</span><span class="cx"> return this._instancesContentView;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ get objectGraphContentView()
+ {
+ if (!this._supportsObjectGraph())
+ return null;
+
+ if (!this._objectGraphContentView)
+ this._objectGraphContentView = new WebInspector.HeapSnapshotObjectGraphContentView(this._heapSnapshot);
+ return this._objectGraphContentView;
+ }
+
</ins><span class="cx"> get selectionPathComponents()
</span><span class="cx"> {
</span><span class="cx"> let currentContentView = this._contentViewContainer.currentContentView;
</span><span class="lines">@@ -167,8 +184,19 @@
</span><span class="cx"> return this._showContentViewForIdentifier(WebInspector.HeapSnapshotClusterContentView.InstancesIdentifier);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ showObjectGraph()
+ {
+ this._shownInitialContent = true;
+ return this._showContentViewForIdentifier(WebInspector.HeapSnapshotClusterContentView.ObjectGraphIdentifier);
+ }
+
</ins><span class="cx"> // Private
</span><span class="cx">
</span><ins>+ _supportsObjectGraph()
+ {
+ return this._heapSnapshot instanceof WebInspector.HeapSnapshotProxy;
+ }
+
</ins><span class="cx"> _pathComponentForContentView(contentView)
</span><span class="cx"> {
</span><span class="cx"> console.assert(contentView);
</span><span class="lines">@@ -178,6 +206,8 @@
</span><span class="cx"> return this._summaryPathComponent;
</span><span class="cx"> if (contentView === this._instancesContentView)
</span><span class="cx"> return this._instancesPathComponent;
</span><ins>+ if (contentView === this._objectGraphContentView)
+ return this._objectGraphPathComponent;
</ins><span class="cx"> console.error("Unknown contentView.");
</span><span class="cx"> return null;
</span><span class="cx"> }
</span><span class="lines">@@ -191,6 +221,8 @@
</span><span class="cx"> return WebInspector.HeapSnapshotClusterContentView.SummaryIdentifier;
</span><span class="cx"> if (contentView === this._instancesContentView)
</span><span class="cx"> return WebInspector.HeapSnapshotClusterContentView.InstancesIdentifier;
</span><ins>+ if (contentView === this._objectGraphContentView)
+ return WebInspector.HeapSnapshotClusterContentView.ObjectGraphIdentifier;
</ins><span class="cx"> console.error("Unknown contentView.");
</span><span class="cx"> return null;
</span><span class="cx"> }
</span><span class="lines">@@ -206,6 +238,9 @@
</span><span class="cx"> case WebInspector.HeapSnapshotClusterContentView.InstancesIdentifier:
</span><span class="cx"> contentViewToShow = this.instancesContentView;
</span><span class="cx"> break;
</span><ins>+ case WebInspector.HeapSnapshotClusterContentView.ObjectGraphIdentifier:
+ contentViewToShow = this.objectGraphContentView;
+ break;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (!contentViewToShow)
</span><span class="lines">@@ -230,3 +265,4 @@
</span><span class="cx">
</span><span class="cx"> WebInspector.HeapSnapshotClusterContentView.SummaryIdentifier = "summary";
</span><span class="cx"> WebInspector.HeapSnapshotClusterContentView.InstancesIdentifier = "instances";
</span><ins>+WebInspector.HeapSnapshotClusterContentView.ObjectGraphIdentifier = "object-graph";
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotContentViewjsfromrev200473trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotInstancesContentViewjs"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotContentView.js (from rev 200473, trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesContentView.js) (0 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotContentView.js         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotContentView.js        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -0,0 +1,151 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.HeapSnapshotContentView = class HeapSnapshotContentView extends WebInspector.ContentView
+{
+ constructor(representedObject, identifier, columns, heapSnapshotDataGridTreeConstructor)
+ {
+ console.assert(representedObject instanceof WebInspector.HeapSnapshotProxy || representedObject instanceof WebInspector.HeapSnapshotDiffProxy);
+
+ super(representedObject);
+
+ this.element.classList.add("heap-snapshot");
+
+ this._dataGrid = new WebInspector.DataGrid(columns);
+ this._dataGrid.sortColumnIdentifierSetting = new WebInspector.Setting(identifier + "-sort", "retainedSize");
+ this._dataGrid.sortOrderSetting = new WebInspector.Setting(identifier + "-sort-order", WebInspector.DataGrid.SortOrder.Descending);
+ this._dataGrid.addEventListener(WebInspector.DataGrid.Event.SortChanged, this._sortDataGrid, this);
+
+ let sortComparator = WebInspector.HeapSnapshotDataGridTree.buildSortComparator(this._dataGrid.sortColumnIdentifier, this._dataGrid.sortOrder);
+ this._heapSnapshotDataGridTree = new heapSnapshotDataGridTreeConstructor(this.representedObject, sortComparator);
+ this._heapSnapshotDataGridTree.addEventListener(WebInspector.HeapSnapshotDataGridTree.Event.DidPopulate, this._heapSnapshotDataGridTreeDidPopulate, this);
+
+ for (let child of this._heapSnapshotDataGridTree.children)
+ this._dataGrid.appendChild(child);
+
+ this.addSubview(this._dataGrid);
+ this._dataGrid.updateLayout();
+ }
+
+ // Protected
+
+ shown()
+ {
+ super.shown();
+
+ this._heapSnapshotDataGridTree.shown();
+ }
+
+ hidden()
+ {
+ super.hidden();
+
+ this._heapSnapshotDataGridTree.hidden();
+ }
+
+ // Private
+
+ _sortDataGrid()
+ {
+ if (!this._heapSnapshotDataGridTree)
+ return;
+
+ this._heapSnapshotDataGridTree.sortComparator = WebInspector.HeapSnapshotDataGridTree.buildSortComparator(this._dataGrid.sortColumnIdentifier, this._dataGrid.sortOrder);
+
+ this._dataGrid.removeChildren();
+ for (let child of this._heapSnapshotDataGridTree.children)
+ this._dataGrid.appendChild(child);
+ }
+
+ _heapSnapshotDataGridTreeDidPopulate()
+ {
+ for (let child of this._heapSnapshotDataGridTree.children)
+ this._dataGrid.appendChild(child);
+ }
+};
+
+WebInspector.HeapSnapshotInstancesContentView = class HeapSnapshotInstancesContentView extends WebInspector.HeapSnapshotContentView
+{
+ constructor(representedObject)
+ {
+ let columns = {
+ retainedSize: {
+ title: WebInspector.UIString("Retained Size"),
+ tooltip: WebInspector.UIString("Size of the current object plus the size of all objects it keeps alive."),
+ width: "140px",
+ aligned: "right",
+ sortable: true,
+ },
+ size: {
+ title: WebInspector.UIString("Self Size"),
+ width: "90px",
+ aligned: "right",
+ sortable: true,
+ },
+ count: {
+ title: WebInspector.UIString("Count"),
+ width: "75px",
+ aligned: "right",
+ sortable: true,
+ },
+ className: {
+ title: WebInspector.UIString("Class Name"),
+ sortable: true,
+ disclosure: true,
+ }
+ };
+
+ super(representedObject, "heap-snapshot-instances-content-view", columns, WebInspector.HeapSnapshotInstancesDataGridTree);
+ }
+};
+
+WebInspector.HeapSnapshotObjectGraphContentView = class HeapSnapshotObjectGraphContentView extends WebInspector.HeapSnapshotContentView
+{
+ constructor(representedObject)
+ {
+ let columns = {
+ retainedSize: {
+ title: WebInspector.UIString("Retained Size"),
+ tooltip: WebInspector.UIString("Size of the current object plus the size of all objects it keeps alive."),
+ width: "140px",
+ aligned: "right",
+ sortable: true,
+ },
+ size: {
+ title: WebInspector.UIString("Self Size"),
+ width: "90px",
+ aligned: "right",
+ sortable: true,
+ },
+ className: {
+ title: WebInspector.UIString("Class Name"),
+ sortable: true,
+ disclosure: true,
+ }
+ };
+
+ super(representedObject, "heap-snapshot-object-graph-content-view", columns, WebInspector.HeapSnapshotObjectGraphDataGridTree);
+ }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotDataGridTreejsfromrev200473trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotInstancesDataGridTreejs"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotDataGridTree.js (from rev 200473, trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesDataGridTree.js) (0 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotDataGridTree.js         (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotDataGridTree.js        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -0,0 +1,221 @@
</span><ins>+/*
+* Copyright (C) 2016 Apple Inc. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* 2. Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+* THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+WebInspector.HeapSnapshotDataGridTree = class HeapSnapshotDataGridTree extends WebInspector.Object
+{
+ constructor(heapSnapshot, sortComparator)
+ {
+ super();
+
+ console.assert(heapSnapshot instanceof WebInspector.HeapSnapshotProxy || heapSnapshot instanceof WebInspector.HeapSnapshotDiffProxy);
+
+ this._heapSnapshot = heapSnapshot;
+
+ this._children = [];
+ this._sortComparator = sortComparator;
+
+ this._visible = false;
+ this._popover = null;
+ this._popoverNode = null;
+
+ this.populateTopLevel();
+ }
+
+ // Static
+
+ static buildSortComparator(columnIdentifier, sortOrder)
+ {
+ let multiplier = sortOrder === WebInspector.DataGrid.SortOrder.Ascending ? 1 : -1;
+ let numberCompare = (columnIdentifier, a, b) => multiplier * (a.data[columnIdentifier] - b.data[columnIdentifier]);
+ let localeCompare = (columnIdentifier, a, b) => multiplier * (a.data[columnIdentifier].localeCompare(b.data[columnIdentifier]));
+
+ let comparator;
+ switch (columnIdentifier) {
+ case "retainedSize":
+ return numberCompare.bind(this, "retainedSize");
+ case "size":
+ return numberCompare.bind(this, "size");
+ case "count":
+ return numberCompare.bind(this, "count");
+ case "className":
+ return localeCompare.bind(this, "className");
+ }
+ }
+
+ // Public
+
+ get heapSnapshot() { return this._heapSnapshot; }
+
+ get visible()
+ {
+ return this._visible;
+ }
+
+ get popover()
+ {
+ if (!this._popover)
+ this._popover = new WebInspector.Popover(this);
+
+ return this._popover;
+ }
+
+ get popoverNode()
+ {
+ return this._popoverNode;
+ }
+
+ set popoverNode(x)
+ {
+ this._popoverNode = x;
+ }
+
+ get children()
+ {
+ return this._children;
+ }
+
+ appendChild(node)
+ {
+ this._children.push(node);
+ }
+
+ insertChild(node, index)
+ {
+ this._children.splice(index, 0, node);
+ }
+
+ removeChildren()
+ {
+ this._children = [];
+ }
+
+ set sortComparator(comparator)
+ {
+ this._sortComparator = comparator;
+ this.sort();
+ }
+
+ sort()
+ {
+ let children = this._children;
+ children.sort(this._sortComparator);
+
+ for (let i = 0; i < children.length; ++i) {
+ children[i]._recalculateSiblings(i);
+ children[i].sort();
+ }
+ }
+
+ shown()
+ {
+ this._visible = true;
+ }
+
+ hidden()
+ {
+ this._visible = false;
+
+ if (this._popover && this._popover.visible)
+ this._popover.dismiss();
+ }
+
+ // Popover delegate
+
+ willDismissPopover(popover)
+ {
+ this._popoverNode = null;
+ }
+
+ // Protected
+
+ get alwaysShowRetainedSize()
+ {
+ return false;
+ }
+
+ populateTopLevel()
+ {
+ // Implemented by subclasses.
+ }
+
+ didPopulate()
+ {
+ this.sort();
+
+ this.dispatchEventToListeners(WebInspector.HeapSnapshotDataGridTree.Event.DidPopulate);
+ }
+};
+
+WebInspector.HeapSnapshotDataGridTree.Event = {
+ DidPopulate: "heap-snapshot-data-grid-tree-did-populate",
+};
+
+WebInspector.HeapSnapshotInstancesDataGridTree = class HeapSnapshotInstancesDataGridTree extends WebInspector.HeapSnapshotDataGridTree
+{
+ get alwaysShowRetainedSize()
+ {
+ return false;
+ }
+
+ populateTopLevel()
+ {
+ // Populate the first level with the different non-internal classes.
+ for (let [className, {size, retainedSize, count, internalCount}] of this.heapSnapshot.categories) {
+ if (count === internalCount)
+ continue;
+ this.appendChild(new WebInspector.HeapSnapshotClassDataGridNode({className, size, retainedSize, count}, this));
+ }
+
+ this.didPopulate()
+ }
+};
+
+WebInspector.HeapSnapshotObjectGraphDataGridTree = class HeapSnapshotInstancesDataGridTree extends WebInspector.HeapSnapshotDataGridTree
+{
+ get alwaysShowRetainedSize()
+ {
+ return true;
+ }
+
+ populateTopLevel()
+ {
+ this.heapSnapshot.instancesWithClassName("GlobalObject", (instances) => {
+ for (let instance of instances)
+ this.appendChild(new WebInspector.HeapSnapshotInstanceDataGridNode(instance, this));
+ });
+
+ this.heapSnapshot.instancesWithClassName("Window", (instances) => {
+ for (let instance of instances) {
+ // FIXME: Why is the window.Window Function classified as a Window?
+ // In any case, ignore objects not dominated by the root, as they
+ // are probably not what we want.
+ if (instance.dominatorNodeIdentifier === 0)
+ this.appendChild(new WebInspector.HeapSnapshotInstanceDataGridNode(instance, this));
+ }
+
+ this.didPopulate();
+ });
+ }
+};
</ins></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotInstanceDataGridNodejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstanceDataGridNode.js (200473 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstanceDataGridNode.js        2016-05-05 20:27:12 UTC (rev 200473)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstanceDataGridNode.js        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -82,7 +82,7 @@
</span><span class="cx"> if (node.className === "string") {
</span><span class="cx"> HeapAgent.getPreview(heapObjectIdentifier, function(error, string, functionDetails, objectPreviewPayload) {
</span><span class="cx"> let remoteObject = error ? WebInspector.RemoteObject.fromPrimitiveValue(undefined) : WebInspector.RemoteObject.fromPrimitiveValue(string);
</span><del>- WebInspector.consoleLogViewController.appendImmediateExecutionWithResult(text, remoteObject, synthetic);
</del><ins>+ WebInspector.consoleLogViewController.appendImmediateExecutionWithResult(text, remoteObject, synthetic);
</ins><span class="cx"> });
</span><span class="cx"> } else {
</span><span class="cx"> HeapAgent.getRemoteObject(heapObjectIdentifier, WebInspector.RuntimeManager.ConsoleObjectGroup, function(error, remoteObjectPayload) {
</span><span class="lines">@@ -109,8 +109,8 @@
</span><span class="cx"> createCellContent(columnIdentifier)
</span><span class="cx"> {
</span><span class="cx"> if (columnIdentifier === "retainedSize") {
</span><del>- let subRetainedSize = false;
- if (this._base) {
</del><ins>+ let subRetainedSize = false;
+ if (this._base && !this._tree.alwaysShowRetainedSize) {
</ins><span class="cx"> if (this._isDominatedByNonBaseParent())
</span><span class="cx"> subRetainedSize = true;
</span><span class="cx"> else if (!this._isDominatedByBase())
</span><span class="lines">@@ -164,48 +164,12 @@
</span><span class="cx"> let spacerElement = containerElement.appendChild(document.createElement("span"));
</span><span class="cx"> spacerElement.textContent = " ";
</span><span class="cx">
</span><del>- HeapAgent.getPreview(id, (error, string, functionDetails, objectPreviewPayload) => {
- if (error) {
- let previewErrorElement = containerElement.appendChild(document.createElement("span"));
- previewErrorElement.classList.add("preview-error");
- previewErrorElement.textContent = internal ? WebInspector.UIString("Internal object") : WebInspector.UIString("No preview available");
- return;
- }
</del><ins>+ if (className === "Window" && this._node.dominatorNodeIdentifier === 0) {
+ containerElement.append("Window ");
+ this._populateWindowPreview(containerElement);
+ } else
+ this._populatePreview(containerElement);
</ins><span class="cx">
</span><del>- if (string) {
- let primitiveRemoteObject = WebInspector.RemoteObject.fromPrimitiveValue(string);
- containerElement.appendChild(WebInspector.FormattedValue.createElementForRemoteObject(primitiveRemoteObject));
- return;
- }
-
- if (functionDetails) {
- let {location, name, displayName} = functionDetails;
- let functionNameElement = containerElement.appendChild(document.createElement("span"));
- functionNameElement.classList.add("function-name");
- functionNameElement.textContent = name || displayName || WebInspector.UIString("(anonymous function)");
- let sourceCode = WebInspector.debuggerManager.scriptForIdentifier(location.scriptId);
- if (sourceCode) {
- let locationElement = containerElement.appendChild(document.createElement("span"));
- locationElement.classList.add("location");
- let sourceCodeLocation = sourceCode.createSourceCodeLocation(location.lineNumber, location.columnNumber);
- sourceCodeLocation.populateLiveDisplayLocationString(locationElement, "textContent", WebInspector.SourceCodeLocation.ColumnStyle.Hidden, WebInspector.SourceCodeLocation.NameStyle.Short);
-
- const dontFloat = true;
- const useGoToArrowButton = true;
- let goToArrowButtonLink = WebInspector.createSourceCodeLocationLink(sourceCodeLocation, dontFloat, useGoToArrowButton);
- containerElement.appendChild(goToArrowButtonLink);
- }
- return;
- }
-
- if (objectPreviewPayload) {
- let objectPreview = WebInspector.ObjectPreview.fromPayload(objectPreviewPayload);
- let previewElement = WebInspector.FormattedValue.createObjectPreviewOrFormattedValueForObjectPreview(objectPreview);
- containerElement.appendChild(previewElement);
- return;
- }
- });
-
</del><span class="cx"> return containerElement;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -261,7 +225,7 @@
</span><span class="cx">
</span><span class="cx"> for (let instance of instances)
</span><span class="cx"> this.appendChild(new WebInspector.HeapSnapshotInstanceDataGridNode(instance, this._tree, instance.__edge, this._base || this));
</span><del>- });
</del><ins>+ });
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> _contextMenuHandler(event)
</span><span class="lines">@@ -271,6 +235,85 @@
</span><span class="cx"> contextMenu.appendItem(WebInspector.UIString("Log Value"), WebInspector.HeapSnapshotInstanceDataGridNode.logHeapSnapshotNode.bind(null, this._node));
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ _populateError(containerElement)
+ {
+ if (this._node.internal)
+ return;
+
+ let previewErrorElement = containerElement.appendChild(document.createElement("span"));
+ previewErrorElement.classList.add("preview-error");
+ previewErrorElement.textContent = WebInspector.UIString("No preview available");
+ }
+
+ _populateWindowPreview(containerElement)
+ {
+ HeapAgent.getRemoteObject(this._node.id, (error, remoteObjectPayload) => {
+ if (error) {
+ this._populateError(containerElement)
+ return;
+ }
+
+ function inspectedPage_window_getLocationHref() {
+ return this.location.href;
+ }
+
+ let remoteObject = WebInspector.RemoteObject.fromPayload(remoteObjectPayload);
+ remoteObject.callFunctionJSON(inspectedPage_window_getLocationHref, undefined, (href) => {
+ remoteObject.release();
+
+ if (!href)
+ this._populateError(containerElement);
+ else {
+ let primitiveRemoteObject = WebInspector.RemoteObject.fromPrimitiveValue(href);
+ containerElement.appendChild(WebInspector.FormattedValue.createElementForRemoteObject(primitiveRemoteObject));
+ }
+ });
+ });
+ }
+
+ _populatePreview(containerElement)
+ {
+ HeapAgent.getPreview(this._node.id, (error, string, functionDetails, objectPreviewPayload) => {
+ if (error) {
+ this._populateError(containerElement);
+ return;
+ }
+
+ if (string) {
+ let primitiveRemoteObject = WebInspector.RemoteObject.fromPrimitiveValue(string);
+ containerElement.appendChild(WebInspector.FormattedValue.createElementForRemoteObject(primitiveRemoteObject));
+ return;
+ }
+
+ if (functionDetails) {
+ let {location, name, displayName} = functionDetails;
+ let functionNameElement = containerElement.appendChild(document.createElement("span"));
+ functionNameElement.classList.add("function-name");
+ functionNameElement.textContent = name || displayName || WebInspector.UIString("(anonymous function)");
+ let sourceCode = WebInspector.debuggerManager.scriptForIdentifier(location.scriptId);
+ if (sourceCode) {
+ let locationElement = containerElement.appendChild(document.createElement("span"));
+ locationElement.classList.add("location");
+ let sourceCodeLocation = sourceCode.createSourceCodeLocation(location.lineNumber, location.columnNumber);
+ sourceCodeLocation.populateLiveDisplayLocationString(locationElement, "textContent", WebInspector.SourceCodeLocation.ColumnStyle.Hidden, WebInspector.SourceCodeLocation.NameStyle.Short);
+
+ const dontFloat = true;
+ const useGoToArrowButton = true;
+ let goToArrowButtonLink = WebInspector.createSourceCodeLocationLink(sourceCodeLocation, dontFloat, useGoToArrowButton);
+ containerElement.appendChild(goToArrowButtonLink);
+ }
+ return;
+ }
+
+ if (objectPreviewPayload) {
+ let objectPreview = WebInspector.ObjectPreview.fromPayload(objectPreviewPayload);
+ let previewElement = WebInspector.FormattedValue.createObjectPreviewOrFormattedValueForObjectPreview(objectPreview);
+ containerElement.appendChild(previewElement);
+ return;
+ }
+ });
+ }
+
</ins><span class="cx"> _mouseoverHandler(event)
</span><span class="cx"> {
</span><span class="cx"> let targetFrame = WebInspector.Rect.rectFromClientRect(event.target.getBoundingClientRect());
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotInstancesContentViewcss"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesContentView.css (200473 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesContentView.css        2016-05-05 20:27:12 UTC (rev 200473)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesContentView.css        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -49,10 +49,6 @@
</span><span class="cx"> text-decoration: underline;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-.heap-snapshot > .data-grid tr:not(.selected) td .preview-error {
- color: red;
-}
-
</del><span class="cx"> .heap-snapshot > .data-grid td .location {
</span><span class="cx"> margin-left: 1ex;
</span><span class="cx"> color: hsl(0, 0%, 60%);
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotInstancesContentViewjs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesContentView.js (200473 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesContentView.js        2016-05-05 20:27:12 UTC (rev 200473)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesContentView.js        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -1,107 +0,0 @@
</span><del>-/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-WebInspector.HeapSnapshotInstancesContentView = class HeapSnapshotInstancesContentView extends WebInspector.ContentView
-{
- constructor(representedObject)
- {
- console.assert(representedObject instanceof WebInspector.HeapSnapshotProxy || representedObject instanceof WebInspector.HeapSnapshotDiffProxy);
-
- super(representedObject);
-
- this.element.classList.add("heap-snapshot");
-
- let columns = {
- retainedSize: {
- title: WebInspector.UIString("Retained Size"),
- tooltip: WebInspector.UIString("Size of the current object plus the size of all objects it keeps alive."),
- width: "140px",
- aligned: "right",
- sortable: true,
- },
- size: {
- title: WebInspector.UIString("Self Size"),
- width: "90px",
- aligned: "right",
- sortable: true,
- },
- count: {
- title: WebInspector.UIString("Count"),
- width: "75px",
- aligned: "right",
- sortable: true,
- },
- className: {
- title: WebInspector.UIString("Class Name"),
- sortable: true,
- disclosure: true,
- }
- };
-
- this._dataGrid = new WebInspector.DataGrid(columns);
- this._dataGrid.sortColumnIdentifierSetting = new WebInspector.Setting("heap-snapshot-content-view-sort", "retainedSize");
- this._dataGrid.sortOrderSetting = new WebInspector.Setting("heap-snapshot-content-view-sort-order", WebInspector.DataGrid.SortOrder.Descending);
- this._dataGrid.addEventListener(WebInspector.DataGrid.Event.SortChanged, this._sortDataGrid, this);
-
- let sortComparator = WebInspector.HeapSnapshotInstancesDataGridTree.buildSortComparator(this._dataGrid.sortColumnIdentifier, this._dataGrid.sortOrder);
- this._heapSnapshotDataGridTree = new WebInspector.HeapSnapshotInstancesDataGridTree(this.representedObject, sortComparator);
-
- for (let child of this._heapSnapshotDataGridTree.children)
- this._dataGrid.appendChild(child);
-
- this.addSubview(this._dataGrid);
- this._dataGrid.updateLayout();
- }
-
- // Protected
-
- shown()
- {
- super.shown();
-
- this._heapSnapshotDataGridTree.shown();
- }
-
- hidden()
- {
- super.hidden();
-
- this._heapSnapshotDataGridTree.hidden();
- }
-
- // Private
-
- _sortDataGrid()
- {
- if (!this._heapSnapshotDataGridTree)
- return;
-
- this._heapSnapshotDataGridTree.sortComparator = WebInspector.HeapSnapshotInstancesDataGridTree.buildSortComparator(this._dataGrid.sortColumnIdentifier, this._dataGrid.sortOrder);
-
- this._dataGrid.removeChildren();
- for (let child of this._heapSnapshotDataGridTree.children)
- this._dataGrid.appendChild(child);
- }
-};
</del></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsHeapSnapshotInstancesDataGridTreejs"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesDataGridTree.js (200473 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesDataGridTree.js        2016-05-05 20:27:12 UTC (rev 200473)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/HeapSnapshotInstancesDataGridTree.js        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -1,165 +0,0 @@
</span><del>-/*
-* Copyright (C) 2016 Apple Inc. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-* 1. Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* 2. Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
-* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-* THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-WebInspector.HeapSnapshotInstancesDataGridTree = class HeapSnapshotInstancesDataGridTree extends WebInspector.Object
-{
- constructor(heapSnapshot, sortComparator)
- {
- super();
-
- console.assert(heapSnapshot instanceof WebInspector.HeapSnapshotProxy || heapSnapshot instanceof WebInspector.HeapSnapshotDiffProxy);
-
- this._heapSnapshot = heapSnapshot;
-
- this._children = [];
- this._sortComparator = sortComparator;
-
- this._visible = false;
- this._popover = null;
- this._popoverNode = null;
-
- this._populateTopLevel();
- this.sort();
- }
-
- // Static
-
- static buildSortComparator(columnIdentifier, sortOrder)
- {
- let multiplier = sortOrder === WebInspector.DataGrid.SortOrder.Ascending ? 1 : -1;
- let numberCompare = (columnIdentifier, a, b) => multiplier * (a.data[columnIdentifier] - b.data[columnIdentifier]);
- let localeCompare = (columnIdentifier, a, b) => multiplier * (a.data[columnIdentifier].localeCompare(b.data[columnIdentifier]));
-
- let comparator;
- switch (columnIdentifier) {
- case "retainedSize":
- return numberCompare.bind(this, "retainedSize");
- case "size":
- return numberCompare.bind(this, "size");
- case "count":
- return numberCompare.bind(this, "count");
- case "className":
- return localeCompare.bind(this, "className");
- }
- }
-
- // Public
-
- get heapSnapshot() { return this._heapSnapshot; }
-
- get visible()
- {
- return this._visible;
- }
-
- get popover()
- {
- if (!this._popover)
- this._popover = new WebInspector.Popover(this);
-
- return this._popover;
- }
-
- get popoverNode()
- {
- return this._popoverNode;
- }
-
- set popoverNode(x)
- {
- this._popoverNode = x;
- }
-
- get children()
- {
- return this._children;
- }
-
- appendChild(node)
- {
- this._children.push(node);
- }
-
- insertChild(node, index)
- {
- this._children.splice(index, 0, node);
- }
-
- removeChildren()
- {
- this._children = [];
- }
-
- set sortComparator(comparator)
- {
- this._sortComparator = comparator;
- this.sort();
- }
-
- sort()
- {
- let children = this._children;
- children.sort(this._sortComparator);
-
- for (let i = 0; i < children.length; ++i) {
- children[i]._recalculateSiblings(i);
- children[i].sort();
- }
- }
-
- shown()
- {
- this._visible = true;
- }
-
- hidden()
- {
- this._visible = false;
-
- if (this._popover && this._popover.visible)
- this._popover.dismiss();
- }
-
- // Popover delegate
-
- willDismissPopover(popover)
- {
- this._popoverNode = null;
- }
-
- // Private
-
- _populateTopLevel()
- {
- this.removeChildren();
-
- // Populate the first level with the different non-internal classes.
- for (let [className, {size, retainedSize, count, internalCount}] of this._heapSnapshot.categories) {
- if (count === internalCount)
- continue;
- this.appendChild(new WebInspector.HeapSnapshotClassDataGridNode({className, size, retainedSize, count}, this));
- }
- }
-};
</del></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsPathComponentIconscss"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/PathComponentIcons.css (200473 => 200474)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/PathComponentIcons.css        2016-05-05 20:27:12 UTC (rev 200473)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/PathComponentIcons.css        2016-05-05 20:34:17 UTC (rev 200474)
</span><span class="lines">@@ -39,6 +39,10 @@
</span><span class="cx"> content: url(../Images/HeapSnapshotInstances.svg);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+.heap-snapshot-object-graph-icon .icon {
+ content: url(../Images/HeapSnapshotObjectGraph.svg);
+}
+
</ins><span class="cx"> .dom-element-icon .icon {
</span><span class="cx"> content: url(../Images/DOMElement.svg);
</span><span class="cx"> }
</span></span></pre>
</div>
</div>
</body>
</html>