<!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
&lt;rdar://problem/26107304&gt;

Patch by Joseph Pecoraro &lt;pecoraro@apple.com&gt; 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 &quot;Object Graph&quot; 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 &quot;Object Graph&quot; 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 &quot;Internal object&quot; 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 &gt; .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_&lt;thisObject&gt;_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  &lt;pecoraro@apple.com&gt;
+
+        Web Inspector: HeapSnapshot should exploratory Object Graph view
+        https://bugs.webkit.org/show_bug.cgi?id=157371
+        &lt;rdar://problem/26107304&gt;
+
+        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 &quot;Object Graph&quot; 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 &quot;Object Graph&quot; 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 &quot;Internal object&quot; 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 &gt; .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_&lt;thisObject&gt;_functionName.
+
</ins><span class="cx"> 2016-05-05  Nikita Vasilyev  &lt;nvasilyev@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: Console is unresponsive for &gt;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[&quot;Input: &quot;] = &quot;Input: &quot;;
</span><span class="cx"> localizedStrings[&quot;Inset&quot;] = &quot;Inset&quot;;
</span><span class="cx"> localizedStrings[&quot;Instances&quot;] = &quot;Instances&quot;;
</span><del>-localizedStrings[&quot;Internal object&quot;] = &quot;Internal object&quot;;
</del><span class="cx"> localizedStrings[&quot;Invalid&quot;] = &quot;Invalid&quot;;
</span><span class="cx"> localizedStrings[&quot;Invoke getter&quot;] = &quot;Invoke getter&quot;;
</span><span class="cx"> localizedStrings[&quot;Iterations&quot;] = &quot;Iterations&quot;;
</span><span class="lines">@@ -509,6 +508,7 @@
</span><span class="cx"> localizedStrings[&quot;Not found&quot;] = &quot;Not found&quot;;
</span><span class="cx"> localizedStrings[&quot;Number&quot;] = &quot;Number&quot;;
</span><span class="cx"> localizedStrings[&quot;Numeric&quot;] = &quot;Numeric&quot;;
</span><ins>+localizedStrings[&quot;Object Graph&quot;] = &quot;Object Graph&quot;;
</ins><span class="cx"> localizedStrings[&quot;Offset&quot;] = &quot;Offset&quot;;
</span><span class="cx"> localizedStrings[&quot;Online&quot;] = &quot;Online&quot;;
</span><span class="cx"> localizedStrings[&quot;Opacity&quot;] = &quot;Opacity&quot;;
</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 === &quot;string&quot;)
</span><span class="lines">@@ -182,9 +182,9 @@
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             if (result.subtype === &quot;array&quot;)
</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 === &quot;object&quot; || result.type === &quot;function&quot;)
</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 === &quot;string&quot; || result.type === &quot;number&quot; || result.type === &quot;boolean&quot; || result.type === &quot;symbol&quot;)
</span><span class="cx">                 WebInspector.runtimeManager.evaluateInInspectedWindow(&quot;(&quot; + getCompletions + &quot;)(\&quot;&quot; + result.type + &quot;\&quot;)&quot;, &quot;completion&quot;, 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>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;!-- Copyright © 2013 Apple Inc. All rights reserved. --&gt;
+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; id=&quot;root&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot;&gt;
+    &lt;path fill=&quot;rgb(236, 151, 153)&quot; d=&quot;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&quot;/&gt;
+    &lt;path fill=&quot;rgb(191, 109, 113)&quot; d=&quot;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&quot;/&gt;
+    &lt;path fill=&quot;white&quot; d=&quot;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&quot;/&gt;
+    &lt;path fill=&quot;rgb(204, 116, 121)&quot; d=&quot;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&quot;/&gt;
+    &lt;path fill=&quot;rgb(204, 116, 121)&quot; d=&quot;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&quot;/&gt;
+    &lt;path fill=&quot;white&quot; d=&quot;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&quot;/&gt;
+&lt;/svg&gt;
</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>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;!-- Licensed under the Creative Commons Attribution-Share Alike 3.0 United States License (http://creativecommons.org/licenses/by-sa/3.0/) --&gt;
+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; id=&quot;root&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot;&gt;
+ &lt;defs&gt;
+  &lt;radialGradient id=&quot;b&quot; cx=&quot;301&quot; cy=&quot;51.5&quot; r=&quot;19.5&quot; gradientUnits=&quot;userSpaceOnUse&quot; gradientTransform=&quot;matrix(.97063 1.9684e-8 0 .28611 -291.16 -14.63)&quot;&gt;
+   &lt;stop stop-color=&quot;#fff&quot; offset=&quot;0&quot;/&gt;
+   &lt;stop stop-color=&quot;#fff&quot; stop-opacity=&quot;0&quot; offset=&quot;1&quot;/&gt;
+  &lt;/radialGradient&gt;
+  &lt;radialGradient id=&quot;a&quot; cx=&quot;24.446&quot; cy=&quot;35.878&quot; r=&quot;20.531&quot; gradientUnits=&quot;userSpaceOnUse&quot; gradientTransform=&quot;matrix(.85696 3.2529e-7 -1.253e-7 .33010 -12.949 .77181)&quot;&gt;
+   &lt;stop stop-color=&quot;#fff&quot; offset=&quot;0&quot;/&gt;
+   &lt;stop stop-color=&quot;#fabebe&quot; offset=&quot;1&quot;/&gt;
+  &lt;/radialGradient&gt;
+  &lt;linearGradient id=&quot;c&quot; x1=&quot;321.57&quot; x2=&quot;311.65&quot; y1=&quot;145.52&quot; y2=&quot;118.5&quot; gradientUnits=&quot;userSpaceOnUse&quot; gradientTransform=&quot;matrix(.55569 0 0 .55568 -169.27 -70.906)&quot;&gt;
+   &lt;stop stop-color=&quot;#a40000&quot; offset=&quot;0&quot;/&gt;
+   &lt;stop stop-color=&quot;#f9adad&quot; offset=&quot;1&quot;/&gt;
+  &lt;/linearGradient&gt;
+  &lt;linearGradient id=&quot;d&quot; x1=&quot;491.22&quot; x2=&quot;491.22&quot; y1=&quot;506.65&quot; y2=&quot;732.05&quot; gradientUnits=&quot;userSpaceOnUse&quot; gradientTransform=&quot;matrix(.093294 0 0 .093294 -35.871 -43.769)&quot;&gt;
+   &lt;stop stop-color=&quot;#a40000&quot; offset=&quot;0&quot;/&gt;
+   &lt;stop stop-color=&quot;#f9adad&quot; offset=&quot;1&quot;/&gt;
+  &lt;/linearGradient&gt;
+ &lt;/defs&gt;
+ &lt;rect width=&quot;15.004&quot; height=&quot;15.003&quot; x=&quot;.49815&quot; y=&quot;.49833&quot; fill=&quot;url(#a)&quot; fill-rule=&quot;evenodd&quot; stroke=&quot;url(#c)&quot; stroke-miterlimit=&quot;10&quot; rx=&quot;1.5143&quot; ry=&quot;1.5143&quot; stroke-linejoin=&quot;bevel&quot;/&gt;
+ &lt;rect width=&quot;12.997&quot; height=&quot;13&quot; x=&quot;1.5014&quot; y=&quot;1.5016&quot; fill=&quot;none&quot; stroke=&quot;#fff&quot; stroke-miterlimit=&quot;10&quot; ry=&quot;.50810&quot; stroke-linejoin=&quot;bevel&quot; rx=&quot;.50812&quot;/&gt;
+ &lt;rect width=&quot;14&quot; height=&quot;14&quot; x=&quot;1.0017&quot; y=&quot;1.0016&quot; fill=&quot;url(#b)&quot; fill-rule=&quot;evenodd&quot; rx=&quot;1.9062&quot; ry=&quot;1.9062&quot;/&gt;
+ &lt;path fill=&quot;#fff&quot; d=&quot;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&quot; display=&quot;block&quot;/&gt;
+ &lt;path fill=&quot;url(#d)&quot; d=&quot;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&quot; display=&quot;block&quot;/&gt;
+&lt;/svg&gt;
</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">     &lt;script src=&quot;Views/HeapAllocationsTimelineView.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/HeapSnapshotClassDataGridNode.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/HeapSnapshotClusterContentView.js&quot;&gt;&lt;/script&gt;
</span><ins>+    &lt;script src=&quot;Views/HeapSnapshotContentView.js&quot;&gt;&lt;/script&gt;
+    &lt;script src=&quot;Views/HeapSnapshotDataGridTree.js&quot;&gt;&lt;/script&gt;
</ins><span class="cx">     &lt;script src=&quot;Views/HeapSnapshotInstanceDataGridNode.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/HeapSnapshotInstanceFetchMoreDataGridNode.js&quot;&gt;&lt;/script&gt;
</span><del>-    &lt;script src=&quot;Views/HeapSnapshotInstancesContentView.js&quot;&gt;&lt;/script&gt;
-    &lt;script src=&quot;Views/HeapSnapshotInstancesDataGridTree.js&quot;&gt;&lt;/script&gt;
</del><span class="cx">     &lt;script src=&quot;Views/HeapSnapshotSummaryContentView.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/HierarchicalPathNavigationItem.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;script src=&quot;Views/HoverMenu.js&quot;&gt;&lt;/script&gt;
</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 &amp;&amp; this._contentViewContainer.currentContentView.representedObject === heapSnapshotTimelineRecord.heapSnapshot;
</del><ins>+        let shouldTriggerContentViewUpdate = this._contentViewContainer.currentContentView &amp;&amp; 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(&quot;Summary&quot;), &quot;heap-snapshot-summary-icon&quot;, WebInspector.HeapSnapshotClusterContentView.SummaryIdentifier);
</span><span class="cx">         this._instancesPathComponent = createPathComponent.call(this, WebInspector.UIString(&quot;Instances&quot;), &quot;heap-snapshot-instances-icon&quot;, WebInspector.HeapSnapshotClusterContentView.InstancesIdentifier);
</span><ins>+        this._objectGraphPathComponent = createPathComponent.call(this, WebInspector.UIString(&quot;Object Graph&quot;), &quot;heap-snapshot-object-graph-icon&quot;, 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(&quot;heap-snapshot-cluster-current-view&quot;, WebInspector.HeapSnapshotClusterContentView.SummaryIdentifier);
</del><ins>+        if (this._supportsObjectGraph()) {
+            this._instancesPathComponent.nextSibling = this._objectGraphPathComponent;
+            this._objectGraphPathComponent.previousSibling = this._instancesPathComponent;
+        }
+
+        this._currentContentViewSetting = new WebInspector.Setting(&quot;heap-snapshot-cluster-current-view&quot;, 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(&quot;Unknown contentView.&quot;);
</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(&quot;Unknown contentView.&quot;);
</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 = &quot;summary&quot;;
</span><span class="cx"> WebInspector.HeapSnapshotClusterContentView.InstancesIdentifier = &quot;instances&quot;;
</span><ins>+WebInspector.HeapSnapshotClusterContentView.ObjectGraphIdentifier = &quot;object-graph&quot;;
</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(&quot;heap-snapshot&quot;);
+
+        this._dataGrid = new WebInspector.DataGrid(columns);
+        this._dataGrid.sortColumnIdentifierSetting = new WebInspector.Setting(identifier + &quot;-sort&quot;, &quot;retainedSize&quot;);
+        this._dataGrid.sortOrderSetting = new WebInspector.Setting(identifier + &quot;-sort-order&quot;, 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(&quot;Retained Size&quot;),
+                tooltip: WebInspector.UIString(&quot;Size of the current object plus the size of all objects it keeps alive.&quot;),
+                width: &quot;140px&quot;,
+                aligned: &quot;right&quot;,
+                sortable: true, 
+            },
+            size: {
+                title: WebInspector.UIString(&quot;Self Size&quot;),
+                width: &quot;90px&quot;,
+                aligned: &quot;right&quot;,
+                sortable: true,
+            },
+            count: {
+                title: WebInspector.UIString(&quot;Count&quot;),
+                width: &quot;75px&quot;,
+                aligned: &quot;right&quot;,
+                sortable: true,
+            },
+            className: {
+                title: WebInspector.UIString(&quot;Class Name&quot;),
+                sortable: true,
+                disclosure: true,
+            }
+        };
+
+        super(representedObject, &quot;heap-snapshot-instances-content-view&quot;, columns, WebInspector.HeapSnapshotInstancesDataGridTree);
+    }
+};
+
+WebInspector.HeapSnapshotObjectGraphContentView = class HeapSnapshotObjectGraphContentView extends WebInspector.HeapSnapshotContentView
+{
+    constructor(representedObject)
+    {
+        let columns = {
+            retainedSize: {
+                title: WebInspector.UIString(&quot;Retained Size&quot;),
+                tooltip: WebInspector.UIString(&quot;Size of the current object plus the size of all objects it keeps alive.&quot;),
+                width: &quot;140px&quot;,
+                aligned: &quot;right&quot;,
+                sortable: true, 
+            },
+            size: {
+                title: WebInspector.UIString(&quot;Self Size&quot;),
+                width: &quot;90px&quot;,
+                aligned: &quot;right&quot;,
+                sortable: true,
+            },
+            className: {
+                title: WebInspector.UIString(&quot;Class Name&quot;),
+                sortable: true,
+                disclosure: true,
+            }
+        };
+
+        super(representedObject, &quot;heap-snapshot-object-graph-content-view&quot;, 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) =&gt; multiplier * (a.data[columnIdentifier] - b.data[columnIdentifier]);
+        let localeCompare = (columnIdentifier, a, b) =&gt; multiplier * (a.data[columnIdentifier].localeCompare(b.data[columnIdentifier]));
+
+        let comparator;
+        switch (columnIdentifier) {
+        case &quot;retainedSize&quot;:
+            return numberCompare.bind(this, &quot;retainedSize&quot;);
+        case &quot;size&quot;:
+            return numberCompare.bind(this, &quot;size&quot;);
+        case &quot;count&quot;:
+            return numberCompare.bind(this, &quot;count&quot;);
+        case &quot;className&quot;:
+            return localeCompare.bind(this, &quot;className&quot;);
+        }
+    }
+
+    // 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 &lt; children.length; ++i) {
+            children[i]._recalculateSiblings(i);
+            children[i].sort();
+        }
+    }
+
+    shown()
+    {
+        this._visible = true;
+    }
+
+    hidden()
+    {
+        this._visible = false;
+
+        if (this._popover &amp;&amp; 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: &quot;heap-snapshot-data-grid-tree-did-populate&quot;,
+};
+
+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(&quot;GlobalObject&quot;, (instances) =&gt; {
+            for (let instance of instances)
+                this.appendChild(new WebInspector.HeapSnapshotInstanceDataGridNode(instance, this));
+        });
+
+        this.heapSnapshot.instancesWithClassName(&quot;Window&quot;, (instances) =&gt; {
+            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 === &quot;string&quot;) {
</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 === &quot;retainedSize&quot;) {
</span><del>-            let subRetainedSize = false;            
-            if (this._base) {
</del><ins>+            let subRetainedSize = false;
+            if (this._base &amp;&amp; !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(&quot;span&quot;));
</span><span class="cx">             spacerElement.textContent = &quot; &quot;;
</span><span class="cx"> 
</span><del>-            HeapAgent.getPreview(id, (error, string, functionDetails, objectPreviewPayload) =&gt; {
-                if (error) {
-                    let previewErrorElement = containerElement.appendChild(document.createElement(&quot;span&quot;));
-                    previewErrorElement.classList.add(&quot;preview-error&quot;);
-                    previewErrorElement.textContent = internal ? WebInspector.UIString(&quot;Internal object&quot;) : WebInspector.UIString(&quot;No preview available&quot;);
-                    return;
-                }
</del><ins>+            if (className === &quot;Window&quot; &amp;&amp; this._node.dominatorNodeIdentifier === 0) {
+                containerElement.append(&quot;Window &quot;);
+                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(&quot;span&quot;));
-                    functionNameElement.classList.add(&quot;function-name&quot;);
-                    functionNameElement.textContent = name || displayName || WebInspector.UIString(&quot;(anonymous function)&quot;);
-                    let sourceCode = WebInspector.debuggerManager.scriptForIdentifier(location.scriptId);
-                    if (sourceCode) {
-                        let locationElement = containerElement.appendChild(document.createElement(&quot;span&quot;));
-                        locationElement.classList.add(&quot;location&quot;);
-                        let sourceCodeLocation = sourceCode.createSourceCodeLocation(location.lineNumber, location.columnNumber);
-                        sourceCodeLocation.populateLiveDisplayLocationString(locationElement, &quot;textContent&quot;, 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(&quot;Log Value&quot;), 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(&quot;span&quot;));
+        previewErrorElement.classList.add(&quot;preview-error&quot;);
+        previewErrorElement.textContent = WebInspector.UIString(&quot;No preview available&quot;);
+    }
+
+    _populateWindowPreview(containerElement)
+    {
+        HeapAgent.getRemoteObject(this._node.id, (error, remoteObjectPayload) =&gt; {
+            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) =&gt; {
+                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) =&gt; {
+            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(&quot;span&quot;));
+                functionNameElement.classList.add(&quot;function-name&quot;);
+                functionNameElement.textContent = name || displayName || WebInspector.UIString(&quot;(anonymous function)&quot;);
+                let sourceCode = WebInspector.debuggerManager.scriptForIdentifier(location.scriptId);
+                if (sourceCode) {
+                    let locationElement = containerElement.appendChild(document.createElement(&quot;span&quot;));
+                    locationElement.classList.add(&quot;location&quot;);
+                    let sourceCodeLocation = sourceCode.createSourceCodeLocation(location.lineNumber, location.columnNumber);
+                    sourceCodeLocation.populateLiveDisplayLocationString(locationElement, &quot;textContent&quot;, 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 &gt; .data-grid tr:not(.selected) td .preview-error {
-    color: red;
-}
-
</del><span class="cx"> .heap-snapshot &gt; .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(&quot;heap-snapshot&quot;);
-
-        let columns = {
-            retainedSize: {
-                title: WebInspector.UIString(&quot;Retained Size&quot;),
-                tooltip: WebInspector.UIString(&quot;Size of the current object plus the size of all objects it keeps alive.&quot;),
-                width: &quot;140px&quot;,
-                aligned: &quot;right&quot;,
-                sortable: true, 
-            },
-            size: {
-                title: WebInspector.UIString(&quot;Self Size&quot;),
-                width: &quot;90px&quot;,
-                aligned: &quot;right&quot;,
-                sortable: true,
-            },
-            count: {
-                title: WebInspector.UIString(&quot;Count&quot;),
-                width: &quot;75px&quot;,
-                aligned: &quot;right&quot;,
-                sortable: true,
-            },
-            className: {
-                title: WebInspector.UIString(&quot;Class Name&quot;),
-                sortable: true,
-                disclosure: true,
-            }
-        };
-
-        this._dataGrid = new WebInspector.DataGrid(columns);
-        this._dataGrid.sortColumnIdentifierSetting = new WebInspector.Setting(&quot;heap-snapshot-content-view-sort&quot;, &quot;retainedSize&quot;);
-        this._dataGrid.sortOrderSetting = new WebInspector.Setting(&quot;heap-snapshot-content-view-sort-order&quot;, 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) =&gt; multiplier * (a.data[columnIdentifier] - b.data[columnIdentifier]);
-        let localeCompare = (columnIdentifier, a, b) =&gt; multiplier * (a.data[columnIdentifier].localeCompare(b.data[columnIdentifier]));
-
-        let comparator;
-        switch (columnIdentifier) {
-        case &quot;retainedSize&quot;:
-            return numberCompare.bind(this, &quot;retainedSize&quot;);
-        case &quot;size&quot;:
-            return numberCompare.bind(this, &quot;size&quot;);
-        case &quot;count&quot;:
-            return numberCompare.bind(this, &quot;count&quot;);
-        case &quot;className&quot;:
-            return localeCompare.bind(this, &quot;className&quot;);
-        }
-    }
-
-    // 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 &lt; children.length; ++i) {
-            children[i]._recalculateSiblings(i);
-            children[i].sort();
-        }
-    }
-
-    shown()
-    {
-        this._visible = true;
-    }
-
-    hidden()
-    {
-        this._visible = false;
-
-        if (this._popover &amp;&amp; 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>