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

Unified Diff: third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotDataGrids.js

Issue 2466123002: DevTools: reformat front-end code to match chromium style. (Closed)
Patch Set: all done Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotDataGrids.js
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotDataGrids.js b/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotDataGrids.js
index 5a3a63da6f3c4b3d025fde453fa4fae64407673a..29424f1d4d4c4eeaabf5d32085c9371700d585c4 100644
--- a/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotDataGrids.js
+++ b/third_party/WebKit/Source/devtools/front_end/profiler/HeapSnapshotDataGrids.js
@@ -27,16 +27,16 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
/**
- * @constructor
- * @extends {WebInspector.DataGrid}
- * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate
- * @param {!Array.<!WebInspector.DataGrid.ColumnDescriptor>} columns
+ * @unrestricted
*/
-WebInspector.HeapSnapshotSortableDataGrid = function(dataDisplayDelegate, columns)
-{
- WebInspector.DataGrid.call(this, columns);
+WebInspector.HeapSnapshotSortableDataGrid = class extends WebInspector.DataGrid {
+ /**
+ * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate
+ * @param {!Array.<!WebInspector.DataGrid.ColumnDescriptor>} columns
+ */
+ constructor(dataDisplayDelegate, columns) {
+ super(columns);
this._dataDisplayDelegate = dataDisplayDelegate;
/**
@@ -56,1003 +56,989 @@ WebInspector.HeapSnapshotSortableDataGrid = function(dataDisplayDelegate, column
*/
this._nameFilter = null;
this._nodeFilter = new WebInspector.HeapSnapshotCommon.NodeFilter();
- this.addEventListener(WebInspector.HeapSnapshotSortableDataGrid.Events.SortingComplete, this._sortingComplete, this);
+ this.addEventListener(
+ WebInspector.HeapSnapshotSortableDataGrid.Events.SortingComplete, this._sortingComplete, this);
this.addEventListener(WebInspector.DataGrid.Events.SortingChanged, this.sortingChanged, this);
-};
-
-/** @enum {symbol} */
-WebInspector.HeapSnapshotSortableDataGrid.Events = {
- ContentShown: Symbol("ContentShown"),
- SortingComplete: Symbol("SortingComplete")
-};
-
-WebInspector.HeapSnapshotSortableDataGrid.prototype = {
- /**
- * @return {!WebInspector.HeapSnapshotCommon.NodeFilter}
- */
- nodeFilter: function()
- {
- return this._nodeFilter;
- },
-
- /**
- * @param {!WebInspector.ToolbarInput} nameFilter
- */
- setNameFilter: function(nameFilter)
- {
- this._nameFilter = nameFilter;
- },
-
- /**
- * @return {number}
- */
- defaultPopulateCount: function()
- {
- return 100;
- },
-
- _disposeAllNodes: function()
- {
- var children = this.topLevelNodes();
- for (var i = 0, l = children.length; i < l; ++i)
- children[i].dispose();
- },
-
- /**
- * @override
- */
- wasShown: function()
- {
- if (this._nameFilter) {
- this._nameFilter.addEventListener(WebInspector.ToolbarInput.Event.TextChanged, this._onNameFilterChanged, this);
- this.updateVisibleNodes(true);
- }
- if (this._populatedAndSorted)
- this.dispatchEventToListeners(WebInspector.HeapSnapshotSortableDataGrid.Events.ContentShown, this);
- },
-
- _sortingComplete: function()
- {
- this.removeEventListener(WebInspector.HeapSnapshotSortableDataGrid.Events.SortingComplete, this._sortingComplete, this);
- this._populatedAndSorted = true;
- this.dispatchEventToListeners(WebInspector.HeapSnapshotSortableDataGrid.Events.ContentShown, this);
- },
-
- /**
- * @override
- */
- willHide: function()
- {
- if (this._nameFilter)
- this._nameFilter.removeEventListener(WebInspector.ToolbarInput.Event.TextChanged, this._onNameFilterChanged, this);
- this._clearCurrentHighlight();
- },
-
- /**
- * @param {!WebInspector.ContextMenu} contextMenu
- * @param {!Event} event
- */
- populateContextMenu: function(contextMenu, event)
- {
- var td = event.target.enclosingNodeOrSelfWithNodeName("td");
- if (!td)
- return;
- var node = td.heapSnapshotNode;
-
- /**
- * @this {WebInspector.HeapSnapshotSortableDataGrid}
- */
- function revealInSummaryView()
- {
- this._dataDisplayDelegate.showObject(node.snapshotNodeId, "Summary");
- }
-
- if (node instanceof WebInspector.HeapSnapshotRetainingObjectNode)
- contextMenu.appendItem(WebInspector.UIString.capitalize("Reveal in Summary ^view"), revealInSummaryView.bind(this));
- },
-
- resetSortingCache: function()
- {
- delete this._lastSortColumnId;
- delete this._lastSortAscending;
- },
-
- /**
- * @return {!Array.<!WebInspector.HeapSnapshotGridNode>}
- */
- topLevelNodes: function()
- {
- return this.rootNode().children;
- },
-
- /**
- * @param {!HeapProfilerAgent.HeapSnapshotObjectId} heapSnapshotObjectId
- * @return {!Promise<?WebInspector.HeapSnapshotGridNode>}
- */
- revealObjectByHeapSnapshotId: function(heapSnapshotObjectId)
- {
- return Promise.resolve(/** @type {?WebInspector.HeapSnapshotGridNode} */ (null));
- },
-
- /**
- * @param {!WebInspector.HeapSnapshotGridNode} node
- */
- highlightNode: function(node)
- {
- this._clearCurrentHighlight();
- this._highlightedNode = node;
- WebInspector.runCSSAnimationOnce(this._highlightedNode.element(), "highlighted-row");
- },
-
- nodeWasDetached: function(node)
- {
- if (this._highlightedNode === node)
- this._clearCurrentHighlight();
- },
-
- _clearCurrentHighlight: function()
- {
- if (!this._highlightedNode)
- return;
- this._highlightedNode.element().classList.remove("highlighted-row");
- this._highlightedNode = null;
- },
-
- resetNameFilter: function()
- {
- this._nameFilter.setValue("");
- },
-
- _onNameFilterChanged: function()
- {
- this.updateVisibleNodes(true);
- },
-
- sortingChanged: function()
- {
- var sortAscending = this.isSortOrderAscending();
- var sortColumnId = this.sortColumnId();
- if (this._lastSortColumnId === sortColumnId && this._lastSortAscending === sortAscending)
- return;
- this._lastSortColumnId = sortColumnId;
- this._lastSortAscending = sortAscending;
- var sortFields = this._sortFields(sortColumnId, sortAscending);
-
- function SortByTwoFields(nodeA, nodeB)
- {
- var field1 = nodeA[sortFields[0]];
- var field2 = nodeB[sortFields[0]];
- var result = field1 < field2 ? -1 : (field1 > field2 ? 1 : 0);
- if (!sortFields[1])
- result = -result;
- if (result !== 0)
- return result;
- field1 = nodeA[sortFields[2]];
- field2 = nodeB[sortFields[2]];
- result = field1 < field2 ? -1 : (field1 > field2 ? 1 : 0);
- if (!sortFields[3])
- result = -result;
- return result;
- }
- this._performSorting(SortByTwoFields);
- },
-
- _performSorting: function(sortFunction)
- {
- this.recursiveSortingEnter();
- var children = this.allChildren(this.rootNode());
- this.rootNode().removeChildren();
- children.sort(sortFunction);
- for (var i = 0, l = children.length; i < l; ++i) {
- var child = children[i];
- this.appendChildAfterSorting(child);
- if (child.expanded)
- child.sort();
- }
- this.recursiveSortingLeave();
- },
-
- appendChildAfterSorting: function(child)
- {
- var revealed = child.revealed;
- this.rootNode().appendChild(child);
- child.revealed = revealed;
- },
-
- recursiveSortingEnter: function()
- {
- ++this._recursiveSortingDepth;
- },
-
- recursiveSortingLeave: function()
- {
- if (!this._recursiveSortingDepth)
- return;
- if (--this._recursiveSortingDepth)
- return;
- this.updateVisibleNodes(true);
- this.dispatchEventToListeners(WebInspector.HeapSnapshotSortableDataGrid.Events.SortingComplete);
- },
+ }
+
+ /**
+ * @return {!WebInspector.HeapSnapshotCommon.NodeFilter}
+ */
+ nodeFilter() {
+ return this._nodeFilter;
+ }
+
+ /**
+ * @param {!WebInspector.ToolbarInput} nameFilter
+ */
+ setNameFilter(nameFilter) {
+ this._nameFilter = nameFilter;
+ }
+
+ /**
+ * @return {number}
+ */
+ defaultPopulateCount() {
+ return 100;
+ }
+
+ _disposeAllNodes() {
+ var children = this.topLevelNodes();
+ for (var i = 0, l = children.length; i < l; ++i)
+ children[i].dispose();
+ }
+
+ /**
+ * @override
+ */
+ wasShown() {
+ if (this._nameFilter) {
+ this._nameFilter.addEventListener(WebInspector.ToolbarInput.Event.TextChanged, this._onNameFilterChanged, this);
+ this.updateVisibleNodes(true);
+ }
+ if (this._populatedAndSorted)
+ this.dispatchEventToListeners(WebInspector.HeapSnapshotSortableDataGrid.Events.ContentShown, this);
+ }
+
+ _sortingComplete() {
+ this.removeEventListener(
+ WebInspector.HeapSnapshotSortableDataGrid.Events.SortingComplete, this._sortingComplete, this);
+ this._populatedAndSorted = true;
+ this.dispatchEventToListeners(WebInspector.HeapSnapshotSortableDataGrid.Events.ContentShown, this);
+ }
+
+ /**
+ * @override
+ */
+ willHide() {
+ if (this._nameFilter)
+ this._nameFilter.removeEventListener(
+ WebInspector.ToolbarInput.Event.TextChanged, this._onNameFilterChanged, this);
+ this._clearCurrentHighlight();
+ }
+
+ /**
+ * @param {!WebInspector.ContextMenu} contextMenu
+ * @param {!Event} event
+ */
+ populateContextMenu(contextMenu, event) {
+ var td = event.target.enclosingNodeOrSelfWithNodeName('td');
+ if (!td)
+ return;
+ var node = td.heapSnapshotNode;
/**
- * @param {boolean} force
+ * @this {WebInspector.HeapSnapshotSortableDataGrid}
*/
- updateVisibleNodes: function(force)
- {
- },
-
- /**
- * @param {!WebInspector.DataGridNode} parent
- * @return {!Array.<!WebInspector.HeapSnapshotGridNode>}
- */
- allChildren: function(parent)
- {
- return parent.children;
- },
-
- /**
- * @param {!WebInspector.DataGridNode} parent
- * @param {!WebInspector.DataGridNode} node
- * @param {number} index
- */
- insertChild: function(parent, node, index)
- {
- parent.insertChild(node, index);
- },
-
- /**
- * @param {!WebInspector.HeapSnapshotGridNode} parent
- * @param {number} index
- */
- removeChildByIndex: function(parent, index)
- {
- parent.removeChild(parent.children[index]);
- },
-
- /**
- * @param {!WebInspector.HeapSnapshotGridNode} parent
- */
- removeAllChildren: function(parent)
- {
- parent.removeChildren();
- },
-
- __proto__: WebInspector.DataGrid.prototype
+ function revealInSummaryView() {
+ this._dataDisplayDelegate.showObject(node.snapshotNodeId, 'Summary');
+ }
+
+ if (node instanceof WebInspector.HeapSnapshotRetainingObjectNode)
+ contextMenu.appendItem(
+ WebInspector.UIString.capitalize('Reveal in Summary ^view'), revealInSummaryView.bind(this));
+ }
+
+ resetSortingCache() {
+ delete this._lastSortColumnId;
+ delete this._lastSortAscending;
+ }
+
+ /**
+ * @return {!Array.<!WebInspector.HeapSnapshotGridNode>}
+ */
+ topLevelNodes() {
+ return this.rootNode().children;
+ }
+
+ /**
+ * @param {!HeapProfilerAgent.HeapSnapshotObjectId} heapSnapshotObjectId
+ * @return {!Promise<?WebInspector.HeapSnapshotGridNode>}
+ */
+ revealObjectByHeapSnapshotId(heapSnapshotObjectId) {
+ return Promise.resolve(/** @type {?WebInspector.HeapSnapshotGridNode} */ (null));
+ }
+
+ /**
+ * @param {!WebInspector.HeapSnapshotGridNode} node
+ */
+ highlightNode(node) {
+ this._clearCurrentHighlight();
+ this._highlightedNode = node;
+ WebInspector.runCSSAnimationOnce(this._highlightedNode.element(), 'highlighted-row');
+ }
+
+ nodeWasDetached(node) {
+ if (this._highlightedNode === node)
+ this._clearCurrentHighlight();
+ }
+
+ _clearCurrentHighlight() {
+ if (!this._highlightedNode)
+ return;
+ this._highlightedNode.element().classList.remove('highlighted-row');
+ this._highlightedNode = null;
+ }
+
+ resetNameFilter() {
+ this._nameFilter.setValue('');
+ }
+
+ _onNameFilterChanged() {
+ this.updateVisibleNodes(true);
+ }
+
+ sortingChanged() {
+ var sortAscending = this.isSortOrderAscending();
+ var sortColumnId = this.sortColumnId();
+ if (this._lastSortColumnId === sortColumnId && this._lastSortAscending === sortAscending)
+ return;
+ this._lastSortColumnId = sortColumnId;
+ this._lastSortAscending = sortAscending;
+ var sortFields = this._sortFields(sortColumnId, sortAscending);
+
+ function SortByTwoFields(nodeA, nodeB) {
+ var field1 = nodeA[sortFields[0]];
+ var field2 = nodeB[sortFields[0]];
+ var result = field1 < field2 ? -1 : (field1 > field2 ? 1 : 0);
+ if (!sortFields[1])
+ result = -result;
+ if (result !== 0)
+ return result;
+ field1 = nodeA[sortFields[2]];
+ field2 = nodeB[sortFields[2]];
+ result = field1 < field2 ? -1 : (field1 > field2 ? 1 : 0);
+ if (!sortFields[3])
+ result = -result;
+ return result;
+ }
+ this._performSorting(SortByTwoFields);
+ }
+
+ _performSorting(sortFunction) {
+ this.recursiveSortingEnter();
+ var children = this.allChildren(this.rootNode());
+ this.rootNode().removeChildren();
+ children.sort(sortFunction);
+ for (var i = 0, l = children.length; i < l; ++i) {
+ var child = children[i];
+ this.appendChildAfterSorting(child);
+ if (child.expanded)
+ child.sort();
+ }
+ this.recursiveSortingLeave();
+ }
+
+ appendChildAfterSorting(child) {
+ var revealed = child.revealed;
+ this.rootNode().appendChild(child);
+ child.revealed = revealed;
+ }
+
+ recursiveSortingEnter() {
+ ++this._recursiveSortingDepth;
+ }
+
+ recursiveSortingLeave() {
+ if (!this._recursiveSortingDepth)
+ return;
+ if (--this._recursiveSortingDepth)
+ return;
+ this.updateVisibleNodes(true);
+ this.dispatchEventToListeners(WebInspector.HeapSnapshotSortableDataGrid.Events.SortingComplete);
+ }
+
+ /**
+ * @param {boolean} force
+ */
+ updateVisibleNodes(force) {
+ }
+
+ /**
+ * @param {!WebInspector.DataGridNode} parent
+ * @return {!Array.<!WebInspector.HeapSnapshotGridNode>}
+ */
+ allChildren(parent) {
+ return parent.children;
+ }
+
+ /**
+ * @param {!WebInspector.DataGridNode} parent
+ * @param {!WebInspector.DataGridNode} node
+ * @param {number} index
+ */
+ insertChild(parent, node, index) {
+ parent.insertChild(node, index);
+ }
+
+ /**
+ * @param {!WebInspector.HeapSnapshotGridNode} parent
+ * @param {number} index
+ */
+ removeChildByIndex(parent, index) {
+ parent.removeChild(parent.children[index]);
+ }
+
+ /**
+ * @param {!WebInspector.HeapSnapshotGridNode} parent
+ */
+ removeAllChildren(parent) {
+ parent.removeChildren();
+ }
};
+/** @enum {symbol} */
+WebInspector.HeapSnapshotSortableDataGrid.Events = {
+ ContentShown: Symbol('ContentShown'),
+ SortingComplete: Symbol('SortingComplete')
+};
/**
- * @constructor
- * @extends {WebInspector.HeapSnapshotSortableDataGrid}
- * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate
- * @param {!Array.<!WebInspector.DataGrid.ColumnDescriptor>} columns
+ * @unrestricted
*/
-WebInspector.HeapSnapshotViewportDataGrid = function(dataDisplayDelegate, columns)
-{
- WebInspector.HeapSnapshotSortableDataGrid.call(this, dataDisplayDelegate, columns);
- this.scrollContainer.addEventListener("scroll", this._onScroll.bind(this), true);
+WebInspector.HeapSnapshotViewportDataGrid = class extends WebInspector.HeapSnapshotSortableDataGrid {
+ /**
+ * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate
+ * @param {!Array.<!WebInspector.DataGrid.ColumnDescriptor>} columns
+ */
+ constructor(dataDisplayDelegate, columns) {
+ super(dataDisplayDelegate, columns);
+ this.scrollContainer.addEventListener('scroll', this._onScroll.bind(this), true);
this._topPaddingHeight = 0;
this._bottomPaddingHeight = 0;
-};
+ }
+
+ /**
+ * @override
+ * @return {!Array.<!WebInspector.HeapSnapshotGridNode>}
+ */
+ topLevelNodes() {
+ return this.allChildren(this.rootNode());
+ }
+
+ /**
+ * @override
+ */
+ appendChildAfterSorting(child) {
+ // Do nothing here, it will be added in updateVisibleNodes.
+ }
+
+ /**
+ * @override
+ * @param {boolean} force
+ */
+ updateVisibleNodes(force) {
+ // Guard zone is used to ensure there are always some extra items
+ // above and below the viewport to support keyboard navigation.
+ var guardZoneHeight = 40;
+ var scrollHeight = this.scrollContainer.scrollHeight;
+ var scrollTop = this.scrollContainer.scrollTop;
+ var scrollBottom = scrollHeight - scrollTop - this.scrollContainer.offsetHeight;
+ scrollTop = Math.max(0, scrollTop - guardZoneHeight);
+ scrollBottom = Math.max(0, scrollBottom - guardZoneHeight);
+ var viewPortHeight = scrollHeight - scrollTop - scrollBottom;
+ // Do nothing if populated nodes still fit the viewport.
+ if (!force && scrollTop >= this._topPaddingHeight && scrollBottom >= this._bottomPaddingHeight)
+ return;
+ var hysteresisHeight = 500;
+ scrollTop -= hysteresisHeight;
+ viewPortHeight += 2 * hysteresisHeight;
+ var selectedNode = this.selectedNode;
+ this.rootNode().removeChildren();
-WebInspector.HeapSnapshotViewportDataGrid.prototype = {
- /**
- * @override
- * @return {!Array.<!WebInspector.HeapSnapshotGridNode>}
- */
- topLevelNodes: function()
- {
- return this.allChildren(this.rootNode());
- },
-
- appendChildAfterSorting: function(child)
- {
- // Do nothing here, it will be added in updateVisibleNodes.
- },
-
- /**
- * @override
- * @param {boolean} force
- */
- updateVisibleNodes: function(force)
- {
- // Guard zone is used to ensure there are always some extra items
- // above and below the viewport to support keyboard navigation.
- var guardZoneHeight = 40;
- var scrollHeight = this.scrollContainer.scrollHeight;
- var scrollTop = this.scrollContainer.scrollTop;
- var scrollBottom = scrollHeight - scrollTop - this.scrollContainer.offsetHeight;
- scrollTop = Math.max(0, scrollTop - guardZoneHeight);
- scrollBottom = Math.max(0, scrollBottom - guardZoneHeight);
- var viewPortHeight = scrollHeight - scrollTop - scrollBottom;
- // Do nothing if populated nodes still fit the viewport.
- if (!force && scrollTop >= this._topPaddingHeight && scrollBottom >= this._bottomPaddingHeight)
- return;
- var hysteresisHeight = 500;
- scrollTop -= hysteresisHeight;
- viewPortHeight += 2 * hysteresisHeight;
- var selectedNode = this.selectedNode;
- this.rootNode().removeChildren();
-
- this._topPaddingHeight = 0;
- this._bottomPaddingHeight = 0;
-
- this._addVisibleNodes(this.rootNode(), scrollTop, scrollTop + viewPortHeight);
-
- this.setVerticalPadding(this._topPaddingHeight, this._bottomPaddingHeight);
-
- if (selectedNode) {
- // Keep selection even if the node is not in the current viewport.
- if (selectedNode.parent)
- selectedNode.select(true);
- else
- this.selectedNode = selectedNode;
- }
- },
-
- /**
- * @param {!WebInspector.DataGridNode} parentNode
- * @param {number} topBound
- * @param {number} bottomBound
- * @return {number}
- */
- _addVisibleNodes: function(parentNode, topBound, bottomBound)
- {
- if (!parentNode.expanded)
- return 0;
-
- var children = this.allChildren(parentNode);
- var topPadding = 0;
- var nameFilterValue = this._nameFilter ? this._nameFilter.value().toLowerCase() : "";
- // Iterate over invisible nodes beyond the upper bound of viewport.
- // Do not insert them into the grid, but count their total height.
- for (var i = 0; i < children.length; ++i) {
- var child = children[i];
- if (nameFilterValue && child.filteredOut && child.filteredOut(nameFilterValue))
- continue;
- var newTop = topPadding + this._nodeHeight(child);
- if (newTop > topBound)
- break;
- topPadding = newTop;
- }
-
- // Put visible nodes into the data grid.
- var position = topPadding;
- for (; i < children.length && position < bottomBound; ++i) {
- var child = children[i];
- if (nameFilterValue && child.filteredOut && child.filteredOut(nameFilterValue))
- continue;
- var hasChildren = child.hasChildren;
- child.removeChildren();
- child.hasChildren = hasChildren;
- child.revealed = true;
- parentNode.appendChild(child);
- position += child.nodeSelfHeight();
- position += this._addVisibleNodes(child, topBound - position, bottomBound - position);
- }
-
- // Count the invisible nodes beyond the bottom bound of the viewport.
- var bottomPadding = 0;
- for (; i < children.length; ++i) {
- var child = children[i];
- if (nameFilterValue && child.filteredOut && child.filteredOut(nameFilterValue))
- continue;
- bottomPadding += this._nodeHeight(child);
- }
-
- this._topPaddingHeight += topPadding;
- this._bottomPaddingHeight += bottomPadding;
- return position + bottomPadding;
- },
-
- /**
- * @param {!WebInspector.HeapSnapshotGridNode} node
- * @return {number}
- */
- _nodeHeight: function(node)
- {
- if (!node.revealed)
- return 0;
- var result = node.nodeSelfHeight();
- if (!node.expanded)
- return result;
- var children = this.allChildren(node);
- for (var i = 0; i < children.length; i++)
- result += this._nodeHeight(children[i]);
- return result;
- },
-
- /**
- * @param {!Array.<!WebInspector.HeapSnapshotGridNode>} pathToReveal
- * @return {!Promise.<!WebInspector.HeapSnapshotGridNode>}
- */
- revealTreeNode: function(pathToReveal)
- {
- var height = this._calculateOffset(pathToReveal);
- var node = /** @type {!WebInspector.HeapSnapshotGridNode} */(pathToReveal.peekLast());
- var scrollTop = this.scrollContainer.scrollTop;
- var scrollBottom = scrollTop + this.scrollContainer.offsetHeight;
- if (height >= scrollTop && height < scrollBottom)
- return Promise.resolve(node);
-
- var scrollGap = 40;
- this.scrollContainer.scrollTop = Math.max(0, height - scrollGap);
- return new Promise(this._scrollTo.bind(this, node));
- },
-
- /**
- * @param {!WebInspector.HeapSnapshotGridNode} node
- * @param {function(!WebInspector.HeapSnapshotGridNode)} fulfill
- */
- _scrollTo: function(node, fulfill)
- {
- console.assert(!this._scrollToResolveCallback);
- this._scrollToResolveCallback = fulfill.bind(null, node);
- },
-
- /**
- * @param {!Array.<!WebInspector.HeapSnapshotGridNode>} pathToReveal
- * @return {number}
- */
- _calculateOffset: function(pathToReveal)
- {
- var parentNode = this.rootNode();
- var height = 0;
- for (var i = 0; i < pathToReveal.length; ++i) {
- var node = pathToReveal[i];
- var children = this.allChildren(parentNode);
- for (var j = 0; j < children.length; ++j) {
- var child = children[j];
- if (node === child) {
- height += node.nodeSelfHeight();
- break;
- }
- height += this._nodeHeight(child);
- }
- parentNode = node;
- }
- return height - pathToReveal.peekLast().nodeSelfHeight();
- },
-
- /**
- * @override
- * @param {!WebInspector.DataGridNode} parent
- * @return {!Array.<!WebInspector.HeapSnapshotGridNode>}
- */
- allChildren: function(parent)
- {
- return parent._allChildren || (parent._allChildren = []);
- },
-
- /**
- * @param {!WebInspector.DataGridNode} parent
- * @param {!WebInspector.HeapSnapshotGridNode} node
- */
- appendNode: function(parent, node)
- {
- this.allChildren(parent).push(node);
- },
-
- /**
- * @override
- * @param {!WebInspector.DataGridNode} parent
- * @param {!WebInspector.DataGridNode} node
- * @param {number} index
- */
- insertChild: function(parent, node, index)
- {
- this.allChildren(parent).splice(index, 0, /** @type {!WebInspector.HeapSnapshotGridNode} */(node));
- },
-
- removeChildByIndex: function(parent, index)
- {
- this.allChildren(parent).splice(index, 1);
- },
-
- removeAllChildren: function(parent)
- {
- parent._allChildren = [];
- },
-
- removeTopLevelNodes: function()
- {
- this._disposeAllNodes();
- this.rootNode().removeChildren();
- this.rootNode()._allChildren = [];
- },
+ this._topPaddingHeight = 0;
+ this._bottomPaddingHeight = 0;
- /**
- * @param {!Element} element
- * @return {boolean}
- */
- _isScrolledIntoView: function(element)
- {
- var viewportTop = this.scrollContainer.scrollTop;
- var viewportBottom = viewportTop + this.scrollContainer.clientHeight;
- var elemTop = element.offsetTop;
- var elemBottom = elemTop + element.offsetHeight;
- return elemBottom <= viewportBottom && elemTop >= viewportTop;
- },
-
- onResize: function()
- {
- WebInspector.HeapSnapshotSortableDataGrid.prototype.onResize.call(this);
- this.updateVisibleNodes(false);
- },
-
- _onScroll: function(event)
- {
- this.updateVisibleNodes(false);
-
- if (this._scrollToResolveCallback) {
- this._scrollToResolveCallback();
- this._scrollToResolveCallback = null;
+ this._addVisibleNodes(this.rootNode(), scrollTop, scrollTop + viewPortHeight);
+
+ this.setVerticalPadding(this._topPaddingHeight, this._bottomPaddingHeight);
+
+ if (selectedNode) {
+ // Keep selection even if the node is not in the current viewport.
+ if (selectedNode.parent)
+ selectedNode.select(true);
+ else
+ this.selectedNode = selectedNode;
+ }
+ }
+
+ /**
+ * @param {!WebInspector.DataGridNode} parentNode
+ * @param {number} topBound
+ * @param {number} bottomBound
+ * @return {number}
+ */
+ _addVisibleNodes(parentNode, topBound, bottomBound) {
+ if (!parentNode.expanded)
+ return 0;
+
+ var children = this.allChildren(parentNode);
+ var topPadding = 0;
+ var nameFilterValue = this._nameFilter ? this._nameFilter.value().toLowerCase() : '';
+ // Iterate over invisible nodes beyond the upper bound of viewport.
+ // Do not insert them into the grid, but count their total height.
+ for (var i = 0; i < children.length; ++i) {
+ var child = children[i];
+ if (nameFilterValue && child.filteredOut && child.filteredOut(nameFilterValue))
+ continue;
+ var newTop = topPadding + this._nodeHeight(child);
+ if (newTop > topBound)
+ break;
+ topPadding = newTop;
+ }
+
+ // Put visible nodes into the data grid.
+ var position = topPadding;
+ for (; i < children.length && position < bottomBound; ++i) {
+ var child = children[i];
+ if (nameFilterValue && child.filteredOut && child.filteredOut(nameFilterValue))
+ continue;
+ var hasChildren = child.hasChildren;
+ child.removeChildren();
+ child.hasChildren = hasChildren;
+ child.revealed = true;
+ parentNode.appendChild(child);
+ position += child.nodeSelfHeight();
+ position += this._addVisibleNodes(child, topBound - position, bottomBound - position);
+ }
+
+ // Count the invisible nodes beyond the bottom bound of the viewport.
+ var bottomPadding = 0;
+ for (; i < children.length; ++i) {
+ var child = children[i];
+ if (nameFilterValue && child.filteredOut && child.filteredOut(nameFilterValue))
+ continue;
+ bottomPadding += this._nodeHeight(child);
+ }
+
+ this._topPaddingHeight += topPadding;
+ this._bottomPaddingHeight += bottomPadding;
+ return position + bottomPadding;
+ }
+
+ /**
+ * @param {!WebInspector.HeapSnapshotGridNode} node
+ * @return {number}
+ */
+ _nodeHeight(node) {
+ if (!node.revealed)
+ return 0;
+ var result = node.nodeSelfHeight();
+ if (!node.expanded)
+ return result;
+ var children = this.allChildren(node);
+ for (var i = 0; i < children.length; i++)
+ result += this._nodeHeight(children[i]);
+ return result;
+ }
+
+ /**
+ * @param {!Array.<!WebInspector.HeapSnapshotGridNode>} pathToReveal
+ * @return {!Promise.<!WebInspector.HeapSnapshotGridNode>}
+ */
+ revealTreeNode(pathToReveal) {
+ var height = this._calculateOffset(pathToReveal);
+ var node = /** @type {!WebInspector.HeapSnapshotGridNode} */ (pathToReveal.peekLast());
+ var scrollTop = this.scrollContainer.scrollTop;
+ var scrollBottom = scrollTop + this.scrollContainer.offsetHeight;
+ if (height >= scrollTop && height < scrollBottom)
+ return Promise.resolve(node);
+
+ var scrollGap = 40;
+ this.scrollContainer.scrollTop = Math.max(0, height - scrollGap);
+ return new Promise(this._scrollTo.bind(this, node));
+ }
+
+ /**
+ * @param {!WebInspector.HeapSnapshotGridNode} node
+ * @param {function(!WebInspector.HeapSnapshotGridNode)} fulfill
+ */
+ _scrollTo(node, fulfill) {
+ console.assert(!this._scrollToResolveCallback);
+ this._scrollToResolveCallback = fulfill.bind(null, node);
+ }
+
+ /**
+ * @param {!Array.<!WebInspector.HeapSnapshotGridNode>} pathToReveal
+ * @return {number}
+ */
+ _calculateOffset(pathToReveal) {
+ var parentNode = this.rootNode();
+ var height = 0;
+ for (var i = 0; i < pathToReveal.length; ++i) {
+ var node = pathToReveal[i];
+ var children = this.allChildren(parentNode);
+ for (var j = 0; j < children.length; ++j) {
+ var child = children[j];
+ if (node === child) {
+ height += node.nodeSelfHeight();
+ break;
}
- },
-
- __proto__: WebInspector.HeapSnapshotSortableDataGrid.prototype
+ height += this._nodeHeight(child);
+ }
+ parentNode = node;
+ }
+ return height - pathToReveal.peekLast().nodeSelfHeight();
+ }
+
+ /**
+ * @override
+ * @param {!WebInspector.DataGridNode} parent
+ * @return {!Array.<!WebInspector.HeapSnapshotGridNode>}
+ */
+ allChildren(parent) {
+ return parent._allChildren || (parent._allChildren = []);
+ }
+
+ /**
+ * @param {!WebInspector.DataGridNode} parent
+ * @param {!WebInspector.HeapSnapshotGridNode} node
+ */
+ appendNode(parent, node) {
+ this.allChildren(parent).push(node);
+ }
+
+ /**
+ * @override
+ * @param {!WebInspector.DataGridNode} parent
+ * @param {!WebInspector.DataGridNode} node
+ * @param {number} index
+ */
+ insertChild(parent, node, index) {
+ this.allChildren(parent).splice(index, 0, /** @type {!WebInspector.HeapSnapshotGridNode} */ (node));
+ }
+
+ /**
+ * @override
+ */
+ removeChildByIndex(parent, index) {
+ this.allChildren(parent).splice(index, 1);
+ }
+
+ /**
+ * @override
+ */
+ removeAllChildren(parent) {
+ parent._allChildren = [];
+ }
+
+ removeTopLevelNodes() {
+ this._disposeAllNodes();
+ this.rootNode().removeChildren();
+ this.rootNode()._allChildren = [];
+ }
+
+ /**
+ * @param {!Element} element
+ * @return {boolean}
+ */
+ _isScrolledIntoView(element) {
+ var viewportTop = this.scrollContainer.scrollTop;
+ var viewportBottom = viewportTop + this.scrollContainer.clientHeight;
+ var elemTop = element.offsetTop;
+ var elemBottom = elemTop + element.offsetHeight;
+ return elemBottom <= viewportBottom && elemTop >= viewportTop;
+ }
+
+ /**
+ * @override
+ */
+ onResize() {
+ super.onResize();
+ this.updateVisibleNodes(false);
+ }
+
+ _onScroll(event) {
+ this.updateVisibleNodes(false);
+
+ if (this._scrollToResolveCallback) {
+ this._scrollToResolveCallback();
+ this._scrollToResolveCallback = null;
+ }
+ }
};
/**
- * @constructor
- * @extends {WebInspector.HeapSnapshotSortableDataGrid}
- * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate
- * @param {!Array.<!WebInspector.DataGrid.ColumnDescriptor>=} columns
+ * @unrestricted
*/
-WebInspector.HeapSnapshotContainmentDataGrid = function(dataDisplayDelegate, columns)
-{
- columns = columns || (/** @type {!Array<!WebInspector.DataGrid.ColumnDescriptor>} */ ([
- {id: "object", title: WebInspector.UIString("Object"), disclosure: true, sortable: true},
- {id: "distance", title: WebInspector.UIString("Distance"), width: "65px", sortable: true, fixedWidth: true},
- {id: "shallowSize", title: WebInspector.UIString("Shallow Size"), width: "105px", sortable: true, fixedWidth: true},
- {id: "retainedSize", title: WebInspector.UIString("Retained Size"), width: "105px", sortable: true, fixedWidth: true, sort: WebInspector.DataGrid.Order.Descending}
- ]));
- WebInspector.HeapSnapshotSortableDataGrid.call(this, dataDisplayDelegate, columns);
-};
-
-WebInspector.HeapSnapshotContainmentDataGrid.prototype = {
- /**
- * @param {!WebInspector.HeapSnapshotProxy} snapshot
- * @param {number} nodeIndex
- */
- setDataSource: function(snapshot, nodeIndex)
- {
- this.snapshot = snapshot;
- var node = { nodeIndex: nodeIndex || snapshot.rootNodeIndex };
- var fakeEdge = { node: node };
- this.setRootNode(this._createRootNode(snapshot, fakeEdge));
- this.rootNode().sort();
- },
-
- _createRootNode: function(snapshot, fakeEdge)
- {
- return new WebInspector.HeapSnapshotObjectNode(this, snapshot, fakeEdge, null);
- },
-
- sortingChanged: function()
- {
- var rootNode = this.rootNode();
- if (rootNode.hasChildren)
- rootNode.sort();
- },
-
- __proto__: WebInspector.HeapSnapshotSortableDataGrid.prototype
+WebInspector.HeapSnapshotContainmentDataGrid = class extends WebInspector.HeapSnapshotSortableDataGrid {
+ /**
+ * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate
+ * @param {!Array.<!WebInspector.DataGrid.ColumnDescriptor>=} columns
+ */
+ constructor(dataDisplayDelegate, columns) {
+ columns =
+ columns || (/** @type {!Array<!WebInspector.DataGrid.ColumnDescriptor>} */ ([
+ {id: 'object', title: WebInspector.UIString('Object'), disclosure: true, sortable: true},
+ {id: 'distance', title: WebInspector.UIString('Distance'), width: '65px', sortable: true, fixedWidth: true}, {
+ id: 'shallowSize',
+ title: WebInspector.UIString('Shallow Size'),
+ width: '105px',
+ sortable: true,
+ fixedWidth: true
+ },
+ {
+ id: 'retainedSize',
+ title: WebInspector.UIString('Retained Size'),
+ width: '105px',
+ sortable: true,
+ fixedWidth: true,
+ sort: WebInspector.DataGrid.Order.Descending
+ }
+ ]));
+ super(dataDisplayDelegate, columns);
+ }
+
+ /**
+ * @param {!WebInspector.HeapSnapshotProxy} snapshot
+ * @param {number} nodeIndex
+ */
+ setDataSource(snapshot, nodeIndex) {
+ this.snapshot = snapshot;
+ var node = {nodeIndex: nodeIndex || snapshot.rootNodeIndex};
+ var fakeEdge = {node: node};
+ this.setRootNode(this._createRootNode(snapshot, fakeEdge));
+ this.rootNode().sort();
+ }
+
+ _createRootNode(snapshot, fakeEdge) {
+ return new WebInspector.HeapSnapshotObjectNode(this, snapshot, fakeEdge, null);
+ }
+
+ /**
+ * @override
+ */
+ sortingChanged() {
+ var rootNode = this.rootNode();
+ if (rootNode.hasChildren)
+ rootNode.sort();
+ }
};
-
/**
- * @constructor
- * @extends {WebInspector.HeapSnapshotContainmentDataGrid}
- * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate
+ * @unrestricted
*/
-WebInspector.HeapSnapshotRetainmentDataGrid = function(dataDisplayDelegate)
-{
+WebInspector.HeapSnapshotRetainmentDataGrid = class extends WebInspector.HeapSnapshotContainmentDataGrid {
+ /**
+ * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate
+ */
+ constructor(dataDisplayDelegate) {
var columns = /** @type {!Array<!WebInspector.DataGrid.ColumnDescriptor>} */ ([
- {id: "object", title: WebInspector.UIString("Object"), disclosure: true, sortable: true},
- {id: "distance", title: WebInspector.UIString("Distance"), width: "65px", sortable: true, fixedWidth: true, sort: WebInspector.DataGrid.Order.Ascending},
- {id: "shallowSize", title: WebInspector.UIString("Shallow Size"), width: "105px", sortable: true, fixedWidth: true},
- {id: "retainedSize", title: WebInspector.UIString("Retained Size"), width: "105px", sortable: true, fixedWidth: true}
+ {id: 'object', title: WebInspector.UIString('Object'), disclosure: true, sortable: true}, {
+ id: 'distance',
+ title: WebInspector.UIString('Distance'),
+ width: '65px',
+ sortable: true,
+ fixedWidth: true,
+ sort: WebInspector.DataGrid.Order.Ascending
+ },
+ {
+ id: 'shallowSize',
+ title: WebInspector.UIString('Shallow Size'),
+ width: '105px',
+ sortable: true,
+ fixedWidth: true
+ },
+ {
+ id: 'retainedSize',
+ title: WebInspector.UIString('Retained Size'),
+ width: '105px',
+ sortable: true,
+ fixedWidth: true
+ }
]);
- WebInspector.HeapSnapshotContainmentDataGrid.call(this, dataDisplayDelegate, columns);
+ super(dataDisplayDelegate, columns);
+ }
+
+ /**
+ * @override
+ */
+ _createRootNode(snapshot, fakeEdge) {
+ return new WebInspector.HeapSnapshotRetainingObjectNode(this, snapshot, fakeEdge, null);
+ }
+
+ _sortFields(sortColumn, sortAscending) {
+ return {
+ object: ['_name', sortAscending, '_count', false],
+ count: ['_count', sortAscending, '_name', true],
+ shallowSize: ['_shallowSize', sortAscending, '_name', true],
+ retainedSize: ['_retainedSize', sortAscending, '_name', true],
+ distance: ['_distance', sortAscending, '_name', true]
+ }[sortColumn];
+ }
+
+ reset() {
+ this.rootNode().removeChildren();
+ this.resetSortingCache();
+ }
+
+ /**
+ * @override
+ * @param {!WebInspector.HeapSnapshotProxy} snapshot
+ * @param {number} nodeIndex
+ */
+ setDataSource(snapshot, nodeIndex) {
+ super.setDataSource(snapshot, nodeIndex);
+ this.rootNode().expand();
+ }
};
/** @enum {symbol} */
WebInspector.HeapSnapshotRetainmentDataGrid.Events = {
- ExpandRetainersComplete: Symbol("ExpandRetainersComplete")
-};
-
-WebInspector.HeapSnapshotRetainmentDataGrid.prototype = {
- _createRootNode: function(snapshot, fakeEdge)
- {
- return new WebInspector.HeapSnapshotRetainingObjectNode(this, snapshot, fakeEdge, null);
- },
-
- _sortFields: function(sortColumn, sortAscending)
- {
- return {
- object: ["_name", sortAscending, "_count", false],
- count: ["_count", sortAscending, "_name", true],
- shallowSize: ["_shallowSize", sortAscending, "_name", true],
- retainedSize: ["_retainedSize", sortAscending, "_name", true],
- distance: ["_distance", sortAscending, "_name", true]
- }[sortColumn];
- },
-
- reset: function()
- {
- this.rootNode().removeChildren();
- this.resetSortingCache();
- },
-
- /**
- * @override
- * @param {!WebInspector.HeapSnapshotProxy} snapshot
- * @param {number} nodeIndex
- */
- setDataSource: function(snapshot, nodeIndex)
- {
- WebInspector.HeapSnapshotContainmentDataGrid.prototype.setDataSource.call(this, snapshot, nodeIndex);
- this.rootNode().expand();
- },
-
- __proto__: WebInspector.HeapSnapshotContainmentDataGrid.prototype
+ ExpandRetainersComplete: Symbol('ExpandRetainersComplete')
};
/**
- * @constructor
- * @extends {WebInspector.HeapSnapshotViewportDataGrid}
- * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate
+ * @unrestricted
*/
-WebInspector.HeapSnapshotConstructorsDataGrid = function(dataDisplayDelegate)
-{
+WebInspector.HeapSnapshotConstructorsDataGrid = class extends WebInspector.HeapSnapshotViewportDataGrid {
+ /**
+ * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate
+ */
+ constructor(dataDisplayDelegate) {
var columns = /** @type {!Array<!WebInspector.DataGrid.ColumnDescriptor>} */ ([
- {id: "object", title: WebInspector.UIString("Constructor"), disclosure: true, sortable: true},
- {id: "distance", title: WebInspector.UIString("Distance"), width: "65px", sortable: true, fixedWidth: true},
- {id: "count", title: WebInspector.UIString("Objects Count"), width: "90px", sortable: true, fixedWidth: true},
- {id: "shallowSize", title: WebInspector.UIString("Shallow Size"), width: "105px", sortable: true, fixedWidth: true},
- {id: "retainedSize", title: WebInspector.UIString("Retained Size"), width: "105px", sort: WebInspector.DataGrid.Order.Descending, sortable: true, fixedWidth: true}
+ {id: 'object', title: WebInspector.UIString('Constructor'), disclosure: true, sortable: true},
+ {id: 'distance', title: WebInspector.UIString('Distance'), width: '65px', sortable: true, fixedWidth: true},
+ {id: 'count', title: WebInspector.UIString('Objects Count'), width: '90px', sortable: true, fixedWidth: true}, {
+ id: 'shallowSize',
+ title: WebInspector.UIString('Shallow Size'),
+ width: '105px',
+ sortable: true,
+ fixedWidth: true
+ },
+ {
+ id: 'retainedSize',
+ title: WebInspector.UIString('Retained Size'),
+ width: '105px',
+ sort: WebInspector.DataGrid.Order.Descending,
+ sortable: true,
+ fixedWidth: true
+ }
]);
- WebInspector.HeapSnapshotViewportDataGrid.call(this, dataDisplayDelegate, columns);
+ super(dataDisplayDelegate, columns);
this._profileIndex = -1;
this._objectIdToSelect = null;
-};
-
-WebInspector.HeapSnapshotConstructorsDataGrid.prototype = {
- _sortFields: function(sortColumn, sortAscending)
- {
- return {
- object: ["_name", sortAscending, "_count", false],
- distance: ["_distance", sortAscending, "_retainedSize", true],
- count: ["_count", sortAscending, "_name", true],
- shallowSize: ["_shallowSize", sortAscending, "_name", true],
- retainedSize: ["_retainedSize", sortAscending, "_name", true]
- }[sortColumn];
- },
+ }
+
+ _sortFields(sortColumn, sortAscending) {
+ return {
+ object: ['_name', sortAscending, '_count', false],
+ distance: ['_distance', sortAscending, '_retainedSize', true],
+ count: ['_count', sortAscending, '_name', true],
+ shallowSize: ['_shallowSize', sortAscending, '_name', true],
+ retainedSize: ['_retainedSize', sortAscending, '_name', true]
+ }[sortColumn];
+ }
+
+ /**
+ * @override
+ * @param {!HeapProfilerAgent.HeapSnapshotObjectId} id
+ * @return {!Promise<?WebInspector.HeapSnapshotGridNode>}
+ */
+ revealObjectByHeapSnapshotId(id) {
+ if (!this.snapshot) {
+ this._objectIdToSelect = id;
+ return Promise.resolve(/** @type {?WebInspector.HeapSnapshotGridNode} */ (null));
+ }
/**
- * @override
- * @param {!HeapProfilerAgent.HeapSnapshotObjectId} id
- * @return {!Promise<?WebInspector.HeapSnapshotGridNode>}
+ * @param {!Array<!WebInspector.HeapSnapshotGridNode>} nodes
+ * @return {?Promise<!WebInspector.HeapSnapshotGridNode>}
+ * @this {WebInspector.HeapSnapshotConstructorsDataGrid}
*/
- revealObjectByHeapSnapshotId: function(id)
- {
- if (!this.snapshot) {
- this._objectIdToSelect = id;
- return Promise.resolve(/** @type {?WebInspector.HeapSnapshotGridNode} */ (null));
- }
-
- /**
- * @param {!Array<!WebInspector.HeapSnapshotGridNode>} nodes
- * @return {?Promise<!WebInspector.HeapSnapshotGridNode>}
- * @this {WebInspector.HeapSnapshotConstructorsDataGrid}
- */
- function didPopulateNode(nodes)
- {
- return nodes.length ? this.revealTreeNode(nodes) : null;
- }
-
- /**
- * @param {?string} className
- * @return {?Promise<?WebInspector.HeapSnapshotGridNode>}
- * @this {WebInspector.HeapSnapshotConstructorsDataGrid}
- */
- function didGetClassName(className)
- {
- if (!className)
- return null;
- var constructorNodes = this.topLevelNodes();
- for (var i = 0; i < constructorNodes.length; i++) {
- var parent = constructorNodes[i];
- if (parent._name === className)
- return parent.populateNodeBySnapshotObjectId(parseInt(id, 10)).then(didPopulateNode.bind(this));
- }
- // There are no visible top level nodes with such className.
- return null;
- }
- return this.snapshot.nodeClassName(parseInt(id, 10)).then(didGetClassName.bind(this));
- },
-
- clear: function()
- {
- this._nextRequestedFilter = null;
- this._lastFilter = null;
- this.removeTopLevelNodes();
- },
-
- /**
- * @param {!WebInspector.HeapSnapshotProxy} snapshot
- */
- setDataSource: function(snapshot)
- {
- this.snapshot = snapshot;
- if (this._profileIndex === -1)
- this._populateChildren();
-
- if (this._objectIdToSelect) {
- this.revealObjectByHeapSnapshotId(this._objectIdToSelect);
- this._objectIdToSelect = null;
- }
- },
-
- /**
- * @param {number} minNodeId
- * @param {number} maxNodeId
- */
- setSelectionRange: function(minNodeId, maxNodeId)
- {
- this._nodeFilter = new WebInspector.HeapSnapshotCommon.NodeFilter(minNodeId, maxNodeId);
- this._populateChildren(this._nodeFilter);
- },
-
- /**
- * @param {number} allocationNodeId
- */
- setAllocationNodeId: function(allocationNodeId)
- {
- this._nodeFilter = new WebInspector.HeapSnapshotCommon.NodeFilter();
- this._nodeFilter.allocationNodeId = allocationNodeId;
- this._populateChildren(this._nodeFilter);
- },
+ function didPopulateNode(nodes) {
+ return nodes.length ? this.revealTreeNode(nodes) : null;
+ }
/**
- * @param {!WebInspector.HeapSnapshotCommon.NodeFilter} nodeFilter
- * @param {!Object.<string, !WebInspector.HeapSnapshotCommon.Aggregate>} aggregates
+ * @param {?string} className
+ * @return {?Promise<?WebInspector.HeapSnapshotGridNode>}
+ * @this {WebInspector.HeapSnapshotConstructorsDataGrid}
*/
- _aggregatesReceived: function(nodeFilter, aggregates)
- {
- this._filterInProgress = null;
- if (this._nextRequestedFilter) {
- this.snapshot.aggregatesWithFilter(this._nextRequestedFilter, this._aggregatesReceived.bind(this, this._nextRequestedFilter));
- this._filterInProgress = this._nextRequestedFilter;
- this._nextRequestedFilter = null;
- }
- this.removeTopLevelNodes();
- this.resetSortingCache();
- for (var constructor in aggregates)
- this.appendNode(this.rootNode(), new WebInspector.HeapSnapshotConstructorNode(this, constructor, aggregates[constructor], nodeFilter));
- this.sortingChanged();
- this._lastFilter = nodeFilter;
- },
-
- /**
- * @param {!WebInspector.HeapSnapshotCommon.NodeFilter=} nodeFilter
- */
- _populateChildren: function(nodeFilter)
- {
- nodeFilter = nodeFilter || new WebInspector.HeapSnapshotCommon.NodeFilter();
-
- if (this._filterInProgress) {
- this._nextRequestedFilter = this._filterInProgress.equals(nodeFilter) ? null : nodeFilter;
- return;
- }
- if (this._lastFilter && this._lastFilter.equals(nodeFilter))
- return;
- this._filterInProgress = nodeFilter;
- this.snapshot.aggregatesWithFilter(nodeFilter, this._aggregatesReceived.bind(this, nodeFilter));
- },
-
- filterSelectIndexChanged: function(profiles, profileIndex)
- {
- this._profileIndex = profileIndex;
- this._nodeFilter = undefined;
- if (profileIndex !== -1) {
- var minNodeId = profileIndex > 0 ? profiles[profileIndex - 1].maxJSObjectId : 0;
- var maxNodeId = profiles[profileIndex].maxJSObjectId;
- this._nodeFilter = new WebInspector.HeapSnapshotCommon.NodeFilter(minNodeId, maxNodeId);
- }
-
- this._populateChildren(this._nodeFilter);
- },
-
- __proto__: WebInspector.HeapSnapshotViewportDataGrid.prototype
+ function didGetClassName(className) {
+ if (!className)
+ return null;
+ var constructorNodes = this.topLevelNodes();
+ for (var i = 0; i < constructorNodes.length; i++) {
+ var parent = constructorNodes[i];
+ if (parent._name === className)
+ return parent.populateNodeBySnapshotObjectId(parseInt(id, 10)).then(didPopulateNode.bind(this));
+ }
+ // There are no visible top level nodes with such className.
+ return null;
+ }
+ return this.snapshot.nodeClassName(parseInt(id, 10)).then(didGetClassName.bind(this));
+ }
+
+ clear() {
+ this._nextRequestedFilter = null;
+ this._lastFilter = null;
+ this.removeTopLevelNodes();
+ }
+
+ /**
+ * @param {!WebInspector.HeapSnapshotProxy} snapshot
+ */
+ setDataSource(snapshot) {
+ this.snapshot = snapshot;
+ if (this._profileIndex === -1)
+ this._populateChildren();
+
+ if (this._objectIdToSelect) {
+ this.revealObjectByHeapSnapshotId(this._objectIdToSelect);
+ this._objectIdToSelect = null;
+ }
+ }
+
+ /**
+ * @param {number} minNodeId
+ * @param {number} maxNodeId
+ */
+ setSelectionRange(minNodeId, maxNodeId) {
+ this._nodeFilter = new WebInspector.HeapSnapshotCommon.NodeFilter(minNodeId, maxNodeId);
+ this._populateChildren(this._nodeFilter);
+ }
+
+ /**
+ * @param {number} allocationNodeId
+ */
+ setAllocationNodeId(allocationNodeId) {
+ this._nodeFilter = new WebInspector.HeapSnapshotCommon.NodeFilter();
+ this._nodeFilter.allocationNodeId = allocationNodeId;
+ this._populateChildren(this._nodeFilter);
+ }
+
+ /**
+ * @param {!WebInspector.HeapSnapshotCommon.NodeFilter} nodeFilter
+ * @param {!Object.<string, !WebInspector.HeapSnapshotCommon.Aggregate>} aggregates
+ */
+ _aggregatesReceived(nodeFilter, aggregates) {
+ this._filterInProgress = null;
+ if (this._nextRequestedFilter) {
+ this.snapshot.aggregatesWithFilter(
+ this._nextRequestedFilter, this._aggregatesReceived.bind(this, this._nextRequestedFilter));
+ this._filterInProgress = this._nextRequestedFilter;
+ this._nextRequestedFilter = null;
+ }
+ this.removeTopLevelNodes();
+ this.resetSortingCache();
+ for (var constructor in aggregates)
+ this.appendNode(
+ this.rootNode(),
+ new WebInspector.HeapSnapshotConstructorNode(this, constructor, aggregates[constructor], nodeFilter));
+ this.sortingChanged();
+ this._lastFilter = nodeFilter;
+ }
+
+ /**
+ * @param {!WebInspector.HeapSnapshotCommon.NodeFilter=} nodeFilter
+ */
+ _populateChildren(nodeFilter) {
+ nodeFilter = nodeFilter || new WebInspector.HeapSnapshotCommon.NodeFilter();
+
+ if (this._filterInProgress) {
+ this._nextRequestedFilter = this._filterInProgress.equals(nodeFilter) ? null : nodeFilter;
+ return;
+ }
+ if (this._lastFilter && this._lastFilter.equals(nodeFilter))
+ return;
+ this._filterInProgress = nodeFilter;
+ this.snapshot.aggregatesWithFilter(nodeFilter, this._aggregatesReceived.bind(this, nodeFilter));
+ }
+
+ filterSelectIndexChanged(profiles, profileIndex) {
+ this._profileIndex = profileIndex;
+ this._nodeFilter = undefined;
+ if (profileIndex !== -1) {
+ var minNodeId = profileIndex > 0 ? profiles[profileIndex - 1].maxJSObjectId : 0;
+ var maxNodeId = profiles[profileIndex].maxJSObjectId;
+ this._nodeFilter = new WebInspector.HeapSnapshotCommon.NodeFilter(minNodeId, maxNodeId);
+ }
+
+ this._populateChildren(this._nodeFilter);
+ }
};
-
/**
- * @constructor
- * @extends {WebInspector.HeapSnapshotViewportDataGrid}
- * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate
+ * @unrestricted
*/
-WebInspector.HeapSnapshotDiffDataGrid = function(dataDisplayDelegate)
-{
+WebInspector.HeapSnapshotDiffDataGrid = class extends WebInspector.HeapSnapshotViewportDataGrid {
+ /**
+ * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate
+ */
+ constructor(dataDisplayDelegate) {
var columns = /** @type {!Array<!WebInspector.DataGrid.ColumnDescriptor>} */ ([
- {id: "object", title: WebInspector.UIString("Constructor"), disclosure: true, sortable: true},
- {id: "addedCount", title: WebInspector.UIString("# New"), width: "72px", sortable: true, fixedWidth: true},
- {id: "removedCount", title: WebInspector.UIString("# Deleted"), width: "72px", sortable: true, fixedWidth: true},
- {id: "countDelta", title: WebInspector.UIString("# Delta"), width: "64px", sortable: true, fixedWidth: true},
- {id: "addedSize", title: WebInspector.UIString("Alloc. Size"), width: "72px", sortable: true, fixedWidth: true, sort: WebInspector.DataGrid.Order.Descending},
- {id: "removedSize", title: WebInspector.UIString("Freed Size"), width: "72px", sortable: true, fixedWidth: true},
- {id: "sizeDelta", title: WebInspector.UIString("Size Delta"), width: "72px", sortable: true, fixedWidth: true}
+ {id: 'object', title: WebInspector.UIString('Constructor'), disclosure: true, sortable: true},
+ {id: 'addedCount', title: WebInspector.UIString('# New'), width: '72px', sortable: true, fixedWidth: true},
+ {id: 'removedCount', title: WebInspector.UIString('# Deleted'), width: '72px', sortable: true, fixedWidth: true},
+ {id: 'countDelta', title: WebInspector.UIString('# Delta'), width: '64px', sortable: true, fixedWidth: true}, {
+ id: 'addedSize',
+ title: WebInspector.UIString('Alloc. Size'),
+ width: '72px',
+ sortable: true,
+ fixedWidth: true,
+ sort: WebInspector.DataGrid.Order.Descending
+ },
+ {id: 'removedSize', title: WebInspector.UIString('Freed Size'), width: '72px', sortable: true, fixedWidth: true},
+ {id: 'sizeDelta', title: WebInspector.UIString('Size Delta'), width: '72px', sortable: true, fixedWidth: true}
]);
- WebInspector.HeapSnapshotViewportDataGrid.call(this, dataDisplayDelegate, columns);
-};
-
-WebInspector.HeapSnapshotDiffDataGrid.prototype = {
- /**
- * @override
- * @return {number}
- */
- defaultPopulateCount: function()
- {
- return 50;
- },
-
- _sortFields: function(sortColumn, sortAscending)
- {
- return {
- object: ["_name", sortAscending, "_count", false],
- addedCount: ["_addedCount", sortAscending, "_name", true],
- removedCount: ["_removedCount", sortAscending, "_name", true],
- countDelta: ["_countDelta", sortAscending, "_name", true],
- addedSize: ["_addedSize", sortAscending, "_name", true],
- removedSize: ["_removedSize", sortAscending, "_name", true],
- sizeDelta: ["_sizeDelta", sortAscending, "_name", true]
- }[sortColumn];
- },
-
- setDataSource: function(snapshot)
- {
- this.snapshot = snapshot;
- },
-
+ super(dataDisplayDelegate, columns);
+ }
+
+ /**
+ * @override
+ * @return {number}
+ */
+ defaultPopulateCount() {
+ return 50;
+ }
+
+ _sortFields(sortColumn, sortAscending) {
+ return {
+ object: ['_name', sortAscending, '_count', false],
+ addedCount: ['_addedCount', sortAscending, '_name', true],
+ removedCount: ['_removedCount', sortAscending, '_name', true],
+ countDelta: ['_countDelta', sortAscending, '_name', true],
+ addedSize: ['_addedSize', sortAscending, '_name', true],
+ removedSize: ['_removedSize', sortAscending, '_name', true],
+ sizeDelta: ['_sizeDelta', sortAscending, '_name', true]
+ }[sortColumn];
+ }
+
+ setDataSource(snapshot) {
+ this.snapshot = snapshot;
+ }
+
+ /**
+ * @param {!WebInspector.HeapSnapshotProxy} baseSnapshot
+ */
+ setBaseDataSource(baseSnapshot) {
+ this.baseSnapshot = baseSnapshot;
+ this.removeTopLevelNodes();
+ this.resetSortingCache();
+ if (this.baseSnapshot === this.snapshot) {
+ this.dispatchEventToListeners(WebInspector.HeapSnapshotSortableDataGrid.Events.SortingComplete);
+ return;
+ }
+ this._populateChildren();
+ }
+
+ _populateChildren() {
/**
- * @param {!WebInspector.HeapSnapshotProxy} baseSnapshot
+ * @this {WebInspector.HeapSnapshotDiffDataGrid}
*/
- setBaseDataSource: function(baseSnapshot)
- {
- this.baseSnapshot = baseSnapshot;
- this.removeTopLevelNodes();
- this.resetSortingCache();
- if (this.baseSnapshot === this.snapshot) {
- this.dispatchEventToListeners(WebInspector.HeapSnapshotSortableDataGrid.Events.SortingComplete);
- return;
- }
- this._populateChildren();
- },
-
- _populateChildren: function()
- {
- /**
- * @this {WebInspector.HeapSnapshotDiffDataGrid}
- */
- function aggregatesForDiffReceived(aggregatesForDiff)
- {
- this.snapshot.calculateSnapshotDiff(this.baseSnapshot.uid, aggregatesForDiff, didCalculateSnapshotDiff.bind(this));
-
- /**
- * @this {WebInspector.HeapSnapshotDiffDataGrid}
- */
- function didCalculateSnapshotDiff(diffByClassName)
- {
- for (var className in diffByClassName) {
- var diff = diffByClassName[className];
- this.appendNode(this.rootNode(), new WebInspector.HeapSnapshotDiffNode(this, className, diff));
- }
- this.sortingChanged();
- }
+ function aggregatesForDiffReceived(aggregatesForDiff) {
+ this.snapshot.calculateSnapshotDiff(
+ this.baseSnapshot.uid, aggregatesForDiff, didCalculateSnapshotDiff.bind(this));
+
+ /**
+ * @this {WebInspector.HeapSnapshotDiffDataGrid}
+ */
+ function didCalculateSnapshotDiff(diffByClassName) {
+ for (var className in diffByClassName) {
+ var diff = diffByClassName[className];
+ this.appendNode(this.rootNode(), new WebInspector.HeapSnapshotDiffNode(this, className, diff));
}
- // Two snapshots live in different workers isolated from each other. That is why
- // we first need to collect information about the nodes in the first snapshot and
- // then pass it to the second snapshot to calclulate the diff.
- this.baseSnapshot.aggregatesForDiff(aggregatesForDiffReceived.bind(this));
- },
-
- __proto__: WebInspector.HeapSnapshotViewportDataGrid.prototype
+ this.sortingChanged();
+ }
+ }
+ // Two snapshots live in different workers isolated from each other. That is why
+ // we first need to collect information about the nodes in the first snapshot and
+ // then pass it to the second snapshot to calclulate the diff.
+ this.baseSnapshot.aggregatesForDiff(aggregatesForDiffReceived.bind(this));
+ }
};
-
/**
- * @constructor
- * @extends {WebInspector.HeapSnapshotViewportDataGrid}
- * @param {?WebInspector.Target} target
- * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate
+ * @unrestricted
*/
-WebInspector.AllocationDataGrid = function(target, dataDisplayDelegate)
-{
+WebInspector.AllocationDataGrid = class extends WebInspector.HeapSnapshotViewportDataGrid {
+ /**
+ * @param {?WebInspector.Target} target
+ * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate
+ */
+ constructor(target, dataDisplayDelegate) {
var columns = /** @type {!Array<!WebInspector.DataGrid.ColumnDescriptor>} */ ([
- {id: "liveCount", title: WebInspector.UIString("Live Count"), width: "72px", sortable: true, fixedWidth: true},
- {id: "count", title: WebInspector.UIString("Count"), width: "60px", sortable: true, fixedWidth: true},
- {id: "liveSize", title: WebInspector.UIString("Live Size"), width: "72px", sortable: true, fixedWidth: true},
- {id: "size", title: WebInspector.UIString("Size"), width: "72px", sortable: true, fixedWidth: true, sort: WebInspector.DataGrid.Order.Descending},
- {id: "name", title: WebInspector.UIString("Function"), disclosure: true, sortable: true},
+ {id: 'liveCount', title: WebInspector.UIString('Live Count'), width: '72px', sortable: true, fixedWidth: true},
+ {id: 'count', title: WebInspector.UIString('Count'), width: '60px', sortable: true, fixedWidth: true},
+ {id: 'liveSize', title: WebInspector.UIString('Live Size'), width: '72px', sortable: true, fixedWidth: true},
+ {
+ id: 'size',
+ title: WebInspector.UIString('Size'),
+ width: '72px',
+ sortable: true,
+ fixedWidth: true,
+ sort: WebInspector.DataGrid.Order.Descending
+ },
+ {id: 'name', title: WebInspector.UIString('Function'), disclosure: true, sortable: true},
]);
- WebInspector.HeapSnapshotViewportDataGrid.call(this, dataDisplayDelegate, columns);
+ super(dataDisplayDelegate, columns);
this._target = target;
this._linkifier = new WebInspector.Linkifier();
-};
+ }
-WebInspector.AllocationDataGrid.prototype = {
+ /**
+ * @return {?WebInspector.Target}
+ */
+ target() {
+ return this._target;
+ }
- /**
- * @return {?WebInspector.Target}
- */
- target: function()
- {
- return this._target;
- },
-
- dispose: function()
- {
- this._linkifier.reset();
- },
-
- setDataSource: function(snapshot)
- {
- this.snapshot = snapshot;
- this.snapshot.allocationTracesTops(didReceiveAllocationTracesTops.bind(this));
-
- /**
- * @param {!Array.<!WebInspector.HeapSnapshotCommon.SerializedAllocationNode>} tops
- * @this {WebInspector.AllocationDataGrid}
- */
- function didReceiveAllocationTracesTops(tops)
- {
- this._topNodes = tops;
- this._populateChildren();
- }
- },
-
- _populateChildren: function()
- {
- this.removeTopLevelNodes();
- var root = this.rootNode();
- var tops = this._topNodes;
- for (var i = 0; i < tops.length; i++)
- this.appendNode(root, new WebInspector.AllocationGridNode(this, tops[i]));
- this.updateVisibleNodes(true);
- },
-
- sortingChanged: function()
- {
- this._topNodes.sort(this._createComparator());
- this.rootNode().removeChildren();
- this._populateChildren();
- },
+ dispose() {
+ this._linkifier.reset();
+ }
+ setDataSource(snapshot) {
+ this.snapshot = snapshot;
+ this.snapshot.allocationTracesTops(didReceiveAllocationTracesTops.bind(this));
/**
- * @return {function(!Object, !Object):number}
+ * @param {!Array.<!WebInspector.HeapSnapshotCommon.SerializedAllocationNode>} tops
+ * @this {WebInspector.AllocationDataGrid}
*/
- _createComparator: function()
- {
- var fieldName = this.sortColumnId();
- var compareResult = (this.sortOrder() === WebInspector.DataGrid.Order.Ascending) ? +1 : -1;
- /**
- * @param {!Object} a
- * @param {!Object} b
- * @return {number}
- */
- function compare(a, b)
- {
- if (a[fieldName] > b[fieldName])
- return compareResult;
- if (a[fieldName] < b[fieldName])
- return -compareResult;
- return 0;
- }
- return compare;
- },
-
- __proto__: WebInspector.HeapSnapshotViewportDataGrid.prototype
+ function didReceiveAllocationTracesTops(tops) {
+ this._topNodes = tops;
+ this._populateChildren();
+ }
+ }
+
+ _populateChildren() {
+ this.removeTopLevelNodes();
+ var root = this.rootNode();
+ var tops = this._topNodes;
+ for (var i = 0; i < tops.length; i++)
+ this.appendNode(root, new WebInspector.AllocationGridNode(this, tops[i]));
+ this.updateVisibleNodes(true);
+ }
+
+ /**
+ * @override
+ */
+ sortingChanged() {
+ this._topNodes.sort(this._createComparator());
+ this.rootNode().removeChildren();
+ this._populateChildren();
+ }
+
+ /**
+ * @return {function(!Object, !Object):number}
+ */
+ _createComparator() {
+ var fieldName = this.sortColumnId();
+ var compareResult = (this.sortOrder() === WebInspector.DataGrid.Order.Ascending) ? +1 : -1;
+ /**
+ * @param {!Object} a
+ * @param {!Object} b
+ * @return {number}
+ */
+ function compare(a, b) {
+ if (a[fieldName] > b[fieldName])
+ return compareResult;
+ if (a[fieldName] < b[fieldName])
+ return -compareResult;
+ return 0;
+ }
+ return compare;
+ }
};

Powered by Google App Engine
This is Rietveld 408576698