OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. | 2 * Copyright (C) 2008 Apple 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 | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 columns.push({id: "self", title: WebInspector.UIString("Self"), width: "120p
x", sort: WebInspector.DataGrid.Order.Descending, sortable: true}); | 44 columns.push({id: "self", title: WebInspector.UIString("Self"), width: "120p
x", sort: WebInspector.DataGrid.Order.Descending, sortable: true}); |
45 columns.push({id: "total", title: WebInspector.UIString("Total"), width: "12
0px", sortable: true}); | 45 columns.push({id: "total", title: WebInspector.UIString("Total"), width: "12
0px", sortable: true}); |
46 columns.push({id: "function", title: WebInspector.UIString("Function"), disc
losure: true, sortable: true}); | 46 columns.push({id: "function", title: WebInspector.UIString("Function"), disc
losure: true, sortable: true}); |
47 | 47 |
48 this.dataGrid = new WebInspector.DataGrid(columns); | 48 this.dataGrid = new WebInspector.DataGrid(columns); |
49 this.dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChanged,
this._sortProfile, this); | 49 this.dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChanged,
this._sortProfile, this); |
50 | 50 |
51 this.viewSelectComboBox = new WebInspector.StatusBarComboBox(this._changeVie
w.bind(this)); | 51 this.viewSelectComboBox = new WebInspector.StatusBarComboBox(this._changeVie
w.bind(this)); |
52 | 52 |
53 var options = {}; | 53 var options = {}; |
| 54 options[WebInspector.CPUProfileView._TypeSunburst] = this.viewSelectComboBox
.createOption(WebInspector.UIString("Sunburst"), "", WebInspector.CPUProfileView
._TypeSunburst); |
54 options[WebInspector.CPUProfileView._TypeFlame] = this.viewSelectComboBox.cr
eateOption(WebInspector.UIString("Chart"), "", WebInspector.CPUProfileView._Type
Flame); | 55 options[WebInspector.CPUProfileView._TypeFlame] = this.viewSelectComboBox.cr
eateOption(WebInspector.UIString("Chart"), "", WebInspector.CPUProfileView._Type
Flame); |
55 options[WebInspector.CPUProfileView._TypeHeavy] = this.viewSelectComboBox.cr
eateOption(WebInspector.UIString("Heavy (Bottom Up)"), "", WebInspector.CPUProfi
leView._TypeHeavy); | 56 options[WebInspector.CPUProfileView._TypeHeavy] = this.viewSelectComboBox.cr
eateOption(WebInspector.UIString("Heavy (Bottom Up)"), "", WebInspector.CPUProfi
leView._TypeHeavy); |
56 options[WebInspector.CPUProfileView._TypeTree] = this.viewSelectComboBox.cre
ateOption(WebInspector.UIString("Tree (Top Down)"), "", WebInspector.CPUProfileV
iew._TypeTree); | 57 options[WebInspector.CPUProfileView._TypeTree] = this.viewSelectComboBox.cre
ateOption(WebInspector.UIString("Tree (Top Down)"), "", WebInspector.CPUProfileV
iew._TypeTree); |
57 | 58 |
58 var optionName = this._viewType.get() || WebInspector.CPUProfileView._TypeFl
ame; | 59 var optionName = this._viewType.get() || WebInspector.CPUProfileView._TypeFl
ame; |
59 var option = options[optionName] || options[WebInspector.CPUProfileView._Typ
eFlame]; | 60 var option = options[optionName] || options[WebInspector.CPUProfileView._Typ
eFlame]; |
60 this.viewSelectComboBox.select(option); | 61 this.viewSelectComboBox.select(option); |
61 | 62 |
62 this.focusButton = new WebInspector.StatusBarButton(WebInspector.UIString("F
ocus selected function."), "focus-status-bar-item"); | 63 this.focusButton = new WebInspector.StatusBarButton(WebInspector.UIString("F
ocus selected function."), "focus-status-bar-item"); |
63 this.focusButton.setEnabled(false); | 64 this.focusButton.setEnabled(false); |
(...skipping 10 matching lines...) Expand all Loading... |
74 this._profileHeader = profileHeader; | 75 this._profileHeader = profileHeader; |
75 this._linkifier = new WebInspector.Linkifier(new WebInspector.Linkifier.Defa
ultFormatter(30)); | 76 this._linkifier = new WebInspector.Linkifier(new WebInspector.Linkifier.Defa
ultFormatter(30)); |
76 | 77 |
77 this.profile = new WebInspector.CPUProfileDataModel(profileHeader._profile |
| profileHeader.protocolProfile()); | 78 this.profile = new WebInspector.CPUProfileDataModel(profileHeader._profile |
| profileHeader.protocolProfile()); |
78 | 79 |
79 this._changeView(); | 80 this._changeView(); |
80 if (this._flameChart) | 81 if (this._flameChart) |
81 this._flameChart.update(); | 82 this._flameChart.update(); |
82 } | 83 } |
83 | 84 |
| 85 WebInspector.CPUProfileView._TypeSunburst = "Sunburst"; |
84 WebInspector.CPUProfileView._TypeFlame = "Flame"; | 86 WebInspector.CPUProfileView._TypeFlame = "Flame"; |
85 WebInspector.CPUProfileView._TypeTree = "Tree"; | 87 WebInspector.CPUProfileView._TypeTree = "Tree"; |
86 WebInspector.CPUProfileView._TypeHeavy = "Heavy"; | 88 WebInspector.CPUProfileView._TypeHeavy = "Heavy"; |
87 | 89 |
88 /** | 90 /** |
89 * @interface | 91 * @interface |
90 */ | 92 */ |
91 WebInspector.CPUProfileView.Searchable = function() | 93 WebInspector.CPUProfileView.Searchable = function() |
92 { | 94 { |
93 } | 95 } |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
262 | 264 |
263 _ensureFlameChartCreated: function() | 265 _ensureFlameChartCreated: function() |
264 { | 266 { |
265 if (this._flameChart) | 267 if (this._flameChart) |
266 return; | 268 return; |
267 this._dataProvider = new WebInspector.CPUFlameChartDataProvider(this.pro
file, this._profileHeader.target()); | 269 this._dataProvider = new WebInspector.CPUFlameChartDataProvider(this.pro
file, this._profileHeader.target()); |
268 this._flameChart = new WebInspector.CPUProfileFlameChart(this._dataProvi
der); | 270 this._flameChart = new WebInspector.CPUProfileFlameChart(this._dataProvi
der); |
269 this._flameChart.addEventListener(WebInspector.FlameChart.Events.EntrySe
lected, this._onEntrySelected.bind(this)); | 271 this._flameChart.addEventListener(WebInspector.FlameChart.Events.EntrySe
lected, this._onEntrySelected.bind(this)); |
270 }, | 272 }, |
271 | 273 |
| 274 _ensureSunburstChartCreated: function() |
| 275 { |
| 276 if (this._sunburstChart) |
| 277 return; |
| 278 // this._sunburstDataProvider = new WebInspector.CPUFlameChartDataProvid
er(this.profile, this._profileHeader.target()); |
| 279 this._sunburstChart = new WebInspector.CPUProfileSunburstChart(this.prof
ile); |
| 280 // this._flameChart.addEventListener(WebInspector.FlameChart.Events.Entry
Selected, this._onEntrySelected.bind(this)); |
| 281 }, |
| 282 |
272 /** | 283 /** |
273 * @param {!WebInspector.Event} event | 284 * @param {!WebInspector.Event} event |
274 */ | 285 */ |
275 _onEntrySelected: function(event) | 286 _onEntrySelected: function(event) |
276 { | 287 { |
277 var entryIndex = event.data; | 288 var entryIndex = event.data; |
278 var node = this._dataProvider._entryNodes[entryIndex]; | 289 var node = this._dataProvider._entryNodes[entryIndex]; |
279 var target = this._profileHeader.target(); | 290 var target = this._profileHeader.target(); |
280 if (!node || !node.scriptId || !target) | 291 if (!node || !node.scriptId || !target) |
281 return; | 292 return; |
282 var script = target.debuggerModel.scriptForId(node.scriptId); | 293 var script = target.debuggerModel.scriptForId(node.scriptId); |
283 if (!script) | 294 if (!script) |
284 return; | 295 return; |
285 var location = /** @type {!WebInspector.DebuggerModel.Location} */ (scri
pt.target().debuggerModel.createRawLocation(script, node.lineNumber, 0)); | 296 var location = /** @type {!WebInspector.DebuggerModel.Location} */ (scri
pt.target().debuggerModel.createRawLocation(script, node.lineNumber, 0)); |
286 WebInspector.Revealer.reveal(WebInspector.debuggerWorkspaceBinding.rawLo
cationToUILocation(location)); | 297 WebInspector.Revealer.reveal(WebInspector.debuggerWorkspaceBinding.rawLo
cationToUILocation(location)); |
287 }, | 298 }, |
288 | 299 |
289 _changeView: function() | 300 _changeView: function() |
290 { | 301 { |
291 if (!this.profile) | 302 if (!this.profile) |
292 return; | 303 return; |
293 | 304 |
294 this._searchableView.closeSearch(); | 305 this._searchableView.closeSearch(); |
295 | 306 |
296 if (this._visibleView) | 307 if (this._visibleView) |
297 this._visibleView.detach(); | 308 this._visibleView.detach(); |
298 | 309 |
299 this._viewType.set(this.viewSelectComboBox.selectedOption().value); | 310 this._viewType.set(this.viewSelectComboBox.selectedOption().value); |
300 switch (this._viewType.get()) { | 311 switch (this._viewType.get()) { |
| 312 case WebInspector.CPUProfileView._TypeSunburst: |
| 313 this._ensureSunburstChartCreated(); |
| 314 this._visibleView = this._sunburstChart; |
| 315 this._searchableElement = this._sunburstChart; |
| 316 break; |
301 case WebInspector.CPUProfileView._TypeFlame: | 317 case WebInspector.CPUProfileView._TypeFlame: |
302 this._ensureFlameChartCreated(); | 318 this._ensureFlameChartCreated(); |
303 this._visibleView = this._flameChart; | 319 this._visibleView = this._flameChart; |
304 this._searchableElement = this._flameChart; | 320 this._searchableElement = this._flameChart; |
305 break; | 321 break; |
306 case WebInspector.CPUProfileView._TypeTree: | 322 case WebInspector.CPUProfileView._TypeTree: |
307 this.profileDataGridTree = this._getTopDownProfileDataGridTree(); | 323 this.profileDataGridTree = this._getTopDownProfileDataGridTree(); |
308 this._sortProfile(); | 324 this._sortProfile(); |
309 this._visibleView = this.dataGrid; | 325 this._visibleView = this.dataGrid; |
310 this._searchableElement = this.profileDataGridTree; | 326 this._searchableElement = this.profileDataGridTree; |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
803 _notifyTempFileReady: function() | 819 _notifyTempFileReady: function() |
804 { | 820 { |
805 if (this._onTempFileReady) { | 821 if (this._onTempFileReady) { |
806 this._onTempFileReady(); | 822 this._onTempFileReady(); |
807 this._onTempFileReady = null; | 823 this._onTempFileReady = null; |
808 } | 824 } |
809 }, | 825 }, |
810 | 826 |
811 __proto__: WebInspector.ProfileHeader.prototype | 827 __proto__: WebInspector.ProfileHeader.prototype |
812 } | 828 } |
| 829 |
| 830 |
| 831 /** |
| 832 * @constructor |
| 833 * @extends {WebInspector.VBox} |
| 834 * @param {!WebInspector.CPUProfileDataModel} profile |
| 835 */ |
| 836 WebInspector.CPUProfileSunburstChart = function(profile) |
| 837 { |
| 838 WebInspector.VBox.call(this); |
| 839 this.element.id = "cpu-sunburst-chart"; |
| 840 this._rootNode = this._convertToD3Trace(profile.profileHead); |
| 841 |
| 842 var iframe = this.element.createChild("iframe", "vbox flex-auto visible"); |
| 843 iframe.src = "chrome-devtools://devtools/bundled/profiler/d3js_trace/index.h
tml"; |
| 844 function onFrameLoad() |
| 845 { |
| 846 iframe.contentWindow.postMessage(this._rootNode, "*"); |
| 847 } |
| 848 iframe.onload = onFrameLoad.bind(this); |
| 849 } |
| 850 |
| 851 WebInspector.CPUProfileSunburstChart.prototype = { |
| 852 _convertToD3Trace: function(node) |
| 853 { |
| 854 var result = { |
| 855 name: node.functionName, |
| 856 size: node.hitCount, |
| 857 children: [] |
| 858 }; |
| 859 for (var i = 0; i < node.children.length; i++) { |
| 860 var child = this._convertToD3Trace(node.children[i]); |
| 861 result.size += child.size; |
| 862 result.children.push(child); |
| 863 } |
| 864 return result; |
| 865 }, |
| 866 |
| 867 __proto__: WebInspector.VBox.prototype |
| 868 }; |
OLD | NEW |