Index: Source/devtools/front_end/profiler/CPUProfileView.js |
diff --git a/Source/devtools/front_end/profiler/CPUProfileView.js b/Source/devtools/front_end/profiler/CPUProfileView.js |
index be47ced830b5613d442ff1349d2932ea0a71ac75..a291d996c1e1a863740ad0fce80810d6a276282d 100644 |
--- a/Source/devtools/front_end/profiler/CPUProfileView.js |
+++ b/Source/devtools/front_end/profiler/CPUProfileView.js |
@@ -51,6 +51,7 @@ WebInspector.CPUProfileView = function(profileHeader) |
this.viewSelectComboBox = new WebInspector.StatusBarComboBox(this._changeView.bind(this)); |
var options = {}; |
+ options[WebInspector.CPUProfileView._TypeSunburst] = this.viewSelectComboBox.createOption(WebInspector.UIString("Sunburst"), "", WebInspector.CPUProfileView._TypeSunburst); |
options[WebInspector.CPUProfileView._TypeFlame] = this.viewSelectComboBox.createOption(WebInspector.UIString("Chart"), "", WebInspector.CPUProfileView._TypeFlame); |
options[WebInspector.CPUProfileView._TypeHeavy] = this.viewSelectComboBox.createOption(WebInspector.UIString("Heavy (Bottom Up)"), "", WebInspector.CPUProfileView._TypeHeavy); |
options[WebInspector.CPUProfileView._TypeTree] = this.viewSelectComboBox.createOption(WebInspector.UIString("Tree (Top Down)"), "", WebInspector.CPUProfileView._TypeTree); |
@@ -81,6 +82,7 @@ WebInspector.CPUProfileView = function(profileHeader) |
this._flameChart.update(); |
} |
+WebInspector.CPUProfileView._TypeSunburst = "Sunburst"; |
WebInspector.CPUProfileView._TypeFlame = "Flame"; |
WebInspector.CPUProfileView._TypeTree = "Tree"; |
WebInspector.CPUProfileView._TypeHeavy = "Heavy"; |
@@ -269,6 +271,15 @@ WebInspector.CPUProfileView.prototype = { |
this._flameChart.addEventListener(WebInspector.FlameChart.Events.EntrySelected, this._onEntrySelected.bind(this)); |
}, |
+ _ensureSunburstChartCreated: function() |
+ { |
+ if (this._sunburstChart) |
+ return; |
+// this._sunburstDataProvider = new WebInspector.CPUFlameChartDataProvider(this.profile, this._profileHeader.target()); |
+ this._sunburstChart = new WebInspector.CPUProfileSunburstChart(this.profile); |
+// this._flameChart.addEventListener(WebInspector.FlameChart.Events.EntrySelected, this._onEntrySelected.bind(this)); |
+ }, |
+ |
/** |
* @param {!WebInspector.Event} event |
*/ |
@@ -298,6 +309,11 @@ WebInspector.CPUProfileView.prototype = { |
this._viewType.set(this.viewSelectComboBox.selectedOption().value); |
switch (this._viewType.get()) { |
+ case WebInspector.CPUProfileView._TypeSunburst: |
+ this._ensureSunburstChartCreated(); |
+ this._visibleView = this._sunburstChart; |
+ this._searchableElement = this._sunburstChart; |
+ break; |
case WebInspector.CPUProfileView._TypeFlame: |
this._ensureFlameChartCreated(); |
this._visibleView = this._flameChart; |
@@ -810,3 +826,43 @@ WebInspector.CPUProfileHeader.prototype = { |
__proto__: WebInspector.ProfileHeader.prototype |
} |
+ |
+ |
+/** |
+ * @constructor |
+ * @extends {WebInspector.VBox} |
+ * @param {!WebInspector.CPUProfileDataModel} profile |
+ */ |
+WebInspector.CPUProfileSunburstChart = function(profile) |
+{ |
+ WebInspector.VBox.call(this); |
+ this.element.id = "cpu-sunburst-chart"; |
+ this._rootNode = this._convertToD3Trace(profile.profileHead); |
+ |
+ var iframe = this.element.createChild("iframe", "vbox flex-auto visible"); |
+ iframe.src = "chrome-devtools://devtools/bundled/profiler/d3js_trace/index.html"; |
+ function onFrameLoad() |
+ { |
+ iframe.contentWindow.postMessage(this._rootNode, "*"); |
+ } |
+ iframe.onload = onFrameLoad.bind(this); |
+} |
+ |
+WebInspector.CPUProfileSunburstChart.prototype = { |
+ _convertToD3Trace: function(node) |
+ { |
+ var result = { |
+ name: node.functionName, |
+ size: node.hitCount, |
+ children: [] |
+ }; |
+ for (var i = 0; i < node.children.length; i++) { |
+ var child = this._convertToD3Trace(node.children[i]); |
+ result.size += child.size; |
+ result.children.push(child); |
+ } |
+ return result; |
+ }, |
+ |
+ __proto__: WebInspector.VBox.prototype |
+}; |