Index: Source/devtools/front_end/timeline/TimelinePanel.js |
diff --git a/Source/devtools/front_end/timeline/TimelinePanel.js b/Source/devtools/front_end/timeline/TimelinePanel.js |
index 8fd2821b9ebf4353b7f1454fb173b98d6e38bc0e..b5a55f783cae22e2933863a0b251eabc64018d26 100644 |
--- a/Source/devtools/front_end/timeline/TimelinePanel.js |
+++ b/Source/devtools/front_end/timeline/TimelinePanel.js |
@@ -135,7 +135,7 @@ WebInspector.TimelinePanel = function() |
this._detailsSplitView.element.classList.add("timeline-details-split"); |
this._detailsSplitView.sidebarElement().classList.add("timeline-details"); |
this._detailsView = new WebInspector.TimelineDetailsView(); |
- this._detailsSplitView.installResizer(this._detailsView.titleElement()); |
+ this._detailsSplitView.installResizer(this._detailsView.headerElement()); |
this._detailsView.show(this._detailsSplitView.sidebarElement()); |
this._searchableView = new WebInspector.SearchableView(this); |
@@ -999,12 +999,11 @@ WebInspector.TimelinePanel.prototype = { |
break; |
case WebInspector.TimelineSelection.Type.Frame: |
var frame = /** @type {!WebInspector.TimelineFrame} */ (this._selection.object()); |
+ this.showInDetails(WebInspector.UIString("Frame Statistics"), WebInspector.TimelineUIUtils.generateDetailsContentForFrame(this._lazyFrameModel, frame)); |
if (frame.layerTree) { |
var layersView = this._layersView(); |
layersView.showLayerTree(frame.layerTree); |
- this._detailsView.setChildView(WebInspector.UIString("Frame Layers"), layersView); |
- } else { |
- this.showInDetails(WebInspector.UIString("Frame Statistics"), WebInspector.TimelineUIUtils.generateDetailsContentForFrame(this._lazyFrameModel, frame)); |
+ this._detailsView.appendTab("layers", WebInspector.UIString("Layers"), layersView); |
} |
break; |
} |
@@ -1079,11 +1078,11 @@ WebInspector.TimelinePanel.prototype = { |
aggregatedTotal += aggregatedStats[categoryName]; |
aggregatedStats["idle"] = Math.max(0, endTime - startTime - aggregatedTotal); |
- var fragment = document.createDocumentFragment(); |
- fragment.appendChild(WebInspector.TimelineUIUtils.generatePieChart(aggregatedStats)); |
+ var pieChartContainer = document.createElement("div"); |
+ pieChartContainer.classList.add("vbox", "timeline-range-summary"); |
var startOffset = startTime - this._model.minimumRecordTime(); |
var endOffset = endTime - this._model.minimumRecordTime(); |
- var title = WebInspector.UIString("%s \u2013 %s", Number.millisToString(startOffset), Number.millisToString(endOffset)); |
+ var title = WebInspector.UIString("Range: %s \u2013 %s", Number.millisToString(startOffset), Number.millisToString(endOffset)); |
for (var i = 0; i < this._overviewControls.length; ++i) { |
if (this._overviewControls[i] instanceof WebInspector.TimelinePowerOverview) { |
@@ -1092,7 +1091,9 @@ WebInspector.TimelinePanel.prototype = { |
break; |
} |
} |
- this.showInDetails(title, fragment); |
+ pieChartContainer.appendChild(document.createTextNode(title)); |
+ pieChartContainer.appendChild(WebInspector.TimelineUIUtils.generatePieChart(aggregatedStats)); |
+ this.showInDetails(WebInspector.UIString("Selected Range"), pieChartContainer); |
}, |
/** |
@@ -1124,71 +1125,67 @@ WebInspector.TimelinePanel.prototype = { |
/** |
* @constructor |
- * @extends {WebInspector.VBox} |
+ * @extends {WebInspector.TabbedPane} |
*/ |
WebInspector.TimelineDetailsView = function() |
{ |
- WebInspector.VBox.call(this); |
- this.element.classList.add("timeline-details-view"); |
- this._titleElement = this.element.createChild("div", "timeline-details-view-title"); |
- this._titleElement.textContent = WebInspector.UIString("DETAILS"); |
- this._contentElement = this.element.createChild("div", "timeline-details-view-body"); |
- this._currentChildView = null; |
+ WebInspector.TabbedPane.call(this); |
+ |
+ this._defaultDetailsView = new WebInspector.VBox(); |
+ this._defaultDetailsView.element.classList.add("timeline-details-view"); |
+ this._defaultDetailsContentElement = this._defaultDetailsView.element.createChild("div", "timeline-details-view-body"); |
+ |
+ this.appendTab("default", WebInspector.UIString("Details"), this._defaultDetailsView); |
+ |
+ this.addEventListener(WebInspector.TabbedPane.EventTypes.TabSelected, this._tabSelected, this); |
} |
WebInspector.TimelineDetailsView.prototype = { |
/** |
- * @return {!Element} |
+ * @param {string} title |
+ * @param {!Node} node |
*/ |
- titleElement: function() |
+ setContent: function(title, node) |
{ |
- return this._titleElement; |
+ this.changeTabTitle("default", WebInspector.UIString("Details: %s", title)); |
+ var otherTabs = this.otherTabs("default"); |
+ for (var i = 0; i < otherTabs.length; ++i) |
+ this.closeTab(otherTabs[i]); |
+ this._defaultDetailsContentElement.removeChildren(); |
+ this._defaultDetailsContentElement.appendChild(node); |
}, |
/** |
- * @param {string} title |
- * @param {!Node} node |
+ * @param {boolean} vertical |
*/ |
- setContent: function(title, node) |
+ setVertical: function(vertical) |
{ |
- this._titleElement.textContent = WebInspector.UIString("DETAILS: %s", title); |
- this._clearContent(); |
- this._contentElement.appendChild(node); |
+ this._defaultDetailsContentElement.classList.toggle("hbox", !vertical); |
+ this._defaultDetailsContentElement.classList.toggle("vbox", vertical); |
}, |
/** |
- * @param {string} title |
+ * @param {string} id |
+ * @param {string} tabTitle |
* @param {!WebInspector.View} view |
+ * @param {string=} tabTooltip |
*/ |
- setChildView: function(title, view) |
+ appendTab: function(id, tabTitle, view, tabTooltip) |
{ |
- this._titleElement.textContent = WebInspector.UIString("DETAILS: %s", title); |
- if (this._currentChildView === view) |
- return; |
- this._clearContent(); |
- view.show(this._contentElement); |
- this._currentChildView = view; |
+ WebInspector.TabbedPane.prototype.appendTab.call(this, id, tabTitle, view, tabTooltip); |
+ if (this._lastUserSelectedTabId === id) |
+ this.selectTab(id); |
}, |
- _clearContent: function() |
+ _tabSelected: function(event) |
{ |
- if (this._currentChildView) { |
- this._currentChildView.detach(); |
- this._currentChildView = null; |
- } |
- this._contentElement.removeChildren(); |
- }, |
+ if (!event.data.isUserGesture) |
+ return; |
- /** |
- * @param {boolean} vertical |
- */ |
- setVertical: function(vertical) |
- { |
- this._contentElement.classList.toggle("hbox", !vertical); |
- this._contentElement.classList.toggle("vbox", vertical); |
+ this._lastUserSelectedTabId = event.data.tabId; |
}, |
- __proto__: WebInspector.VBox.prototype |
+ __proto__: WebInspector.TabbedPane.prototype |
} |
/** |