| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 /** | 31 /** |
| 32 * @constructor | 32 * @constructor |
| 33 * @implements {WebInspector.ProfileType.DataDisplayDelegate} |
| 33 * @extends {WebInspector.VBox} | 34 * @extends {WebInspector.VBox} |
| 34 * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate | 35 * @param {!WebInspector.ProfileType.DataDisplayDelegate} dataDisplayDelegate |
| 35 * @param {!WebInspector.HeapProfileHeader} profile | 36 * @param {!WebInspector.HeapProfileHeader} profile |
| 36 */ | 37 */ |
| 37 WebInspector.HeapSnapshotView = function(dataDisplayDelegate, profile) | 38 WebInspector.HeapSnapshotView = function(dataDisplayDelegate, profile) |
| 38 { | 39 { |
| 39 WebInspector.VBox.call(this); | 40 WebInspector.VBox.call(this); |
| 40 | 41 |
| 41 this.element.classList.add("heap-snapshot-view"); | 42 this.element.classList.add("heap-snapshot-view"); |
| 42 | 43 |
| 43 profile.profileType().addEventListener(WebInspector.HeapSnapshotProfileType.
SnapshotReceived, this._onReceiveSnapshot, this); | 44 profile.profileType().addEventListener(WebInspector.HeapSnapshotProfileType.
SnapshotReceived, this._onReceiveSnapshot, this); |
| 44 profile.profileType().addEventListener(WebInspector.ProfileType.Events.Remov
eProfileHeader, this._onProfileHeaderRemoved, this); | 45 profile.profileType().addEventListener(WebInspector.ProfileType.Events.Remov
eProfileHeader, this._onProfileHeaderRemoved, this); |
| 45 | 46 |
| 46 if (profile.profileType().id === WebInspector.TrackingHeapSnapshotProfileTyp
e.TypeId) { | 47 if (profile.profileType().id === WebInspector.TrackingHeapSnapshotProfileTyp
e.TypeId) { |
| 47 this._trackingOverviewGrid = new WebInspector.HeapTrackingOverviewGrid(p
rofile); | 48 this._trackingOverviewGrid = new WebInspector.HeapTrackingOverviewGrid(p
rofile); |
| 48 this._trackingOverviewGrid.addEventListener(WebInspector.HeapTrackingOve
rviewGrid.IdsRangeChanged, this._onIdsRangeChanged.bind(this)); | 49 this._trackingOverviewGrid.addEventListener(WebInspector.HeapTrackingOve
rviewGrid.IdsRangeChanged, this._onIdsRangeChanged.bind(this)); |
| 49 } | 50 } |
| 50 | 51 |
| 52 this._parentDataDisplayDelegate = dataDisplayDelegate; |
| 53 |
| 51 this._splitView = new WebInspector.SplitView(false, true, "heapSnapshotSplit
ViewState", 200, 200); | 54 this._splitView = new WebInspector.SplitView(false, true, "heapSnapshotSplit
ViewState", 200, 200); |
| 52 this._splitView.show(this.element); | 55 this._splitView.show(this.element); |
| 53 | 56 |
| 54 this._containmentView = new WebInspector.VBox(); | 57 this._containmentView = new WebInspector.VBox(); |
| 55 this._containmentView.setMinimumSize(50, 25); | 58 this._containmentView.setMinimumSize(50, 25); |
| 56 this._containmentDataGrid = new WebInspector.HeapSnapshotContainmentDataGrid
(dataDisplayDelegate); | 59 this._containmentDataGrid = new WebInspector.HeapSnapshotContainmentDataGrid
(this); |
| 57 this._containmentDataGrid.show(this._containmentView.element); | 60 this._containmentDataGrid.show(this._containmentView.element); |
| 58 this._containmentDataGrid.addEventListener(WebInspector.DataGrid.Events.Sele
ctedNode, this._selectionChanged, this); | 61 this._containmentDataGrid.addEventListener(WebInspector.DataGrid.Events.Sele
ctedNode, this._selectionChanged, this); |
| 59 | 62 |
| 60 this._statisticsView = new WebInspector.HeapSnapshotStatisticsView(); | 63 this._statisticsView = new WebInspector.HeapSnapshotStatisticsView(); |
| 61 | 64 |
| 62 this._constructorsView = new WebInspector.VBox(); | 65 this._constructorsView = new WebInspector.VBox(); |
| 63 this._constructorsView.setMinimumSize(50, 25); | 66 this._constructorsView.setMinimumSize(50, 25); |
| 64 | 67 |
| 65 this._constructorsDataGrid = new WebInspector.HeapSnapshotConstructorsDataGr
id(dataDisplayDelegate); | 68 this._constructorsDataGrid = new WebInspector.HeapSnapshotConstructorsDataGr
id(this); |
| 66 this._constructorsDataGrid.show(this._constructorsView.element); | 69 this._constructorsDataGrid.show(this._constructorsView.element); |
| 67 this._constructorsDataGrid.addEventListener(WebInspector.DataGrid.Events.Sel
ectedNode, this._selectionChanged, this); | 70 this._constructorsDataGrid.addEventListener(WebInspector.DataGrid.Events.Sel
ectedNode, this._selectionChanged, this); |
| 68 | 71 |
| 69 this._diffView = new WebInspector.VBox(); | 72 this._diffView = new WebInspector.VBox(); |
| 70 this._diffView.setMinimumSize(50, 25); | 73 this._diffView.setMinimumSize(50, 25); |
| 71 | 74 |
| 72 this._diffDataGrid = new WebInspector.HeapSnapshotDiffDataGrid(dataDisplayDe
legate); | 75 this._diffDataGrid = new WebInspector.HeapSnapshotDiffDataGrid(this); |
| 73 this._diffDataGrid.show(this._diffView.element); | 76 this._diffDataGrid.show(this._diffView.element); |
| 74 this._diffDataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNod
e, this._selectionChanged, this); | 77 this._diffDataGrid.addEventListener(WebInspector.DataGrid.Events.SelectedNod
e, this._selectionChanged, this); |
| 75 | 78 |
| 76 if (profile._hasAllocationStacks) { | 79 if (profile._hasAllocationStacks) { |
| 77 this._allocationView = new WebInspector.VBox(); | 80 this._allocationView = new WebInspector.VBox(); |
| 78 this._allocationView.setMinimumSize(50, 25); | 81 this._allocationView.setMinimumSize(50, 25); |
| 79 this._allocationDataGrid = new WebInspector.AllocationDataGrid(profile.t
arget() , dataDisplayDelegate); | 82 this._allocationDataGrid = new WebInspector.AllocationDataGrid(profile.t
arget() , this); |
| 80 this._allocationDataGrid.addEventListener(WebInspector.DataGrid.Events.S
electedNode, this._onSelectAllocationNode, this); | 83 this._allocationDataGrid.addEventListener(WebInspector.DataGrid.Events.S
electedNode, this._onSelectAllocationNode, this); |
| 81 this._allocationDataGrid.show(this._allocationView.element); | 84 this._allocationDataGrid.show(this._allocationView.element); |
| 82 | 85 |
| 83 this._allocationStackView = new WebInspector.HeapAllocationStackView(pro
file.target()); | 86 this._allocationStackView = new WebInspector.HeapAllocationStackView(pro
file.target()); |
| 84 this._allocationStackView.setMinimumSize(50, 25); | 87 this._allocationStackView.setMinimumSize(50, 25); |
| 85 | 88 |
| 86 this._tabbedPane = new WebInspector.TabbedPane(); | 89 this._tabbedPane = new WebInspector.TabbedPane(); |
| 87 this._tabbedPane.closeableTabs = false; | 90 this._tabbedPane.closeableTabs = false; |
| 88 this._tabbedPane.headerElement().classList.add("heap-object-details-head
er"); | 91 this._tabbedPane.headerElement().classList.add("heap-object-details-head
er"); |
| 89 } | 92 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 109 var retainingPathsTitle = retainingPathsTitleDiv.createChild("span"); | 112 var retainingPathsTitle = retainingPathsTitleDiv.createChild("span"); |
| 110 retainingPathsTitle.textContent = WebInspector.UIString("Retainers"); | 113 retainingPathsTitle.textContent = WebInspector.UIString("Retainers"); |
| 111 this._retainmentView.element.appendChild(retainmentViewHeader); | 114 this._retainmentView.element.appendChild(retainmentViewHeader); |
| 112 | 115 |
| 113 splitViewResizer = retainmentViewHeader; | 116 splitViewResizer = retainmentViewHeader; |
| 114 this._objectDetailsView = this._retainmentView; | 117 this._objectDetailsView = this._retainmentView; |
| 115 } | 118 } |
| 116 this._splitView.hideDefaultResizer(); | 119 this._splitView.hideDefaultResizer(); |
| 117 this._splitView.installResizer(splitViewResizer); | 120 this._splitView.installResizer(splitViewResizer); |
| 118 | 121 |
| 119 this._retainmentDataGrid = new WebInspector.HeapSnapshotRetainmentDataGrid(d
ataDisplayDelegate); | 122 this._retainmentDataGrid = new WebInspector.HeapSnapshotRetainmentDataGrid(t
his); |
| 120 this._retainmentDataGrid.show(this._retainmentView.element); | 123 this._retainmentDataGrid.show(this._retainmentView.element); |
| 121 this._retainmentDataGrid.addEventListener(WebInspector.DataGrid.Events.Selec
tedNode, this._inspectedObjectChanged, this); | 124 this._retainmentDataGrid.addEventListener(WebInspector.DataGrid.Events.Selec
tedNode, this._inspectedObjectChanged, this); |
| 122 this._retainmentDataGrid.reset(); | 125 this._retainmentDataGrid.reset(); |
| 123 | 126 |
| 124 this._perspectives = []; | 127 this._perspectives = []; |
| 125 this._perspectives.push(new WebInspector.HeapSnapshotView.SummaryPerspective
()); | 128 this._perspectives.push(new WebInspector.HeapSnapshotView.SummaryPerspective
()); |
| 126 if (profile.profileType() !== WebInspector.ProfileTypeRegistry.instance.trac
kingHeapSnapshotProfileType) | 129 if (profile.profileType() !== WebInspector.ProfileTypeRegistry.instance.trac
kingHeapSnapshotProfileType) |
| 127 this._perspectives.push(new WebInspector.HeapSnapshotView.ComparisonPers
pective()); | 130 this._perspectives.push(new WebInspector.HeapSnapshotView.ComparisonPers
pective()); |
| 128 this._perspectives.push(new WebInspector.HeapSnapshotView.ContainmentPerspec
tive()); | 131 this._perspectives.push(new WebInspector.HeapSnapshotView.ContainmentPerspec
tive()); |
| 129 if (this._allocationView) | 132 if (this._allocationView) |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 masterGrid: function(heapSnapshotView) | 439 masterGrid: function(heapSnapshotView) |
| 437 { | 440 { |
| 438 return null; | 441 return null; |
| 439 }, | 442 }, |
| 440 | 443 |
| 441 __proto__: WebInspector.HeapSnapshotView.Perspective.prototype | 444 __proto__: WebInspector.HeapSnapshotView.Perspective.prototype |
| 442 } | 445 } |
| 443 | 446 |
| 444 | 447 |
| 445 WebInspector.HeapSnapshotView.prototype = { | 448 WebInspector.HeapSnapshotView.prototype = { |
| 449 /** |
| 450 * @override |
| 451 * @param {?WebInspector.ProfileHeader} profile |
| 452 * @return {?WebInspector.View} |
| 453 */ |
| 454 showProfile: function(profile) |
| 455 { |
| 456 return this._parentDataDisplayDelegate.showProfile(profile); |
| 457 }, |
| 458 |
| 459 /** |
| 460 * @override |
| 461 * @param {!HeapProfilerAgent.HeapSnapshotObjectId} snapshotObjectId |
| 462 * @param {string} perspectiveName |
| 463 */ |
| 464 showObject: function(snapshotObjectId, perspectiveName) |
| 465 { |
| 466 if (snapshotObjectId <= this._profile.maxJSObjectId) |
| 467 this.highlightLiveObject(perspectiveName, snapshotObjectId); |
| 468 else |
| 469 this._parentDataDisplayDelegate.showObject(snapshotObjectId, perspec
tiveName); |
| 470 }, |
| 471 |
| 446 _refreshView: function() | 472 _refreshView: function() |
| 447 { | 473 { |
| 448 this._profile.load(profileCallback.bind(this)); | 474 this._profile.load(profileCallback.bind(this)); |
| 449 | 475 |
| 450 /** | 476 /** |
| 451 * @param {!WebInspector.HeapSnapshotProxy} heapSnapshotProxy | 477 * @param {!WebInspector.HeapSnapshotProxy} heapSnapshotProxy |
| 452 * @this {WebInspector.HeapSnapshotView} | 478 * @this {WebInspector.HeapSnapshotView} |
| 453 */ | 479 */ |
| 454 function profileCallback(heapSnapshotProxy) | 480 function profileCallback(heapSnapshotProxy) |
| 455 { | 481 { |
| 456 heapSnapshotProxy.getStatistics(this._gotStatistics.bind(this)); | 482 heapSnapshotProxy.getStatistics(this._gotStatistics.bind(this)); |
| 457 var list = this._profiles(); | 483 var list = this._profiles(); |
| 458 var profileIndex = list.indexOf(this._profile); | 484 var profileIndex = list.indexOf(this._profile); |
| 459 this._baseSelect.setSelectedIndex(Math.max(0, profileIndex - 1)); | 485 this._baseSelect.setSelectedIndex(Math.max(0, profileIndex - 1)); |
| 460 this._dataGrid.setDataSource(heapSnapshotProxy); | 486 this._dataGrid.setDataSource(heapSnapshotProxy); |
| 461 if (this._trackingOverviewGrid) | 487 if (this._trackingOverviewGrid) |
| 462 this._trackingOverviewGrid._updateGrid(); | 488 this._trackingOverviewGrid._updateGrid(); |
| 463 } | 489 } |
| 464 }, | 490 }, |
| 465 | 491 |
| 466 /** | 492 /** |
| 467 * @param {!WebInspector.HeapSnapshotCommon.Statistics} statistics | 493 * @param {!WebInspector.HeapSnapshotCommon.Statistics} statistics |
| 468 */ | 494 */ |
| 469 _gotStatistics: function(statistics) { | 495 _gotStatistics: function(statistics) |
| 496 { |
| 470 this._statisticsView.setTotal(statistics.total); | 497 this._statisticsView.setTotal(statistics.total); |
| 471 this._statisticsView.addRecord(statistics.code, WebInspector.UIString("C
ode"), "#f77"); | 498 this._statisticsView.addRecord(statistics.code, WebInspector.UIString("C
ode"), "#f77"); |
| 472 this._statisticsView.addRecord(statistics.strings, WebInspector.UIString
("Strings"), "#5e5"); | 499 this._statisticsView.addRecord(statistics.strings, WebInspector.UIString
("Strings"), "#5e5"); |
| 473 this._statisticsView.addRecord(statistics.jsArrays, WebInspector.UIStrin
g("JS Arrays"), "#7af"); | 500 this._statisticsView.addRecord(statistics.jsArrays, WebInspector.UIStrin
g("JS Arrays"), "#7af"); |
| 474 this._statisticsView.addRecord(statistics.native, WebInspector.UIString(
"Typed Arrays"), "#fc5"); | 501 this._statisticsView.addRecord(statistics.native, WebInspector.UIString(
"Typed Arrays"), "#fc5"); |
| 475 this._statisticsView.addRecord(statistics.total, WebInspector.UIString("
Total")); | 502 this._statisticsView.addRecord(statistics.total, WebInspector.UIString("
Total")); |
| 476 }, | 503 }, |
| 477 | 504 |
| 478 _onIdsRangeChanged: function(event) | 505 _onIdsRangeChanged: function(event) |
| 479 { | 506 { |
| (...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 848 { | 875 { |
| 849 this._changePerspective(event.target.selectedIndex); | 876 this._changePerspective(event.target.selectedIndex); |
| 850 // FIXME: This is needed by CodeSchool extension. | 877 // FIXME: This is needed by CodeSchool extension. |
| 851 this._onSelectedViewChanged(event); | 878 this._onSelectedViewChanged(event); |
| 852 }, | 879 }, |
| 853 | 880 |
| 854 _onSelectedViewChanged: function(event) | 881 _onSelectedViewChanged: function(event) |
| 855 { | 882 { |
| 856 }, | 883 }, |
| 857 | 884 |
| 885 /** |
| 886 * @param {number} selectedIndex |
| 887 */ |
| 858 _changePerspective: function(selectedIndex) | 888 _changePerspective: function(selectedIndex) |
| 859 { | 889 { |
| 860 if (selectedIndex === this._currentPerspectiveIndex) | 890 if (selectedIndex === this._currentPerspectiveIndex) |
| 861 return; | 891 return; |
| 862 | 892 |
| 863 this._currentPerspectiveIndex = selectedIndex; | 893 this._currentPerspectiveIndex = selectedIndex; |
| 864 | 894 |
| 865 this._currentPerspective.deactivate(this); | 895 this._currentPerspective.deactivate(this); |
| 866 var perspective = this._perspectives[selectedIndex]; | 896 var perspective = this._perspectives[selectedIndex]; |
| 867 this._currentPerspective = perspective; | 897 this._currentPerspective = perspective; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 879 | 909 |
| 880 // The current search needs to be performed again. First negate out prev
ious match | 910 // The current search needs to be performed again. First negate out prev
ious match |
| 881 // count by calling the search finished callback with a negative number
of matches. | 911 // count by calling the search finished callback with a negative number
of matches. |
| 882 // Then perform the search again the with same query and callback. | 912 // Then perform the search again the with same query and callback. |
| 883 this._searchFinishedCallback(this, -this._searchResults.length); | 913 this._searchFinishedCallback(this, -this._searchResults.length); |
| 884 this.performSearch(this.currentQuery, this._searchFinishedCallback); | 914 this.performSearch(this.currentQuery, this._searchFinishedCallback); |
| 885 }, | 915 }, |
| 886 | 916 |
| 887 /** | 917 /** |
| 888 * @param {string} perspectiveName | 918 * @param {string} perspectiveName |
| 889 * @param {number} snapshotObjectId | 919 * @param {!HeapProfilerAgent.HeapSnapshotObjectId} snapshotObjectId |
| 890 */ | 920 */ |
| 891 highlightLiveObject: function(perspectiveName, snapshotObjectId) | 921 highlightLiveObject: function(perspectiveName, snapshotObjectId) |
| 892 { | 922 { |
| 893 this._changePerspectiveAndWait(perspectiveName, didChangePerspective.bin
d(this)); | 923 this._changePerspectiveAndWait(perspectiveName, didChangePerspective.bin
d(this)); |
| 894 | 924 |
| 895 /** | 925 /** |
| 896 * @this {WebInspector.HeapSnapshotView} | 926 * @this {WebInspector.HeapSnapshotView} |
| 897 */ | 927 */ |
| 898 function didChangePerspective() | 928 function didChangePerspective() |
| 899 { | 929 { |
| (...skipping 1277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2177 name.textContent = frame.functionName; | 2207 name.textContent = frame.functionName; |
| 2178 if (frame.scriptId) { | 2208 if (frame.scriptId) { |
| 2179 var urlElement = this._linkifier.linkifyScriptLocation(this._tar
get, String(frame.scriptId), frame.scriptName, frame.line - 1, frame.column - 1)
; | 2209 var urlElement = this._linkifier.linkifyScriptLocation(this._tar
get, String(frame.scriptId), frame.scriptName, frame.line - 1, frame.column - 1)
; |
| 2180 frameDiv.appendChild(urlElement); | 2210 frameDiv.appendChild(urlElement); |
| 2181 } | 2211 } |
| 2182 } | 2212 } |
| 2183 }, | 2213 }, |
| 2184 | 2214 |
| 2185 __proto__: WebInspector.View.prototype | 2215 __proto__: WebInspector.View.prototype |
| 2186 } | 2216 } |
| OLD | NEW |