15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @implements {WebInspector.ProfileType.DataDisplayDelegate} 34d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.VBox} 35323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate 36926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {!WebInspector.HeapProfileHeader} profile 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 38323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)WebInspector.HeapSnapshotView = function(dataDisplayDelegate, profile) 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 40d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.VBox.call(this); 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 42a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this.element.classList.add("heap-snapshot-view"); 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch profile.profileType().addEventListener(WebInspector.HeapSnapshotProfileType.SnapshotReceived, this._onReceiveSnapshot, this); 4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) profile.profileType().addEventListener(WebInspector.ProfileType.Events.RemoveProfileHeader, this._onProfileHeaderRemoved, this); 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 47197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (profile.profileType().id === WebInspector.TrackingHeapSnapshotProfileType.TypeId) { 4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._trackingOverviewGrid = new WebInspector.HeapTrackingOverviewGrid(profile); 4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._trackingOverviewGrid.addEventListener(WebInspector.HeapTrackingOverviewGrid.IdsRangeChanged, this._onIdsRangeChanged.bind(this)); 5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 5153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._parentDataDisplayDelegate = dataDisplayDelegate; 537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 54d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._splitView = new WebInspector.SplitView(false, true, "heapSnapshotSplitViewState", 200, 200); 55d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._splitView.show(this.element); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 57d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._containmentView = new WebInspector.VBox(); 5807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch this._containmentView.setMinimumSize(50, 25); 597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._containmentDataGrid = new WebInspector.HeapSnapshotContainmentDataGrid(this); 60d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._containmentDataGrid.show(this._containmentView.element); 61d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._containmentDataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode, this._selectionChanged, this); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 63d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._statisticsView = new WebInspector.HeapSnapshotStatisticsView(); 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 65d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._constructorsView = new WebInspector.VBox(); 6607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch this._constructorsView.setMinimumSize(50, 25); 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._constructorsDataGrid = new WebInspector.HeapSnapshotConstructorsDataGrid(this); 69d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._constructorsDataGrid.show(this._constructorsView.element); 70d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._constructorsDataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode, this._selectionChanged, this); 7193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 72d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._diffView = new WebInspector.VBox(); 7307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch this._diffView.setMinimumSize(50, 25); 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._diffDataGrid = new WebInspector.HeapSnapshotDiffDataGrid(this); 76d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._diffDataGrid.show(this._diffView.element); 77d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._diffDataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode, this._selectionChanged, this); 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 79197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (profile._hasAllocationStacks) { 80d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._allocationView = new WebInspector.VBox(); 8107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch this._allocationView.setMinimumSize(50, 25); 827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._allocationDataGrid = new WebInspector.AllocationDataGrid(profile.target() , this); 8343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._allocationDataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode, this._onSelectAllocationNode, this); 84d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._allocationDataGrid.show(this._allocationView.element); 8506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) 867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._allocationStackView = new WebInspector.HeapAllocationStackView(profile.target()); 87a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._allocationStackView.setMinimumSize(50, 25); 88a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 89a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._tabbedPane = new WebInspector.TabbedPane(); 90a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._tabbedPane.closeableTabs = false; 91a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._tabbedPane.headerElement().classList.add("heap-object-details-header"); 92a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } 93d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 94d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._retainmentView = new WebInspector.VBox(); 9507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch this._retainmentView.setMinimumSize(50, 21); 96d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._retainmentView.element.classList.add("retaining-paths-view"); 97a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 98a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var splitViewResizer; 99a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (this._allocationStackView) { 100a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._tabbedPane = new WebInspector.TabbedPane(); 101a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._tabbedPane.closeableTabs = false; 102a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._tabbedPane.headerElement().classList.add("heap-object-details-header"); 103a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 104a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._tabbedPane.appendTab("retainers", WebInspector.UIString("Retainers"), this._retainmentView); 105a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._tabbedPane.appendTab("allocation-stack", WebInspector.UIString("Allocation stack"), this._allocationStackView); 106a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 107a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch splitViewResizer = this._tabbedPane.headerElement(); 108a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._objectDetailsView = this._tabbedPane; 109a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } else { 110a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var retainmentViewHeader = document.createElementWithClass("div", "heap-snapshot-view-resizer"); 111a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var retainingPathsTitleDiv = retainmentViewHeader.createChild("div", "title"); 112a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var retainingPathsTitle = retainingPathsTitleDiv.createChild("span"); 113a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch retainingPathsTitle.textContent = WebInspector.UIString("Retainers"); 114a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._retainmentView.element.appendChild(retainmentViewHeader); 115a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 116a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch splitViewResizer = retainmentViewHeader; 117a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._objectDetailsView = this._retainmentView; 118a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } 119a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._splitView.hideDefaultResizer(); 120a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._splitView.installResizer(splitViewResizer); 121a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 1227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._retainmentDataGrid = new WebInspector.HeapSnapshotRetainmentDataGrid(this); 123d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._retainmentDataGrid.show(this._retainmentView.element); 124d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._retainmentDataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNode, this._inspectedObjectChanged, this); 125d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._retainmentDataGrid.reset(); 126d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 127d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._perspectives = []; 128d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._perspectives.push(new WebInspector.HeapSnapshotView.SummaryPerspective()); 12909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (profile.profileType() !== WebInspector.ProfileTypeRegistry.instance.trackingHeapSnapshotProfileType) 130d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._perspectives.push(new WebInspector.HeapSnapshotView.ComparisonPerspective()); 131d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._perspectives.push(new WebInspector.HeapSnapshotView.ContainmentPerspective()); 132d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (this._allocationView) 133d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._perspectives.push(new WebInspector.HeapSnapshotView.AllocationPerspective()); 134c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._perspectives.push(new WebInspector.HeapSnapshotView.StatisticsPerspective()); 135d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 136d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._perspectiveSelect = new WebInspector.StatusBarComboBox(this._onSelectedPerspectiveChanged.bind(this)); 137d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) for (var i = 0; i < this._perspectives.length; ++i) 138d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._perspectiveSelect.createOption(this._perspectives[i].title()); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 140a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._profile = profile; 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 142d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._baseSelect = new WebInspector.StatusBarComboBox(this._changeBase.bind(this)); 143d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._baseSelect.visible = false; 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._updateBaseOptions(); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._filterSelect = new WebInspector.StatusBarComboBox(this._changeFilter.bind(this)); 147d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._filterSelect.visible = false; 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._updateFilterOptions(); 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._classNameFilter = new WebInspector.StatusBarInput("Class filter"); 151d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._classNameFilter.visible = false; 152a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._constructorsDataGrid.setNameFilter(this._classNameFilter); 153a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._diffDataGrid.setNameFilter(this._classNameFilter); 15409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 155d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._selectedSizeText = new WebInspector.StatusBarText(""); 15653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._popoverHelper = new WebInspector.ObjectPopoverHelper(this.element, this._getHoverAnchor.bind(this), this._resolveObjectForPopover.bind(this), undefined, true); 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 159d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._currentPerspectiveIndex = 0; 160d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._currentPerspective = this._perspectives[0]; 161d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._currentPerspective.activate(this); 162d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._dataGrid = this._currentPerspective.masterGrid(this); 163d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 164a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._refreshView(); 165a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 167d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/** 168d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @constructor 169d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {string} title 170d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 171d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.HeapSnapshotView.Perspective = function(title) 172d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 173d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._title = title; 174d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 175d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 176d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.HeapSnapshotView.Perspective.prototype = { 177d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 178d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotView} heapSnapshotView 179d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 180d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) activate: function(heapSnapshotView) { }, 181d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 182d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 183d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotView} heapSnapshotView 184d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 185d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) deactivate: function(heapSnapshotView) 186d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 187d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._baseSelect.visible = false; 188d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._filterSelect.visible = false; 189d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._classNameFilter.visible = false; 190d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (heapSnapshotView._trackingOverviewGrid) 191d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._trackingOverviewGrid.detach(); 192d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (heapSnapshotView._allocationView) 193d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._allocationView.detach(); 194d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (heapSnapshotView._statisticsView) 195d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._statisticsView.detach(); 196d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 197d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._splitView.detach(); 198d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._splitView.detachChildViews(); 199d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 200d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 201d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 202d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotView} heapSnapshotView 203d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {?WebInspector.DataGrid} 204d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 205d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) masterGrid: function(heapSnapshotView) 206d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 207d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return null; 208d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 209d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 210d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 211d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {string} 212d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 213d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) title: function() 214d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 215d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return this._title; 216d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 217d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 218d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 219d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {boolean} 220d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 221d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) supportsSearch: function() 222d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 223d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return false; 224d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 225d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 226d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 227d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/** 228d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @constructor 229d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.HeapSnapshotView.Perspective} 230d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 231d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.HeapSnapshotView.SummaryPerspective = function() 232d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 233d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.HeapSnapshotView.Perspective.call(this, WebInspector.UIString("Summary")); 234d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 235d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 236d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.HeapSnapshotView.SummaryPerspective.prototype = { 237d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 238d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @override 239d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotView} heapSnapshotView 240d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 241d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) activate: function(heapSnapshotView) 242d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 243d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._constructorsView.show(heapSnapshotView._splitView.mainElement()); 244a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch heapSnapshotView._objectDetailsView.show(heapSnapshotView._splitView.sidebarElement()); 245d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._splitView.show(heapSnapshotView.element); 246d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._filterSelect.visible = true; 247d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._classNameFilter.visible = true; 248d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (heapSnapshotView._trackingOverviewGrid) { 249d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._trackingOverviewGrid.show(heapSnapshotView.element, heapSnapshotView._splitView.element); 250d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._trackingOverviewGrid.update(); 25143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) heapSnapshotView._trackingOverviewGrid._updateGrid(); 252d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 253d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 254d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 255d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 256d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @override 257d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotView} heapSnapshotView 258d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {?WebInspector.DataGrid} 259d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 260d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) masterGrid: function(heapSnapshotView) 261d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 262d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return heapSnapshotView._constructorsDataGrid; 263d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 264d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 265d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 266d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @override 267d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {boolean} 268d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 269d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) supportsSearch: function() 270d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 271d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return true; 272d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 273d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 274d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) __proto__: WebInspector.HeapSnapshotView.Perspective.prototype 275d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 276d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 277d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/** 278d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @constructor 279d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.HeapSnapshotView.Perspective} 280d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 281d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.HeapSnapshotView.ComparisonPerspective = function() 282d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 283d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.HeapSnapshotView.Perspective.call(this, WebInspector.UIString("Comparison")); 284d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 285d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 286d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.HeapSnapshotView.ComparisonPerspective.prototype = { 287d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 288d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @override 289d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotView} heapSnapshotView 290d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 291d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) activate: function(heapSnapshotView) 292d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 293d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._diffView.show(heapSnapshotView._splitView.mainElement()); 294a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch heapSnapshotView._objectDetailsView.show(heapSnapshotView._splitView.sidebarElement()); 295d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._splitView.show(heapSnapshotView.element); 296d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._baseSelect.visible = true; 297d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._classNameFilter.visible = true; 298d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 299d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 300d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 301d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @override 302d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotView} heapSnapshotView 303d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {?WebInspector.DataGrid} 304d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 305d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) masterGrid: function(heapSnapshotView) 306d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 307d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return heapSnapshotView._diffDataGrid; 308d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 309d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 310d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 311d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @override 312d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {boolean} 313d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 314d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) supportsSearch: function() 315d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 316d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return true; 317d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 318d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 319d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) __proto__: WebInspector.HeapSnapshotView.Perspective.prototype 320d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 321d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 322d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/** 323d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @constructor 324d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.HeapSnapshotView.Perspective} 325d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 326d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.HeapSnapshotView.ContainmentPerspective = function() 327d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 328d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.HeapSnapshotView.Perspective.call(this, WebInspector.UIString("Containment")); 329d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 330d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 331d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.HeapSnapshotView.ContainmentPerspective.prototype = { 332d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 333d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @override 334d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotView} heapSnapshotView 335d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 336d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) activate: function(heapSnapshotView) 337d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 338d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._containmentView.show(heapSnapshotView._splitView.mainElement()); 339a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch heapSnapshotView._objectDetailsView.show(heapSnapshotView._splitView.sidebarElement()); 340d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._splitView.show(heapSnapshotView.element); 341d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 342d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 343d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 344d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @override 345d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotView} heapSnapshotView 346d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {?WebInspector.DataGrid} 347d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 348d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) masterGrid: function(heapSnapshotView) 349d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 350d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return heapSnapshotView._containmentDataGrid; 351d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 352d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) __proto__: WebInspector.HeapSnapshotView.Perspective.prototype 353d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 354d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 355d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/** 356d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @constructor 357d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.HeapSnapshotView.Perspective} 358d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 359d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.HeapSnapshotView.AllocationPerspective = function() 360d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 361d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.HeapSnapshotView.Perspective.call(this, WebInspector.UIString("Allocation")); 36243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._allocationSplitView = new WebInspector.SplitView(false, true, "heapSnapshotAllocationSplitViewState", 200, 200); 363aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 364aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch var resizer = document.createElementWithClass("div", "heap-snapshot-view-resizer"); 365aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch var title = resizer.createChild("div", "title").createChild("span"); 366aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch title.textContent = WebInspector.UIString("Live objects"); 367aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch this._allocationSplitView.hideDefaultResizer(); 368aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch this._allocationSplitView.installResizer(resizer); 369aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 370aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch this._allocationSplitView.sidebarElement().appendChild(resizer); 371d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 372d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 373d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.HeapSnapshotView.AllocationPerspective.prototype = { 374d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 375d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @override 376d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotView} heapSnapshotView 377d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 378d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) activate: function(heapSnapshotView) 379d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 38043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) heapSnapshotView._allocationView.show(this._allocationSplitView.mainElement()); 38143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) heapSnapshotView._constructorsView.show(heapSnapshotView._splitView.mainElement()); 382a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch heapSnapshotView._objectDetailsView.show(heapSnapshotView._splitView.sidebarElement()); 38343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) heapSnapshotView._splitView.show(this._allocationSplitView.sidebarElement()); 38443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._allocationSplitView.show(heapSnapshotView.element); 38543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 38643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) heapSnapshotView._constructorsDataGrid.clear(); 38743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) var selectedNode = heapSnapshotView._allocationDataGrid.selectedNode; 38843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (selectedNode) 38943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) heapSnapshotView._constructorsDataGrid.setAllocationNodeId(selectedNode.allocationNodeId()); 39043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) }, 39143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 39243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) /** 39343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) * @override 39443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) * @param {!WebInspector.HeapSnapshotView} heapSnapshotView 39543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) */ 39643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) deactivate: function(heapSnapshotView) 39743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) { 39843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._allocationSplitView.detach(); 39943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) WebInspector.HeapSnapshotView.Perspective.prototype.deactivate.call(this, heapSnapshotView); 400d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 401d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 402d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 403d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @override 404d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotView} heapSnapshotView 405d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {?WebInspector.DataGrid} 406d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 407d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) masterGrid: function(heapSnapshotView) 408d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 409d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return heapSnapshotView._allocationDataGrid; 410d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 411d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 412d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) __proto__: WebInspector.HeapSnapshotView.Perspective.prototype 413d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 414d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 415d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/** 416d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @constructor 417d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.HeapSnapshotView.Perspective} 418d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 419d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.HeapSnapshotView.StatisticsPerspective = function() 420d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 421d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.HeapSnapshotView.Perspective.call(this, WebInspector.UIString("Statistics")); 422d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 423d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 424d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.HeapSnapshotView.StatisticsPerspective.prototype = { 425d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 426d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @override 427d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotView} heapSnapshotView 428d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 429d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) activate: function(heapSnapshotView) 430d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 431d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotView._statisticsView.show(heapSnapshotView.element); 432d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 433d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 434d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 435d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @override 436d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotView} heapSnapshotView 437d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {?WebInspector.DataGrid} 438d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 439d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) masterGrid: function(heapSnapshotView) 440d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 441d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return null; 442d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 443d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 444d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) __proto__: WebInspector.HeapSnapshotView.Perspective.prototype 445d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 446d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 447d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 448a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)WebInspector.HeapSnapshotView.prototype = { 4497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 4507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @override 4517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {?WebInspector.ProfileHeader} profile 4527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {?WebInspector.View} 4537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 4547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci showProfile: function(profile) 4557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 4567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return this._parentDataDisplayDelegate.showProfile(profile); 4577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci }, 4587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 4597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 4607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @override 4617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!HeapProfilerAgent.HeapSnapshotObjectId} snapshotObjectId 4627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {string} perspectiveName 4637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 4647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci showObject: function(snapshotObjectId, perspectiveName) 4657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 4667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (snapshotObjectId <= this._profile.maxJSObjectId) 4677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.highlightLiveObject(perspectiveName, snapshotObjectId); 4687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci else 4697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._parentDataDisplayDelegate.showObject(snapshotObjectId, perspectiveName); 4707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci }, 4717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 472a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) _refreshView: function() 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 47409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._profile.load(profileCallback.bind(this)); 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 47609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 477d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotProxy} heapSnapshotProxy 47809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.HeapSnapshotView} 47909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 480a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) function profileCallback(heapSnapshotProxy) 481a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) { 482d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) heapSnapshotProxy.getStatistics(this._gotStatistics.bind(this)); 483a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) var list = this._profiles(); 484a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) var profileIndex = list.indexOf(this._profile); 485d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._baseSelect.setSelectedIndex(Math.max(0, profileIndex - 1)); 486d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._dataGrid.setDataSource(heapSnapshotProxy); 48709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (this._trackingOverviewGrid) 48809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._trackingOverviewGrid._updateGrid(); 489a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) } 490a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) }, 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 492d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 493d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotCommon.Statistics} statistics 494d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 4957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci _gotStatistics: function(statistics) 4967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 497d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._statisticsView.setTotal(statistics.total); 498d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._statisticsView.addRecord(statistics.code, WebInspector.UIString("Code"), "#f77"); 499d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._statisticsView.addRecord(statistics.strings, WebInspector.UIString("Strings"), "#5e5"); 500d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._statisticsView.addRecord(statistics.jsArrays, WebInspector.UIString("JS Arrays"), "#7af"); 501d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._statisticsView.addRecord(statistics.native, WebInspector.UIString("Typed Arrays"), "#fc5"); 502d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._statisticsView.addRecord(statistics.total, WebInspector.UIString("Total")); 503d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 504d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 50553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) _onIdsRangeChanged: function(event) 50653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 50753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var minId = event.data.minId; 50853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var maxId = event.data.maxId; 509d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._selectedSizeText.setText(WebInspector.UIString("Selected size: %s", Number.bytesToString(event.data.size))); 510d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (this._constructorsDataGrid.snapshot) 511d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._constructorsDataGrid.setSelectionRange(minId, maxId); 51253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 51353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get statusBarItems() 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 516d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var result = [this._perspectiveSelect.element, this._classNameFilter.element]; 51709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (this._profile.profileType() !== WebInspector.ProfileTypeRegistry.instance.trackingHeapSnapshotProfileType) 518d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) result.push(this._baseSelect.element, this._filterSelect.element); 519d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) result.push(this._selectedSizeText.element); 52009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return result; 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) wasShown: function() 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: load base and current snapshots in parallel 52609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._profile.load(profileCallback.bind(this)); 52709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 52809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 52909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.HeapSnapshotView} 53009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 53193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) function profileCallback() { 53209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._profile._wasShown(); 53309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (this._baseProfile) 53409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._baseProfile.load(function() { }); 5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) willHide: function() 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentSearchResultIndex = -1; 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._popoverHelper.hidePopover(); 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.helpPopover && this.helpPopover.isShowing()) 5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.helpPopover.hide(); 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) searchCanceled: function() 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._searchResults) { 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < this._searchResults.length; ++i) { 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var node = this._searchResults[i].node; 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete node._searchMatched; 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) node.refresh(); 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._searchFinishedCallback; 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentSearchResultIndex = -1; 5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchResults = []; 5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 561e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch /** 562e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * @param {string} query 563e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * @param {function(!WebInspector.View, number)} finishedCallback 564e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch */ 5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) performSearch: function(query, finishedCallback) 5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Call searchCanceled since it will reset everything we need before doing a new search. 5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.searchCanceled(); 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) query = query.trim(); 5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 572e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!query) 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 574d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!this._currentPerspective.supportsSearch()) 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 577a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) /** 578a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {boolean} found 57909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.HeapSnapshotView} 580a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) */ 581a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) function didHighlight(found) 582a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) { 583a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) finishedCallback(this, found ? 1 : 0); 584a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) } 585a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 58651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (query.charAt(0) === "@") { 58751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) var snapshotNodeId = parseInt(query.substring(1), 10); 588a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!isNaN(snapshotNodeId)) 589d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._dataGrid.highlightObjectByHeapSnapshotId(String(snapshotNodeId), didHighlight.bind(this)); 590a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) else 59151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) finishedCallback(this, 0); 59251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return; 59351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 59451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchFinishedCallback = finishedCallback; 596e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch var nameRegExp = createPlainTextSearchRegex(query, "i"); 5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function matchesByName(gridNode) { 599e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return ("_name" in gridNode) && nameRegExp.test(gridNode._name); 6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function matchesQuery(gridNode) 6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete gridNode._searchMatched; 60551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (matchesByName(gridNode)) { 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) gridNode._searchMatched = true; 6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) gridNode.refresh(); 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 613d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var current = this._dataGrid.rootNode().children[0]; 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var depth = 0; 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var info = {}; 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Restrict to type nodes and instances. 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const maxDepth = 1; 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (current) { 6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (matchesQuery(current)) 6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchResults.push({ node: current }); 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) current = current.traverseNextNode(false, null, (depth >= maxDepth), info); 6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) depth += info.depthChange; 6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) finishedCallback(this, this._searchResults.length); 6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jumpToFirstSearchResult: function() 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._searchResults || !this._searchResults.length) 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentSearchResultIndex = 0; 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._jumpToSearchResult(this._currentSearchResultIndex); 6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jumpToLastSearchResult: function() 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._searchResults || !this._searchResults.length) 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentSearchResultIndex = (this._searchResults.length - 1); 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._jumpToSearchResult(this._currentSearchResultIndex); 6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jumpToNextSearchResult: function() 6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._searchResults || !this._searchResults.length) 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (++this._currentSearchResultIndex >= this._searchResults.length) 6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentSearchResultIndex = 0; 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._jumpToSearchResult(this._currentSearchResultIndex); 6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jumpToPreviousSearchResult: function() 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this._searchResults || !this._searchResults.length) 6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (--this._currentSearchResultIndex < 0) 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._currentSearchResultIndex = (this._searchResults.length - 1); 6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._jumpToSearchResult(this._currentSearchResultIndex); 6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 66409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 66509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 66609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) showingFirstSearchResult: function() 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (this._currentSearchResultIndex === 0); 6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 67209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 67309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 67409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) showingLastSearchResult: function() 6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (this._searchResults && this._currentSearchResultIndex === (this._searchResults.length - 1)); 6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 68009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 68109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {number} 68209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 68351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) currentSearchResultIndex: function() { 68451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return this._currentSearchResultIndex; 68551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) }, 68651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _jumpToSearchResult: function(index) 6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var searchResult = this._searchResults[index]; 6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!searchResult) 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var node = searchResult.node; 6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) node.revealAndSelect(); 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) refreshVisibleData: function() 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 699d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!this._dataGrid) 700d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return; 701d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var child = this._dataGrid.rootNode().children[0]; 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (child) { 7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child.refresh(); 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child = child.traverseNextNode(false, null, true); 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _changeBase: function() 7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 710d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (this._baseProfile === this._profiles()[this._baseSelect.selectedIndex()]) 7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 713d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._baseProfile = this._profiles()[this._baseSelect.selectedIndex()]; 714d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var dataGrid = /** @type {!WebInspector.HeapSnapshotDiffDataGrid} */ (this._dataGrid); 7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Change set base data source only if main data source is already set. 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (dataGrid.snapshot) 71709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._baseProfile.load(dataGrid.setBaseDataSource.bind(dataGrid)); 7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.currentQuery || !this._searchFinishedCallback || !this._searchResults) 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The current search needs to be performed again. First negate out previous match 7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // count by calling the search finished callback with a negative number of matches. 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Then perform the search again with the same query and callback. 7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchFinishedCallback(this, -this._searchResults.length); 7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.performSearch(this.currentQuery, this._searchFinishedCallback); 7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _changeFilter: function() 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 73109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var profileIndex = this._filterSelect.selectedIndex() - 1; 732d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._dataGrid.filterSelectIndexChanged(this._profiles(), profileIndex); 733926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 734926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.notifications.dispatchEventToListeners(WebInspector.UserMetrics.UserAction, { 735926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) action: WebInspector.UserMetrics.UserActionNames.HeapSnapshotFilterChanged, 73609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) label: this._filterSelect.selectedOption().label 737926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }); 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.currentQuery || !this._searchFinishedCallback || !this._searchResults) 7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The current search needs to be performed again. First negate out previous match 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // count by calling the search finished callback with a negative number of matches. 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Then perform the search again with the same query and callback. 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchFinishedCallback(this, -this._searchResults.length); 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.performSearch(this.currentQuery, this._searchFinishedCallback); 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 74909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 750926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {!Array.<!WebInspector.ProfileHeader>} 751926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _profiles: function() 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 754a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return this._profile.profileType().getProfiles(); 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 758a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.ContextMenu} contextMenu 759197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Event} event 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) populateContextMenu: function(contextMenu, event) 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 763d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (this._dataGrid) 764d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._dataGrid.populateContextMenu(contextMenu, event); 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _selectionChanged: function(event) 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var selectedNode = event.target.selectedNode; 770a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._setSelectedNodeForDetailsView(selectedNode); 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._inspectedObjectChanged(event); 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 77443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) _onSelectAllocationNode: function(event) 77543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) { 77643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) var selectedNode = event.target.selectedNode; 77743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._constructorsDataGrid.setAllocationNodeId(selectedNode.allocationNodeId()); 778a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._setSelectedNodeForDetailsView(null); 77943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) }, 78043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _inspectedObjectChanged: function(event) 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var selectedNode = event.target.selectedNode; 784197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var target = this._profile.target(); 7857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (target && selectedNode instanceof WebInspector.HeapSnapshotGenericObjectNode) 786197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.consoleAgent().addInspectedHeapObject(selectedNode.snapshotNodeId); 7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 78907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch /** 79007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * @param {?WebInspector.HeapSnapshotGridNode} nodeItem 79107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch */ 792a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch _setSelectedNodeForDetailsView: function(nodeItem) 7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 79407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch var dataSource = nodeItem && nodeItem.retainersDataSource(); 795a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (dataSource) { 79607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch this._retainmentDataGrid.setDataSource(dataSource.snapshot, dataSource.snapshotNodeIndex); 797a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (this._allocationStackView) 798a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._allocationStackView.setAllocatedObject(dataSource.snapshot, dataSource.snapshotNodeIndex) 799a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } else { 800a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (this._allocationStackView) 801a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._allocationStackView.clear(); 802d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._retainmentDataGrid.reset(); 803a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 806d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 807d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {string} perspectiveTitle 808d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {function()} callback 809d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 810d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) _changePerspectiveAndWait: function(perspectiveTitle, callback) 8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 812d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var perspectiveIndex = null; 813d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) for (var i = 0; i < this._perspectives.length; ++i) { 814d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (this._perspectives[i].title() === perspectiveTitle) { 815d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) perspectiveIndex = i; 8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 81853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 819d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (this._currentPerspectiveIndex === perspectiveIndex || perspectiveIndex === null) { 8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setTimeout(callback, 0); 8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 82409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 82509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.HeapSnapshotView} 82609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function dataGridContentShown(event) 8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var dataGrid = event.data; 8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dataGrid.removeEventListener(WebInspector.HeapSnapshotSortableDataGrid.Events.ContentShown, dataGridContentShown, this); 831d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (dataGrid === this._dataGrid) 8325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) callback(); 8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 834d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._perspectives[perspectiveIndex].masterGrid(this).addEventListener(WebInspector.HeapSnapshotSortableDataGrid.Events.ContentShown, dataGridContentShown, this); 8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 836d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._perspectiveSelect.setSelectedIndex(perspectiveIndex); 837d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._changePerspective(perspectiveIndex); 8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _updateDataSourceAndView: function() 8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 842d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var dataGrid = this._dataGrid; 843d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!dataGrid || dataGrid.snapshot) 8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 84609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._profile.load(didLoadSnapshot.bind(this)); 84709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 84809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 84909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.HeapSnapshotView} 85009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function didLoadSnapshot(snapshotProxy) 8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 853d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (this._dataGrid !== dataGrid) 8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (dataGrid.snapshot !== snapshotProxy) 856926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) dataGrid.setDataSource(snapshotProxy); 857d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (dataGrid === this._diffDataGrid) { 85809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!this._baseProfile) 859d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._baseProfile = this._profiles()[this._baseSelect.selectedIndex()]; 86009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._baseProfile.load(didLoadBaseSnaphot.bind(this)); 8615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 86409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 86509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.HeapSnapshotView} 86609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function didLoadBaseSnaphot(baseSnapshotProxy) 8685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 869d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (this._diffDataGrid.baseSnapshot !== baseSnapshotProxy) 870d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._diffDataGrid.setBaseDataSource(baseSnapshotProxy); 8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 874d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) _onSelectedPerspectiveChanged: function(event) 8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 876d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._changePerspective(event.target.selectedIndex); 87707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // FIXME: This is needed by CodeSchool extension. 87807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch this._onSelectedViewChanged(event); 87907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch }, 88007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 88107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch _onSelectedViewChanged: function(event) 88207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch { 8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 8845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 8867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {number} selectedIndex 8877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 888d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) _changePerspective: function(selectedIndex) 8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 890d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (selectedIndex === this._currentPerspectiveIndex) 891d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return; 8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 893d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._currentPerspectiveIndex = selectedIndex; 8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 895d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._currentPerspective.deactivate(this); 896d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var perspective = this._perspectives[selectedIndex]; 897d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._currentPerspective = perspective; 898d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._dataGrid = perspective.masterGrid(this); 89907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch perspective.activate(this); 9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 901d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this.refreshVisibleData(); 902a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (this._dataGrid) 903d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._dataGrid.updateWidths(); 9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._updateDataSourceAndView(); 9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!this.currentQuery || !this._searchFinishedCallback || !this._searchResults) 9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The current search needs to be performed again. First negate out previous match 9115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // count by calling the search finished callback with a negative number of matches. 9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Then perform the search again the with same query and callback. 9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._searchFinishedCallback(this, -this._searchResults.length); 9145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.performSearch(this.currentQuery, this._searchFinishedCallback); 9155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 917d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 918d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {string} perspectiveName 9197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!HeapProfilerAgent.HeapSnapshotObjectId} snapshotObjectId 920d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 921d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) highlightLiveObject: function(perspectiveName, snapshotObjectId) 922d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 92343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._changePerspectiveAndWait(perspectiveName, didChangePerspective.bind(this)); 92443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 925d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 926d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @this {WebInspector.HeapSnapshotView} 927d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 928d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) function didChangePerspective() 929d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 93043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) this._dataGrid.highlightObjectByHeapSnapshotId(snapshotObjectId, didHighlightObject); 93143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) } 93243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 93343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) function didHighlightObject(found) 93443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) { 93543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (!found) 936197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.console.error("Cannot find corresponding heap snapshot node"); 937d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 938d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 939d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _getHoverAnchor: function(target) 9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var span = target.enclosingNodeOrSelfWithNodeName("span"); 9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!span) 9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var row = target.enclosingNodeOrSelfWithNodeName("tr"); 9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!row) 9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 9485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) span.node = row._dataGridNode; 9495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return span; 9505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 9515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _resolveObjectForPopover: function(element, showCallback, objectGroupName) 9535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 954197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!this._profile.target()) 9555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 956197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch element.node.queryObjectContent(this._profile.target(), showCallback, objectGroupName); 9575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _updateBaseOptions: function() 9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var list = this._profiles(); 9625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We're assuming that snapshots can only be added. 963d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (this._baseSelect.size() === list.length) 9645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 966d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) for (var i = this._baseSelect.size(), n = list.length; i < n; ++i) { 9675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var title = list[i].title; 968d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._baseSelect.createOption(title); 9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 9715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _updateFilterOptions: function() 9735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var list = this._profiles(); 9755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We're assuming that snapshots can only be added. 97609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (this._filterSelect.size() - 1 === list.length) 9775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 9785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 97909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!this._filterSelect.size()) 98009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._filterSelect.createOption(WebInspector.UIString("All objects")); 9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 98209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (var i = this._filterSelect.size() - 1, n = list.length; i < n; ++i) { 9835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var title = list[i].title; 98406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) if (!i) 98506f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) title = WebInspector.UIString("Objects allocated before %s", title); 98606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) else 98706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) title = WebInspector.UIString("Objects allocated between %s and %s", list[i - 1].title, title); 98809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._filterSelect.createOption(title); 9895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 9915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 99209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) _updateControls: function() 99309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 99409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._updateBaseOptions(); 99509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._updateFilterOptions(); 99609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) }, 99709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 998926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 999a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Event} event 1000926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 100107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch _onReceiveSnapshot: function(event) 1002926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 100309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._updateControls(); 100409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) }, 100509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 100609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 100709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!WebInspector.Event} event 100809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 100909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) _onProfileHeaderRemoved: function(event) 101009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 101109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var profile = event.data; 101209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (this._profile === profile) { 101309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.detach(); 101407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch this._profile.profileType().removeEventListener(WebInspector.HeapSnapshotProfileType.SnapshotReceived, this._onReceiveSnapshot, this); 101509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._profile.profileType().removeEventListener(WebInspector.ProfileType.Events.RemoveProfileHeader, this._onProfileHeaderRemoved, this); 1016a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this.dispose(); 101709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } else { 101809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._updateControls(); 101909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 1020926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 1021926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1022a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch dispose: function() 1023a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch { 1024a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (this._allocationStackView) { 1025a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._allocationStackView.clear(); 1026a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._allocationDataGrid.dispose(); 1027a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } 1028a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch }, 1029a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 1030d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) __proto__: WebInspector.VBox.prototype 10315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 103393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)/** 103493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * @constructor 1035197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @extends {WebInspector.ProfileType} 1036197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @implements {WebInspector.TargetManager.Observer} 1037197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {string=} id 1038197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {string=} title 103993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) */ 1040197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.HeapSnapshotProfileType = function(id, title) 104193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 1042197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.ProfileType.call(this, id || WebInspector.HeapSnapshotProfileType.TypeId, title || WebInspector.UIString("Take Heap Snapshot")); 1043197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.targetManager.observeTargets(this); 1044c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) WebInspector.targetManager.addModelListener(WebInspector.HeapProfilerModel, WebInspector.HeapProfilerModel.Events.ResetProfiles, this._resetProfiles, this); 1045c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) WebInspector.targetManager.addModelListener(WebInspector.HeapProfilerModel, WebInspector.HeapProfilerModel.Events.AddHeapSnapshotChunk, this._addHeapSnapshotChunk, this); 1046c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) WebInspector.targetManager.addModelListener(WebInspector.HeapProfilerModel, WebInspector.HeapProfilerModel.Events.ReportHeapSnapshotProgress, this._reportHeapSnapshotProgress, this); 104793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 104893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 1049197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.HeapSnapshotProfileType.TypeId = "HEAP"; 1050197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.HeapSnapshotProfileType.SnapshotReceived = "SnapshotReceived"; 105193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 1052197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.HeapSnapshotProfileType.prototype = { 105393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) /** 1054197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.Target} target 105593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) */ 1056197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch targetAdded: function(target) 105793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 1058197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.heapProfilerModel.enable(); 105993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }, 106093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 106193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) /** 1062197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.Target} target 106393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) */ 1064197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch targetRemoved: function(target) 106593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 106693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }, 106793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 106893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) /** 106993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * @override 107053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @return {string} 107153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */ 107253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) fileExtension: function() 107353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 107453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return ".heapsnapshot"; 107553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 107653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 10775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get buttonTooltip() 10785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 10795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebInspector.UIString("Take heap snapshot."); 10805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 10815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 10835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @override 10845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {boolean} 10855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1086926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) isInstantProfile: function() 10875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1088926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return true; 1089926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 1090926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1091926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 1092926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @override 1093926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {boolean} 1094926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 1095926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) buttonClicked: function() 1096926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 1097591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch this._takeHeapSnapshot(function() {}); 1098591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebInspector.userMetrics.ProfilesHeapProfileTaken.record(); 10995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 11005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 11015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1102521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) get treeItemTitle() 11035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 11045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebInspector.UIString("HEAP SNAPSHOTS"); 11055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 11065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get description() 11085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 11095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebInspector.UIString("Heap snapshot profiles show memory distribution among your page's JavaScript objects and related DOM nodes."); 11105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 11115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 11135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @override 11145d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {string} title 1115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {!WebInspector.ProfileHeader} 11165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1117a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) createProfileLoadedFromFile: function(title) 11185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1119197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return new WebInspector.HeapProfileHeader(null, this, title); 11205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 11215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1122591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _takeHeapSnapshot: function(callback) 1123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 1124a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (this.profileBeingRecorded()) 1125a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return; 1126197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var target = /** @type {!WebInspector.Target} */ (WebInspector.context.flavor(WebInspector.Target)); 1127323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) var profile = new WebInspector.HeapProfileHeader(target, this); 1128323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) this.setProfileBeingRecorded(profile); 1129323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) this.addProfile(profile); 1130323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) profile.updateStatus(WebInspector.UIString("Snapshotting\u2026")); 1131a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 113209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 113309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {?string} error 113409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.HeapSnapshotProfileType} 113509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 113609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) function didTakeHeapSnapshot(error) 113709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 113809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var profile = this._profileBeingRecorded; 113909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) profile.title = WebInspector.UIString("Snapshot %d", profile.uid); 114009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) profile._finishLoad(); 1141323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) this.setProfileBeingRecorded(null); 1142323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.ProfileType.Events.ProfileComplete, profile); 114309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) callback(); 114409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 1145197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.heapProfilerAgent().takeHeapSnapshot(true, didTakeHeapSnapshot.bind(this)); 1146926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 1147926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1148926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 1149197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.Event} event 1150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 1151197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _addHeapSnapshotChunk: function(event) 1152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 115309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!this.profileBeingRecorded()) 115409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 1155197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var chunk = /** @type {string} */(event.data); 115609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.profileBeingRecorded().transferChunk(chunk); 1157926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 1158926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1159926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 1160197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.Event} event 1161926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 1162197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _reportHeapSnapshotProgress: function(event) 1163926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 1164a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) var profile = this.profileBeingRecorded(); 1165a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!profile) 1166a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return; 1167197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var data = /** @type {{done: number, total: number, finished: boolean}} */ (event.data); 1168197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch profile.updateStatus(WebInspector.UIString("%.0f%", (data.done / data.total) * 100), true); 1169197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (data.finished) 117009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) profile._prepareToLoad(); 1171926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 1172926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1173197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _resetProfiles: function() 1174926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 1175926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._reset(); 1176926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 1177926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 117893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) _snapshotReceived: function(profile) 117993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 1180a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (this._profileBeingRecorded === profile) 1181323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) this.setProfileBeingRecorded(null); 118293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.HeapSnapshotProfileType.SnapshotReceived, profile); 118393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }, 118493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 11855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) __proto__: WebInspector.ProfileType.prototype 11865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 118853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 118953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)/** 119053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @constructor 119193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * @extends {WebInspector.HeapSnapshotProfileType} 119253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */ 119309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.TrackingHeapSnapshotProfileType = function() 119453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 119509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WebInspector.HeapSnapshotProfileType.call(this, WebInspector.TrackingHeapSnapshotProfileType.TypeId, WebInspector.UIString("Record Heap Allocations")); 119653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 119753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 119853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebInspector.TrackingHeapSnapshotProfileType.TypeId = "HEAP-RECORD"; 119953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 120093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)WebInspector.TrackingHeapSnapshotProfileType.HeapStatsUpdate = "HeapStatsUpdate"; 120193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)WebInspector.TrackingHeapSnapshotProfileType.TrackingStarted = "TrackingStarted"; 120293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)WebInspector.TrackingHeapSnapshotProfileType.TrackingStopped = "TrackingStopped"; 120393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 120453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebInspector.TrackingHeapSnapshotProfileType.prototype = { 120593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 120693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) /** 1207197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.Target} target 120893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) */ 1209197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch targetAdded: function(target) 1210197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 1211197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.HeapSnapshotProfileType.prototype.targetAdded.call(this, target); 1212197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.heapProfilerModel.addEventListener(WebInspector.HeapProfilerModel.Events.HeapStatsUpdate, this._heapStatsUpdate, this); 1213197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.heapProfilerModel.addEventListener(WebInspector.HeapProfilerModel.Events.LastSeenObjectId, this._lastSeenObjectId, this); 1214197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 1215197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 1216197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 1217197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.Target} target 1218197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 1219197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch targetRemoved: function(target) 1220197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 1221197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.HeapSnapshotProfileType.prototype.targetRemoved.call(this, target); 1222197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.heapProfilerModel.removeEventListener(WebInspector.HeapProfilerModel.Events.HeapStatsUpdate, this._heapStatsUpdate, this); 1223197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch target.heapProfilerModel.removeEventListener(WebInspector.HeapProfilerModel.Events.LastSeenObjectId, this._lastSeenObjectId, this); 1224197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 1225197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 1226197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 1227197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.Event} event 1228197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 1229197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _heapStatsUpdate: function(event) 123093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 123193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (!this._profileSamples) 123293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 1233197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var samples = /** @type {!Array.<number>} */ (event.data); 123493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var index; 123593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) for (var i = 0; i < samples.length; i += 3) { 123693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) index = samples[i]; 123793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var count = samples[i+1]; 123893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var size = samples[i+2]; 123993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._profileSamples.sizes[index] = size; 1240d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!this._profileSamples.max[index]) 124193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._profileSamples.max[index] = size; 124293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 124393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }, 124493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 124593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) /** 1246197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.Event} event 124793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) */ 1248197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _lastSeenObjectId: function(event) 124993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 125093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var profileSamples = this._profileSamples; 125193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (!profileSamples) 125293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 1253197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var data = /** @type {{lastSeenObjectId: number, timestamp: number}} */ (event.data); 1254521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) var currentIndex = Math.max(profileSamples.ids.length, profileSamples.max.length - 1); 1255197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch profileSamples.ids[currentIndex] = data.lastSeenObjectId; 125693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (!profileSamples.max[currentIndex]) { 125793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) profileSamples.max[currentIndex] = 0; 125893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) profileSamples.sizes[currentIndex] = 0; 125993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 1260197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch profileSamples.timestamps[currentIndex] = data.timestamp; 1261197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (profileSamples.totalTime < data.timestamp - profileSamples.timestamps[0]) 126293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) profileSamples.totalTime *= 2; 126393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.TrackingHeapSnapshotProfileType.HeapStatsUpdate, this._profileSamples); 126409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._profileBeingRecorded.updateStatus(null, true); 126593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }, 126693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 126793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) /** 126893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * @override 126993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * @return {boolean} 127093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) */ 127193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) hasTemporaryView: function() 127293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 127393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return true; 127493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }, 127593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 127653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) get buttonTooltip() 127753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 127853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return this._recording ? WebInspector.UIString("Stop recording heap profile.") : WebInspector.UIString("Start recording heap profile."); 127953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 128053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 128153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) /** 128253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @override 128353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @return {boolean} 128453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */ 128553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) isInstantProfile: function() 128653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 128753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return false; 128853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 128953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 129053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) /** 129153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @override 129253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @return {boolean} 129353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */ 129453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) buttonClicked: function() 129553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 129693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return this._toggleRecording(); 129793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }, 129893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 129993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) _startRecordingProfile: function() 130093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 1301a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (this.profileBeingRecorded()) 1302a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return; 1303197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var recordAllocationStacks = WebInspector.settings.recordAllocationStacks.get(); 1304197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._addNewProfile(recordAllocationStacks); 1305197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this.profileBeingRecorded().target().heapProfilerAgent().startTrackingHeapObjects(recordAllocationStacks); 1306d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 1307d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 1308197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 1309197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {boolean} withAllocationStacks 1310197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 1311197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _addNewProfile: function(withAllocationStacks) 1312d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 1313197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var target = WebInspector.context.flavor(WebInspector.Target); 1314197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this.setProfileBeingRecorded(new WebInspector.HeapProfileHeader(target, this, undefined, withAllocationStacks)); 131593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._lastSeenIndex = -1; 131693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._profileSamples = { 131793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 'sizes': [], 131893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 'ids': [], 131993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 'timestamps': [], 132093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 'max': [], 132193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 'totalTime': 30000 132293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }; 1323a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._profileBeingRecorded._profileSamples = this._profileSamples; 132493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._recording = true; 1325a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this.addProfile(this._profileBeingRecorded); 132609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._profileBeingRecorded.updateStatus(WebInspector.UIString("Recording\u2026")); 132793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.TrackingHeapSnapshotProfileType.TrackingStarted); 132893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }, 132993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 133093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) _stopRecordingProfile: function() 133193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 1332d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._profileBeingRecorded.updateStatus(WebInspector.UIString("Snapshotting\u2026")); 133309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 133409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {?string} error 133509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.HeapSnapshotProfileType} 133609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 133709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) function didTakeHeapSnapshot(error) 133809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 1339197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var profile = this.profileBeingRecorded(); 1340d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!profile) 1341d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return; 134209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) profile._finishLoad(); 134309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._profileSamples = null; 1344323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) this.setProfileBeingRecorded(null); 1345323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.ProfileType.Events.ProfileComplete, profile); 134609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 134709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 1348197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._profileBeingRecorded.target().heapProfilerAgent().stopTrackingHeapObjects(true, didTakeHeapSnapshot.bind(this)); 134993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._recording = false; 135093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.TrackingHeapSnapshotProfileType.TrackingStopped); 135193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }, 135293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 135393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) _toggleRecording: function() 135493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 135593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (this._recording) 135693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._stopRecordingProfile(); 135793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) else 135893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._startRecordingProfile(); 135993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return this._recording; 136053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 136153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 136253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) get treeItemTitle() 136353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 1364521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return WebInspector.UIString("HEAP TIMELINES"); 136553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 136653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 136753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) get description() 136853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 1369521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return WebInspector.UIString("Record JavaScript object allocations over time. Use this profile type to isolate memory leaks."); 1370521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) }, 1371521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 1372d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 1373d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @override 1374d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 1375d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) resetProfiles: function() 1376521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) { 1377d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var wasRecording = this._recording; 1378197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var recordingAllocationStacks = wasRecording && this.profileBeingRecorded()._hasAllocationStacks; 1379d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // Clear current profile to avoid stopping backend. 1380323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) this.setProfileBeingRecorded(null); 1381d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.HeapSnapshotProfileType.prototype.resetProfiles.call(this); 1382521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) this._profileSamples = null; 1383521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) this._lastSeenIndex = -1; 1384d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (wasRecording) 1385197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._addNewProfile(recordingAllocationStacks); 138653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 138753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 138809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 138909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @override 139009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 139109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) profileBeingRecordedRemoved: function() 139209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 139309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._stopRecordingProfile(); 139409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._profileSamples = null; 139509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) }, 139609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 139793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) __proto__: WebInspector.HeapSnapshotProfileType.prototype 139853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 139953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 14005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 14015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 14025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.ProfileHeader} 1403197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {?WebInspector.Target} target 140409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!WebInspector.HeapSnapshotProfileType} type 140509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {string=} title 1406197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {boolean=} hasAllocationStacks 14075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1408197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.HeapProfileHeader = function(target, type, title, hasAllocationStacks) 14095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1410197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.ProfileHeader.call(this, target, type, title || WebInspector.UIString("Snapshot %d", type.nextProfileUid())); 1411197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._hasAllocationStacks = !!hasAllocationStacks; 141209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.maxJSObjectId = -1; 141309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 141409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @type {?WebInspector.HeapSnapshotWorkerProxy} 141509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 141609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._workerProxy = null; 14175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1418a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @type {?WebInspector.OutputStream} 14195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 14205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._receiver = null; 14215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1422a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @type {?WebInspector.HeapSnapshotProxy} 14235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 14245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._snapshotProxy = null; 142509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 142609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @type {?Array.<function(!WebInspector.HeapSnapshotProxy)>} 142709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 142809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._loadCallbacks = []; 14295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._totalNumberOfChunks = 0; 143009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._bufferedWriter = null; 14315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.HeapProfileHeader.prototype = { 14345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 14355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @override 1436323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate 143709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {!WebInspector.ProfileSidebarTreeElement} 14385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1439323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) createSidebarTreeElement: function(dataDisplayDelegate) 14405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1441323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return new WebInspector.ProfileSidebarTreeElement(dataDisplayDelegate, this, "heap-snapshot-sidebar-tree-item"); 14425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 14435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 14455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @override 1446323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate 144709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {!WebInspector.HeapSnapshotView} 14485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1449323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) createView: function(dataDisplayDelegate) 14505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1451323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return new WebInspector.HeapSnapshotView(dataDisplayDelegate, this); 14525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 14535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 14555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @override 1456a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!WebInspector.HeapSnapshotProxy):void} callback 14575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 14585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) load: function(callback) 14595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 146093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (this.uid === -1) 146193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 14625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._snapshotProxy) { 14635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) callback(this._snapshotProxy); 14645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 14655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 146609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._loadCallbacks.push(callback); 14675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 14685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 146909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) _prepareToLoad: function() 1470926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 147109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) console.assert(!this._receiver, "Already loading"); 147209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._setupWorker(); 147309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.updateStatus(WebInspector.UIString("Loading\u2026"), true); 1474926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 1475926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 147609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) _finishLoad: function() 1477926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 1478d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!this._wasDisposed) 14797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._receiver.close(); 148009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (this._bufferedWriter) { 14817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._bufferedWriter.finishWriting(this._didWriteToTempFile.bind(this)); 148209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._bufferedWriter = null; 148309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 1484926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 1485926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 148609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) _didWriteToTempFile: function(tempFile) 1487926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 1488d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (this._wasDisposed) { 1489d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (tempFile) 1490d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) tempFile.remove(); 1491d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return; 1492d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 149309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._tempFile = tempFile; 149409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!tempFile) 149509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._failedToCreateTempFile = true; 149609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (this._onTempFileReady) { 149709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._onTempFileReady(); 149809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._onTempFileReady = null; 149909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 1500926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 1501926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 15025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _setupWorker: function() 15035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 150409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 150509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.HeapProfileHeader} 150609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 15075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function setProfileWait(event) 15085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 150909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.updateStatus(null, event.data); 15105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 151109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) console.assert(!this._workerProxy, "HeapSnapshotWorkerProxy already exists"); 151209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._workerProxy = new WebInspector.HeapSnapshotWorkerProxy(this._handleWorkerEvent.bind(this)); 151309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._workerProxy.addEventListener("wait", setProfileWait, this); 151409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._receiver = this._workerProxy.createLoader(this.uid, this._snapshotReceived.bind(this)); 15155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 15165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1517926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 1518a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {string} eventName 1519a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {*} data 15208abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) */ 15218abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) _handleWorkerEvent: function(eventName, data) 15228abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) { 152309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (WebInspector.HeapSnapshotProgressEvent.Update !== eventName) 15248abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return; 152509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var subtitle = /** @type {string} */ (data); 152609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.updateStatus(subtitle); 15278abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) }, 15288abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 15298abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) /** 1530926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @override 1531926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 15325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dispose: function() 15335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 153409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (this._workerProxy) 153509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._workerProxy.dispose(); 153609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.removeTempFile(); 153709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._wasDisposed = true; 15385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 15395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15408abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) _didCompleteSnapshotTransfer: function() 15415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 154209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!this._snapshotProxy) 154309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 154409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.updateStatus(Number.bytesToString(this._snapshotProxy.totalSize), false); 15455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 15465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 15485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} chunk 15495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 15505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) transferChunk: function(chunk) 15515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 155209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!this._bufferedWriter) 15537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._bufferedWriter = new WebInspector.DeferredTempFile("heap-profiler", String(this.uid)); 15547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._bufferedWriter.write([chunk]); 155509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 155609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ++this._totalNumberOfChunks; 155709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._receiver.write(chunk, function() {}); 15585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 15595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _snapshotReceived: function(snapshotProxy) 15615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 156209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (this._wasDisposed) 156309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 15645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._receiver = null; 156509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._snapshotProxy = snapshotProxy; 156609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.maxJSObjectId = snapshotProxy.maxJSObjectId(); 15678abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) this._didCompleteSnapshotTransfer(); 156809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._workerProxy.startCheckingForLongRunningCalls(); 1569e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch this.notifySnapshotReceived(); 1570e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch }, 1571e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1572e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch notifySnapshotReceived: function() 1573e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch { 157409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (var i = 0; i < this._loadCallbacks.length; i++) 15757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._loadCallbacks[i](/** @type {!WebInspector.HeapSnapshotProxy} */ (this._snapshotProxy)); 157609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._loadCallbacks = null; 157793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._profileType._snapshotReceived(this); 157809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (this.canSaveToFile()) 157909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.ProfileHeader.Events.ProfileReceived); 15805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 15815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1582591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch // Hook point for tests. 1583591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch _wasShown: function() 1584591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 1585591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch }, 1586591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 15875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 15885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @override 15895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {boolean} 15905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 15915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) canSaveToFile: function() 15925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 15937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return !this.fromFile() && !!this._snapshotProxy; 15945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 15955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 15975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @override 15985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 15995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) saveToFile: function() 16005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1601926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var fileOutputStream = new WebInspector.FileOutputStream(); 1602a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 1603a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) /** 1604a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {boolean} accepted 160509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.HeapProfileHeader} 1606a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) */ 1607a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) function onOpen(accepted) 16085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1609a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!accepted) 1610a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return; 161109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (this._failedToCreateTempFile) { 1612197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.console.error("Failed to open temp file with heap snapshot"); 161309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) fileOutputStream.close(); 161409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } else if (this._tempFile) { 161509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var delegate = new WebInspector.SaveSnapshotOutputStreamDelegate(this); 161609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._tempFile.writeToOutputSteam(fileOutputStream, delegate); 161709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } else { 161809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._onTempFileReady = onOpen.bind(this, accepted); 161909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._updateSaveProgress(0, 1); 162009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 16215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 162253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._fileName = this._fileName || "Heap-" + new Date().toISO8601Compact() + this._profileType.fileExtension(); 1623926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) fileOutputStream.open(this._fileName, onOpen.bind(this)); 16245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 16255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 162609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) _updateSaveProgress: function(value, total) 162709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 162809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var percentValue = ((total ? (value / total) : 0) * 100).toFixed(0); 162909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.updateStatus(WebInspector.UIString("Saving\u2026 %d\%", percentValue)); 163009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) }, 163109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 16325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 16335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @override 1634a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!File} file 16355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 16365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) loadFromFile: function(file) 16375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 163809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.updateStatus(WebInspector.UIString("Loading\u2026"), true); 16395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._setupWorker(); 16405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var delegate = new WebInspector.HeapSnapshotLoadFromFileDelegate(this); 16415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var fileReader = this._createFileReader(file, delegate); 16425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) fileReader.start(this._receiver); 16435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 16445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _createFileReader: function(file, delegate) 16465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 16475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new WebInspector.ChunkedFileReader(file, 10000000, delegate); 16485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 16495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) __proto__: WebInspector.ProfileHeader.prototype 16515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16538abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)/** 16548abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * @constructor 165509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @implements {WebInspector.OutputStreamDelegate} 16568abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) */ 165709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.HeapSnapshotLoadFromFileDelegate = function(snapshotHeader) 16588abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){ 165909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._snapshotHeader = snapshotHeader; 16608abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)} 16618abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 166209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.HeapSnapshotLoadFromFileDelegate.prototype = { 166309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) onTransferStarted: function() 16648abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) { 16658abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) }, 16668abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 166709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 166809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!WebInspector.ChunkedReader} reader 166909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 167009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) onChunkTransferred: function(reader) 16718abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) { 16728abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) }, 16738abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 167409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) onTransferFinished: function() 16758abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) { 16768abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) }, 16778abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 167809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 167909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!WebInspector.ChunkedReader} reader 1680197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Event} e 168109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 168209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) onError: function (reader, e) 16838abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) { 168409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var subtitle; 168509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) switch(e.target.error.code) { 168609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case e.target.error.NOT_FOUND_ERR: 168709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) subtitle = WebInspector.UIString("'%s' not found.", reader.fileName()); 168809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 168909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case e.target.error.NOT_READABLE_ERR: 169009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) subtitle = WebInspector.UIString("'%s' is not readable", reader.fileName()); 169109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 169209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case e.target.error.ABORT_ERR: 169309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 169409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) default: 169509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) subtitle = WebInspector.UIString("'%s' error %d", reader.fileName(), e.target.error.code); 16968abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) } 169709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._snapshotHeader.updateStatus(subtitle); 169809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 16998abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)} 17008abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 17018abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)/** 17028abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) * @constructor 170309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @implements {WebInspector.OutputStreamDelegate} 170409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {!WebInspector.HeapProfileHeader} profileHeader 17058abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) */ 170609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.SaveSnapshotOutputStreamDelegate = function(profileHeader) 17078abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){ 170809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._profileHeader = profileHeader; 17098abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)} 17108abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 171109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.SaveSnapshotOutputStreamDelegate.prototype = { 171209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) onTransferStarted: function() 17138abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) { 171409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._profileHeader._updateSaveProgress(0, 1); 17158abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) }, 17168abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 171709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) onTransferFinished: function() 17185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 171909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._profileHeader._didCompleteSnapshotTransfer(); 17205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 17215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1723a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.ChunkedReader} reader 17245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 17255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) onChunkTransferred: function(reader) 17265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 172709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._profileHeader._updateSaveProgress(reader.loadedSize(), reader.fileSize()); 17285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 17295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1731a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.ChunkedReader} reader 1732197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Event} event 17335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 173409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) onError: function(reader, event) 17355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1736197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.console.error("Failed to read heap snapshot from temp file: " + /** @type {!ErrorEvent} */ (event).message); 173709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.onTransferFinished(); 17385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 174053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 174153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)/** 174253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @constructor 1743d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.VBox} 174453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {!WebInspector.HeapProfileHeader} heapProfileHeader 174553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */ 174653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebInspector.HeapTrackingOverviewGrid = function(heapProfileHeader) 174753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 1748d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.VBox.call(this); 174953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this.registerRequiredCSS("flameChart.css"); 175053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this.element.id = "heap-recording-view"; 175109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this.element.classList.add("heap-tracking-overview"); 175253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 175353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._overviewContainer = this.element.createChild("div", "overview-container"); 175453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._overviewGrid = new WebInspector.OverviewGrid("heap-recording"); 1755a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._overviewGrid.element.classList.add("fill"); 175651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 175753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._overviewCanvas = this._overviewContainer.createChild("canvas", "heap-recording-overview-canvas"); 175853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._overviewContainer.appendChild(this._overviewGrid.element); 175953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._overviewCalculator = new WebInspector.HeapTrackingOverviewGrid.OverviewCalculator(); 176053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._overviewGrid.addEventListener(WebInspector.OverviewGrid.Events.WindowChanged, this._onWindowChanged, this); 176153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1762a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) this._profileSamples = heapProfileHeader._profileSamples; 1763a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (heapProfileHeader.profileType().profileBeingRecorded() === heapProfileHeader) { 1764197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._profileType = heapProfileHeader.profileType(); 176593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._profileType.addEventListener(WebInspector.TrackingHeapSnapshotProfileType.HeapStatsUpdate, this._onHeapStatsUpdate, this); 176693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._profileType.addEventListener(WebInspector.TrackingHeapSnapshotProfileType.TrackingStopped, this._onStopTracking, this); 176793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 176853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var timestamps = this._profileSamples.timestamps; 176993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var totalTime = this._profileSamples.totalTime; 177053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._windowLeft = 0.0; 177193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._windowRight = totalTime && timestamps.length ? (timestamps[timestamps.length - 1] - timestamps[0]) / totalTime : 1.0; 177293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._overviewGrid.setWindow(this._windowLeft, this._windowRight); 1773521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) this._yScale = new WebInspector.HeapTrackingOverviewGrid.SmoothScale(); 1774521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) this._xScale = new WebInspector.HeapTrackingOverviewGrid.SmoothScale(); 177553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 177653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 177753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebInspector.HeapTrackingOverviewGrid.IdsRangeChanged = "IdsRangeChanged"; 177853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 177953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebInspector.HeapTrackingOverviewGrid.prototype = { 178093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) _onStopTracking: function(event) 178193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 178293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._profileType.removeEventListener(WebInspector.TrackingHeapSnapshotProfileType.HeapStatsUpdate, this._onHeapStatsUpdate, this); 178393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._profileType.removeEventListener(WebInspector.TrackingHeapSnapshotProfileType.TrackingStopped, this._onStopTracking, this); 178493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }, 178593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 178693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) _onHeapStatsUpdate: function(event) 178793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 178893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._profileSamples = event.data; 178993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._scheduleUpdate(); 179093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) }, 179193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 179293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) /** 179353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {number} width 179453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {number} height 179553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */ 179653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) _drawOverviewCanvas: function(width, height) 179753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 179893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (!this._profileSamples) 179993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return; 180093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var profileSamples = this._profileSamples; 180193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var sizes = profileSamples.sizes; 18025267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) var topSizes = profileSamples.max; 180393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var timestamps = profileSamples.timestamps; 18045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) var startTime = timestamps[0]; 18055267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) var endTime = timestamps[timestamps.length - 1]; 180653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1807521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) var scaleFactor = this._xScale.nextScale(width / profileSamples.totalTime); 18085267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) var maxSize = 0; 180953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) /** 1810a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<number>} sizes 181153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {function(number, number):void} callback 181253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */ 181353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) function aggregateAndCall(sizes, callback) 181453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 181553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var size = 0; 181653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var currentX = 0; 181753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) for (var i = 1; i < timestamps.length; ++i) { 18185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) var x = Math.floor((timestamps[i] - startTime) * scaleFactor); 181953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (x !== currentX) { 182053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (size) 182153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) callback(currentX, size); 182253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) size = 0; 182353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) currentX = x; 182453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 182553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) size += sizes[i]; 182653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 182753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) callback(currentX, size); 182853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 182953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 183053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) /** 183153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {number} x 183253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {number} size 183353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */ 18345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) function maxSizeCallback(x, size) 183553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 18365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) maxSize = Math.max(maxSize, size); 183753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 183853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 18395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) aggregateAndCall(sizes, maxSizeCallback); 184053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1841521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) var yScaleFactor = this._yScale.nextScale(maxSize ? height / (maxSize * 1.1) : 0.0); 1842521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 184353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._overviewCanvas.width = width * window.devicePixelRatio; 184453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._overviewCanvas.height = height * window.devicePixelRatio; 184553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._overviewCanvas.style.width = width + "px"; 184653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._overviewCanvas.style.height = height + "px"; 18475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 184853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var context = this._overviewCanvas.getContext("2d"); 184953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) context.scale(window.devicePixelRatio, window.devicePixelRatio); 185053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 185193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.beginPath(); 185293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.lineWidth = 2; 185393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.strokeStyle = "rgba(192, 192, 192, 0.6)"; 1854521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) var currentX = (endTime - startTime) * scaleFactor; 185593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.moveTo(currentX, height - 1); 185693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.lineTo(currentX, 0); 185793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.stroke(); 185893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.closePath(); 185993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 186093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var gridY; 186193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var gridValue; 186293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var gridLabelHeight = 14; 1863521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) if (yScaleFactor) { 186493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) const maxGridValue = (height - gridLabelHeight) / yScaleFactor; 186593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // The round value calculation is a bit tricky, because 18665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // it has a form k*10^n*1024^m, where k=[1,5], n=[0..3], m is an integer, 18675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // e.g. a round value 10KB is 10240 bytes. 186893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) gridValue = Math.pow(1024, Math.floor(Math.log(maxGridValue) / Math.log(1024))); 18691e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) gridValue *= Math.pow(10, Math.floor(Math.log(maxGridValue / gridValue) / Math.LN10)); 18705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (gridValue * 5 <= maxGridValue) 18715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) gridValue *= 5; 187293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) gridY = Math.round(height - gridValue * yScaleFactor - 0.5) + 0.5; 187393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.beginPath(); 187493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.lineWidth = 1; 187593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.strokeStyle = "rgba(0, 0, 0, 0.2)"; 187693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.moveTo(0, gridY); 187793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.lineTo(width, gridY); 187893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.stroke(); 187993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.closePath(); 188093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 188193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 188253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) /** 188353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {number} x 188453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {number} size 188553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */ 188653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) function drawBarCallback(x, size) 188753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 188853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) context.moveTo(x, height - 1); 188953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) context.lineTo(x, Math.round(height - size * yScaleFactor - 1)); 189053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 189153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 189253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) context.beginPath(); 189353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) context.lineWidth = 2; 189453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) context.strokeStyle = "rgba(192, 192, 192, 0.6)"; 18955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) aggregateAndCall(topSizes, drawBarCallback); 189653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) context.stroke(); 189753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) context.closePath(); 189853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 189953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) context.beginPath(); 190053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) context.lineWidth = 2; 190153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) context.strokeStyle = "rgba(0, 0, 192, 0.8)"; 190253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) aggregateAndCall(sizes, drawBarCallback); 190353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) context.stroke(); 190453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) context.closePath(); 190593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 190693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (gridValue) { 190793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var label = Number.bytesToString(gridValue); 190893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var labelPadding = 4; 190993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var labelX = 0; 191093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var labelY = gridY - 0.5; 191193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var labelWidth = 2 * labelPadding + context.measureText(label).width; 191293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.beginPath(); 191393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.textBaseline = "bottom"; 191493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.font = "10px " + window.getComputedStyle(this.element, null).getPropertyValue("font-family"); 191593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.fillStyle = "rgba(255, 255, 255, 0.75)"; 191693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.fillRect(labelX, labelY - gridLabelHeight, labelWidth, gridLabelHeight); 191793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.fillStyle = "rgb(64, 64, 64)"; 191893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.fillText(label, labelX + labelPadding, labelY); 191993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.fill(); 192093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) context.closePath(); 192193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 192253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 192353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 192453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) onResize: function() 192553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 192653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._updateOverviewCanvas = true; 192753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._scheduleUpdate(); 192853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 192953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 193053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) _onWindowChanged: function() 193153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 193253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (!this._updateGridTimerId) 193353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._updateGridTimerId = setTimeout(this._updateGrid.bind(this), 10); 193453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 193553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 193653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) _scheduleUpdate: function() 193753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 193853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (this._updateTimerId) 193953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return; 194053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._updateTimerId = setTimeout(this.update.bind(this), 10); 194153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 194253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 194353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) _updateBoundaries: function() 194453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 194553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._windowLeft = this._overviewGrid.windowLeft(); 194653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._windowRight = this._overviewGrid.windowRight(); 194753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._windowWidth = this._windowRight - this._windowLeft; 194853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 194953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 195093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) update: function() 195153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 195253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._updateTimerId = null; 1953521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) if (!this.isShowing()) 1954521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return; 195553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._updateBoundaries(); 195653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._overviewCalculator._updateBoundaries(this); 195753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._overviewGrid.updateDividers(this._overviewCalculator); 195893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._drawOverviewCanvas(this._overviewContainer.clientWidth, this._overviewContainer.clientHeight - 20); 195953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 196053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 196153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) _updateGrid: function() 196253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 196353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._updateGridTimerId = 0; 196453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._updateBoundaries(); 196553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var ids = this._profileSamples.ids; 196653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var timestamps = this._profileSamples.timestamps; 196753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var sizes = this._profileSamples.sizes; 196853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var startTime = timestamps[0]; 196993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var totalTime = this._profileSamples.totalTime; 197093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var timeLeft = startTime + totalTime * this._windowLeft; 197193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) var timeRight = startTime + totalTime * this._windowRight; 197253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var minId = 0; 197353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var maxId = ids[ids.length - 1] + 1; 197453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) var size = 0; 197593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) for (var i = 0; i < timestamps.length; ++i) { 197653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (!timestamps[i]) 197753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) continue; 197853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (timestamps[i] > timeRight) 197953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) break; 198053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) maxId = ids[i]; 198193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (timestamps[i] < timeLeft) { 198253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) minId = ids[i]; 198353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) continue; 198453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 198553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) size += sizes[i]; 198653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 198753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 198853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.HeapTrackingOverviewGrid.IdsRangeChanged, {minId: minId, maxId: maxId, size: size}); 198953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 199053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1991d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) __proto__: WebInspector.VBox.prototype 199253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 199353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 199453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 199553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)/** 199653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @constructor 1997521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) */ 1998521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)WebInspector.HeapTrackingOverviewGrid.SmoothScale = function() 1999521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles){ 2000521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) this._lastUpdate = 0; 2001521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) this._currentScale = 0.0; 2002521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)} 2003521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 2004521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)WebInspector.HeapTrackingOverviewGrid.SmoothScale.prototype = { 2005521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) /** 2006521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) * @param {number} target 2007521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) * @return {number} 2008521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) */ 2009521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) nextScale: function(target) { 2010521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) target = target || this._currentScale; 2011521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) if (this._currentScale) { 2012521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) var now = Date.now(); 2013521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) var timeDeltaMs = now - this._lastUpdate; 2014521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) this._lastUpdate = now; 2015521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) var maxChangePerSec = 20; 2016521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) var maxChangePerDelta = Math.pow(maxChangePerSec, timeDeltaMs / 1000); 2017521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) var scaleChange = target / this._currentScale; 2018521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) this._currentScale *= Number.constrain(scaleChange, 1 / maxChangePerDelta, maxChangePerDelta); 2019521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) } else 2020521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) this._currentScale = target; 2021521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return this._currentScale; 2022521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) } 2023521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)} 2024521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 2025521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 2026521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)/** 2027521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) * @constructor 202853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @implements {WebInspector.TimelineGrid.Calculator} 202953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */ 203053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebInspector.HeapTrackingOverviewGrid.OverviewCalculator = function() 203153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 203253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 203353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 203453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebInspector.HeapTrackingOverviewGrid.OverviewCalculator.prototype = { 203553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) /** 2036d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {number} 2037d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 2038d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) paddingLeft: function() 2039d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 2040d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return 0; 2041d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 2042d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 2043d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 2044a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.HeapTrackingOverviewGrid} chart 204553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */ 204653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) _updateBoundaries: function(chart) 204753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 204853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._minimumBoundaries = 0; 204993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) this._maximumBoundaries = chart._profileSamples.totalTime; 205053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) this._xScaleFactor = chart._overviewContainer.clientWidth / this._maximumBoundaries; 205153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 205253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 205353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) /** 205453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) * @param {number} time 205509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {number} 205653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) */ 205753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) computePosition: function(time) 205853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 205953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return (time - this._minimumBoundaries) * this._xScaleFactor; 206053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 206153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 2062a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) /** 2063a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {number} value 2064d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {number=} precision 2065a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {string} 2066a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) */ 2067d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) formatTime: function(value, precision) 206853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 2069d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return Number.secondsToString(value / 1000, !!precision); 207053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 207153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 207209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 207309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {number} 207409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 207553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) maximumBoundary: function() 207653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 207753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return this._maximumBoundaries; 207853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 207953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 208009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 208109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {number} 208209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 208353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) minimumBoundary: function() 208453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 208553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return this._minimumBoundaries; 208653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 208753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 208809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 208909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {number} 209009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 209153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) zeroTime: function() 209253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 209353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return this._minimumBoundaries; 209453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) }, 209553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 209609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 209709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {number} 209809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 209953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) boundarySpan: function() 210053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 210153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return this._maximumBoundaries - this._minimumBoundaries; 210253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 210353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 2104d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 2105d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 2106d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)/** 2107d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @constructor 2108d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @extends {WebInspector.VBox} 2109d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 2110d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.HeapSnapshotStatisticsView = function() 2111d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 2112d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) WebInspector.VBox.call(this); 211307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch this.setMinimumSize(50, 25); 21147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._pieChart = new WebInspector.PieChart(150, WebInspector.HeapSnapshotStatisticsView._valueFormatter); 2115d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this.element.appendChild(this._pieChart.element); 2116d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._labels = this.element.createChild("div", "heap-snapshot-stats-legend"); 2117d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 2118d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 21197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci/** 21207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {number} value 21217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {string} 21227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 21237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.HeapSnapshotStatisticsView._valueFormatter = function(value) 21247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 21257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return WebInspector.UIString("%s KB", Number.withThousandsSeparator(Math.round(value / 1024))); 21267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 21277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2128d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebInspector.HeapSnapshotStatisticsView.prototype = { 2129d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 2130d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {number} value 2131d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 2132d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) setTotal: function(value) 2133d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 2134d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._pieChart.setTotal(value); 2135d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 2136d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 2137d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 2138d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {number} value 2139d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {string} name 2140d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @param {string=} color 2141d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 2142d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) addRecord: function(value, name, color) 2143d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 2144d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (color) 2145d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this._pieChart.addSlice(value, color); 2146d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 2147d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var node = this._labels.createChild("div"); 2148d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var swatchDiv = node.createChild("div", "heap-snapshot-stats-swatch"); 2149d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var nameDiv = node.createChild("div", "heap-snapshot-stats-name"); 2150d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var sizeDiv = node.createChild("div", "heap-snapshot-stats-size"); 2151d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (color) 2152d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) swatchDiv.style.backgroundColor = color; 2153d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) else 2154d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) swatchDiv.classList.add("heap-snapshot-stats-empty-swatch"); 2155d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) nameDiv.textContent = name; 21567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci sizeDiv.textContent = WebInspector.HeapSnapshotStatisticsView._valueFormatter(value); 2157d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 2158d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 2159d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) __proto__: WebInspector.VBox.prototype 2160d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 2161a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 2162a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch/** 2163a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @constructor 2164a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @extends {WebInspector.View} 21657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {?WebInspector.Target} target 2166a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch */ 21677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.HeapAllocationStackView = function(target) 2168a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch{ 2169a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch WebInspector.View.call(this); 21707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._target = target;; 2171a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._linkifier = new WebInspector.Linkifier(); 2172a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch} 2173a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 2174a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben MurdochWebInspector.HeapAllocationStackView.prototype = { 2175a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch /** 2176a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {!WebInspector.HeapSnapshotProxy} snapshot 2177a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {number} snapshotNodeIndex 2178a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch */ 2179a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch setAllocatedObject: function(snapshot, snapshotNodeIndex) 2180a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch { 2181a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this.clear(); 2182a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch snapshot.allocationStack(snapshotNodeIndex, this._didReceiveAllocationStack.bind(this)); 2183a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch }, 2184a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 2185a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch clear: function() 2186a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch { 2187a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this.element.removeChildren(); 2188a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._linkifier.reset(); 2189a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch }, 2190a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 2191a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch /** 2192a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch * @param {?Array.<!WebInspector.HeapSnapshotCommon.AllocationStackFrame>} frames 2193a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch */ 2194a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch _didReceiveAllocationStack: function(frames) 2195a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch { 2196a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (!frames) { 2197a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var stackDiv = this.element.createChild("div", "no-heap-allocation-stack"); 2198a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch stackDiv.createTextChild(WebInspector.UIString("Stack was not recorded for this object because it had been allocated before this profile recording started.")); 2199a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return; 2200a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } 2201a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 2202a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var stackDiv = this.element.createChild("div", "heap-allocation-stack"); 2203a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch for (var i = 0; i < frames.length; i++) { 2204a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var frame = frames[i]; 2205a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var frameDiv = stackDiv.createChild("div", "stack-frame"); 2206a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var name = frameDiv.createChild("div"); 2207a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch name.textContent = frame.functionName; 2208a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (frame.scriptId) { 22097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var urlElement = this._linkifier.linkifyScriptLocation(this._target, String(frame.scriptId), frame.scriptName, frame.line - 1, frame.column - 1); 2210a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch frameDiv.appendChild(urlElement); 2211a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } 2212a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch } 2213a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch }, 2214a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 2215a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch __proto__: WebInspector.View.prototype 2216a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch} 2217