Index: third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js |
index 20c5cbfbd22dbc75c3bbef99bc404106e83dbaab..5bc5b5aa60054ecd2d85202b9f7bf0da8bd1c4cf 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js |
+++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js |
@@ -588,21 +588,24 @@ WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously = function(eve |
// This message may vary per event.name; |
var relatedNodeLabel; |
- var contentHelper = new WebInspector.TimelineDetailsContentHelper(model.target(), linkifier, relatedNodesMap, false); |
+ var contentHelper = new WebInspector.TimelineDetailsContentHelper(model.target(), linkifier, relatedNodesMap, WebInspector.TimelineUIUtils.eventTitle(event), WebInspector.TimelineUIUtils.eventStyle(event).category); |
+ |
+ var eventData = event.args["data"]; |
+ var initiator = event.initiator; |
if (event.warning) |
contentHelper.appendWarningRow(event); |
+ if (event.name === recordTypes.JSFrame) { |
+ var deoptReason = eventData["deoptReason"]; |
+ if (deoptReason && deoptReason != "no reason") |
+ contentHelper.appendWarningRow(event, WebInspector.TimelineModel.WarningType.V8Deopt); |
+ } |
if (detailed) { |
- contentHelper.appendTextRow(WebInspector.UIString("Type"), WebInspector.TimelineUIUtils.eventTitle(event)); |
- contentHelper.appendTextRow(WebInspector.UIString("Total Time"), Number.millisToString(event.duration || 0, true)); |
contentHelper.appendTextRow(WebInspector.UIString("Self Time"), Number.millisToString(event.selfTime, true)); |
+ contentHelper.appendTextRow(WebInspector.UIString("Total Time"), Number.millisToString(event.duration || 0, true)); |
+ contentHelper.element.classList.add("timeline-details-lineup"); |
caseq
2015/12/09 00:47:19
What does this do?
|
} |
- if (event.previewElement) |
- contentHelper.appendElementRow(WebInspector.UIString("Preview"), event.previewElement); |
- |
- var eventData = event.args["data"]; |
- var initiator = event.initiator; |
switch (event.name) { |
case recordTypes.GCEvent: |
@@ -615,9 +618,6 @@ WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously = function(eve |
var detailsNode = WebInspector.TimelineUIUtils.buildDetailsNodeForTraceEvent(event, model.target(), linkifier); |
if (detailsNode) |
contentHelper.appendElementRow(WebInspector.UIString("Function"), detailsNode); |
- var deoptReason = eventData["deoptReason"]; |
- if (deoptReason && deoptReason != "no reason") |
- contentHelper.appendWarningRow(event, WebInspector.TimelineModel.WarningType.V8Deopt); |
break; |
case recordTypes.TimerFire: |
case recordTypes.TimerInstall: |
@@ -695,9 +695,6 @@ WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously = function(eve |
case recordTypes.Layout: |
var beginData = event.args["beginData"]; |
contentHelper.appendTextRow(WebInspector.UIString("Nodes That Need Layout"), beginData["dirtyObjects"]); |
alph
2015/12/09 01:07:11
may be keep total, e.g.: 16 of 33.
|
- contentHelper.appendTextRow(WebInspector.UIString("Layout Tree Size"), beginData["totalObjects"]); |
- contentHelper.appendTextRow(WebInspector.UIString("Layout Scope"), |
- beginData["partialLayout"] ? WebInspector.UIString("Partial") : WebInspector.UIString("Whole document")); |
relatedNodeLabel = WebInspector.UIString("Layout root"); |
break; |
case recordTypes.ConsoleTime: |
@@ -751,22 +748,34 @@ WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously = function(eve |
break; |
} |
+ if (event.previewElement) { |
+ contentHelper = new WebInspector.TimelineDetailsContentHelper(model.target(), linkifier, relatedNodesMap); |
caseq
2015/12/09 00:51:33
What is this meant to do? What happens to the cont
|
+ contentHelper.appendElementRow(WebInspector.UIString("Preview"), event.previewElement); |
+ } |
+ |
var relatedNode = contentHelper.nodeForBackendId(event.backendNodeId); |
if (relatedNode) |
contentHelper.appendElementRow(relatedNodeLabel || WebInspector.UIString("Related Node"), WebInspector.DOMPresentationUtils.linkifyNodeReference(relatedNode)); |
- if (eventData && eventData["scriptName"] && event.name !== recordTypes.FunctionCall) |
+ if (eventData && eventData["scriptName"] && event.name !== recordTypes.FunctionCall) { |
+ fragment.appendChild(contentHelper.element); |
+ contentHelper = new WebInspector.TimelineDetailsContentHelper(model.target(), linkifier, relatedNodesMap); |
contentHelper.appendLocationRow(WebInspector.UIString("Function Call"), eventData["scriptName"], eventData["scriptLine"]); |
+ } |
- if (event.stackTrace || (event.initiator && event.initiator.stackTrace) || event.invalidationTrackingEvents) |
+ if (event.stackTrace || (event.initiator && event.initiator.stackTrace) || event.invalidationTrackingEvents) { |
+ fragment.appendChild(contentHelper.element); |
+ contentHelper = new WebInspector.TimelineDetailsContentHelper(model.target(), linkifier, relatedNodesMap, WebInspector.UIString("Call Stacks")); |
WebInspector.TimelineUIUtils._generateCauses(event, model.target(), contentHelper); |
+ } |
var showPieChart = detailed && WebInspector.TimelineUIUtils._aggregatedStatsForTraceEvent(stats, model, event); |
if (showPieChart) { |
+ fragment.appendChild(contentHelper.element); |
+ contentHelper = new WebInspector.TimelineDetailsContentHelper(model.target(), linkifier, relatedNodesMap, WebInspector.UIString("Aggregated Time")); |
var pieChart = WebInspector.TimelineUIUtils.generatePieChart(stats, WebInspector.TimelineUIUtils.eventStyle(event).category, event.selfTime); |
- contentHelper.appendElementRow(WebInspector.UIString("Aggregated Time"), pieChart); |
+ contentHelper.appendElementRow("", pieChart); |
} |
- |
fragment.appendChild(contentHelper.element); |
return fragment; |
@@ -819,13 +828,13 @@ WebInspector.TimelineUIUtils.buildRangeStats = function(model, startTime, endTim |
aggregatedTotal += aggregatedStats[categoryName]; |
aggregatedStats["idle"] = Math.max(0, endTime - startTime - aggregatedTotal); |
- var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null, null, false); |
- var pieChart = WebInspector.TimelineUIUtils.generatePieChart(aggregatedStats); |
- |
var startOffset = startTime - model.minimumRecordTime(); |
var endOffset = endTime - model.minimumRecordTime(); |
- contentHelper.appendTextRow(WebInspector.UIString("Range"), WebInspector.UIString("%s \u2013 %s", Number.millisToString(startOffset), Number.millisToString(endOffset))); |
- contentHelper.appendElementRow(WebInspector.UIString("Aggregated Time"), pieChart); |
+ |
+ var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null, null, WebInspector.UIString("Range: %s \u2013 %s", Number.millisToString(startOffset), Number.millisToString(endOffset))); |
+ var pieChart = WebInspector.TimelineUIUtils.generatePieChart(aggregatedStats); |
+ |
+ contentHelper.appendElementRow("", pieChart); |
return contentHelper.element; |
} |
@@ -890,7 +899,7 @@ WebInspector.TimelineUIUtils.buildNetworkRequestDetails = function(request, mode |
{ |
var fragment = createDocumentFragment(); |
var target = model.target(); |
- var contentHelper = new WebInspector.TimelineDetailsContentHelper(target, linkifier, null, true); |
+ var contentHelper = new WebInspector.TimelineDetailsContentHelper(target, linkifier, null); |
var info = WebInspector.TimelineUIUtils.buildNetworkRequestInfo(request); |
for (var item of info) { |
@@ -968,7 +977,7 @@ WebInspector.TimelineUIUtils._generateCauses = function(event, target, contentHe |
} |
// Direct cause. |
- if (event.stackTrace) |
+ if (event.stackTrace && event.stackTrace.length) |
contentHelper.appendStackTrace(stackLabel || WebInspector.UIString("Stack Trace"), event.stackTrace); |
// Indirect causes. |
@@ -1546,20 +1555,32 @@ WebInspector.TimelineUIUtils.generatePieChart = function(aggregatedStats, selfCa |
*/ |
WebInspector.TimelineUIUtils.generateDetailsContentForFrame = function(frameModel, frame, filmStripFrame) |
{ |
+ var result = createElementWithClass("div", "vbox"); |
var pieChart = WebInspector.TimelineUIUtils.generatePieChart(frame.timeByCategory); |
- var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null, null, false); |
+ var contentHelper = new WebInspector.TimelineDetailsContentHelper(null, null, null, WebInspector.UIString("Frame")); |
+ |
+ if (frame.hasWarnings()) { |
+ var value = createElement("span"); |
+ value.createTextChild(WebInspector.UIString("Long frame times are an indication of ")); |
+ value.appendChild(WebInspector.linkifyURLAsNode("https://developers.google.com/web/fundamentals/performance/rendering/", |
+ WebInspector.UIString("jank"), undefined, true)); |
+ value.createTextChild("."); |
+ contentHelper.appendElementRow(WebInspector.UIString("Warning"), value, true); |
+ } |
+ |
var duration = WebInspector.TimelineUIUtils.frameDuration(frame); |
- contentHelper.appendElementRow(WebInspector.UIString("Duration"), duration, frame.hasWarnings()); |
+ contentHelper.appendElementRow(WebInspector.UIString("Duration"), duration, false); |
if (filmStripFrame) { |
var filmStripPreview = createElementWithClass("img", "timeline-filmstrip-preview"); |
filmStripFrame.imageDataPromise().then(onGotImageData.bind(null, filmStripPreview)); |
- contentHelper.appendElementRow(WebInspector.UIString("Screenshot"), filmStripPreview); |
+ contentHelper.appendElementRow("", filmStripPreview); |
filmStripPreview.addEventListener("click", frameClicked.bind(null, filmStripFrame), false); |
} |
var durationInMillis = frame.endTime - frame.startTime; |
contentHelper.appendTextRow(WebInspector.UIString("FPS"), Math.floor(1000 / durationInMillis)); |
contentHelper.appendTextRow(WebInspector.UIString("CPU time"), Number.millisToString(frame.cpuTime, true)); |
- contentHelper.appendElementRow(WebInspector.UIString("Aggregated Time"), pieChart); |
+ result.appendChild(contentHelper.element); |
+ |
if (Runtime.experiments.isEnabled("layersPanel") && frame.layerTree) { |
contentHelper.appendElementRow(WebInspector.UIString("Layer tree"), |
WebInspector.Linkifier.linkifyUsingRevealer(frame.layerTree, WebInspector.UIString("show"))); |
@@ -1583,7 +1604,8 @@ WebInspector.TimelineUIUtils.generateDetailsContentForFrame = function(frameMode |
new WebInspector.FilmStripView.Dialog(filmStripFrame, 0); |
} |
- return contentHelper.element; |
+ result.appendChild(contentHelper.element); |
alph
2015/12/09 01:07:11
doing it twice.
|
+ return result; |
} |
/** |
@@ -1596,12 +1618,6 @@ WebInspector.TimelineUIUtils.frameDuration = function(frame) |
Number.millisToString(frame.startTimeOffset, true)); |
var element = createElement("span"); |
element.createTextChild(durationText); |
- if (!frame.hasWarnings()) |
- return element; |
- element.createTextChild(WebInspector.UIString(". Long frame times are an indication of ")); |
- element.appendChild(WebInspector.linkifyURLAsNode("https://developers.google.com/web/fundamentals/performance/rendering/", |
- WebInspector.UIString("jank"), undefined, true)); |
- element.createTextChild("."); |
return element; |
} |
@@ -1923,16 +1939,23 @@ WebInspector.TimelinePopupContentHelper.prototype = { |
* @param {?WebInspector.Target} target |
* @param {?WebInspector.Linkifier} linkifier |
* @param {?Map<number, ?WebInspector.DOMNode>} relatedNodesMap |
- * @param {boolean} monospaceValues |
+ * @param {string=} title |
+ * @param {!WebInspector.TimelineCategory=} category |
*/ |
-WebInspector.TimelineDetailsContentHelper = function(target, linkifier, relatedNodesMap, monospaceValues) |
+WebInspector.TimelineDetailsContentHelper = function(target, linkifier, relatedNodesMap, title, category) |
{ |
this._linkifier = linkifier; |
this._target = target; |
this._relatedNodesMap = relatedNodesMap; |
- this.element = createElement("div"); |
- this.element.className = "timeline-details-view-block"; |
- this._monospaceValues = monospaceValues; |
+ this.element = createElementWithClass("div", "timeline-details-view-block"); |
+ |
+ if (title) { |
+ var titleElement = this.element.createChild("div", "timeline-details-chip-title"); |
+ if (category) |
+ titleElement.createChild("div", "timeline-" + category.name); |
+ titleElement.createTextChild(title); |
+ } |
+ this._tableElement = this.element.createChild("div", "vbox timeline-details-chip-body"); |
} |
WebInspector.TimelineDetailsContentHelper.prototype = { |
@@ -1961,24 +1984,27 @@ WebInspector.TimelineDetailsContentHelper.prototype = { |
*/ |
appendTextRow: function(title, value) |
{ |
- var rowElement = this.element.createChild("div", "timeline-details-view-row"); |
+ var rowElement = this._tableElement.createChild("div", "timeline-details-view-row"); |
rowElement.createChild("div", "timeline-details-view-row-title").textContent = title; |
- rowElement.createChild("div", "timeline-details-view-row-value" + (this._monospaceValues ? " monospace" : "")).textContent = value; |
+ rowElement.createChild("div", "timeline-details-view-row-value").textContent = value; |
}, |
/** |
* @param {string} title |
* @param {!Node|string} content |
* @param {boolean=} isWarning |
+ * @param {boolean=} isStacked |
*/ |
- appendElementRow: function(title, content, isWarning) |
+ appendElementRow: function(title, content, isWarning, isStacked) |
{ |
- var rowElement = this.element.createChild("div", "timeline-details-view-row"); |
+ var rowElement = this._tableElement.createChild("div", "timeline-details-view-row"); |
if (isWarning) |
rowElement.classList.add("timeline-details-warning"); |
+ if (isStacked) |
+ rowElement.classList.add("timeline-details-stack-values"); |
var titleElement = rowElement.createChild("div", "timeline-details-view-row-title"); |
titleElement.textContent = title; |
- var valueElement = rowElement.createChild("div", "timeline-details-view-row-value" + (this._monospaceValues ? " monospace" : "")); |
+ var valueElement = rowElement.createChild("div", "timeline-details-view-row-value"); |
if (content instanceof Node) |
valueElement.appendChild(content); |
else |
@@ -2025,7 +2051,7 @@ WebInspector.TimelineDetailsContentHelper.prototype = { |
if (!this._linkifier || !this._target) |
return; |
- var rowElement = this.element.createChild("div", "timeline-details-view-row"); |
+ var rowElement = this._tableElement.createChild("div", "timeline-details-view-row"); |
rowElement.createChild("div", "timeline-details-view-row-title").textContent = title; |
this.createChildStackTraceElement(rowElement, stackTrace); |
}, |
@@ -2038,11 +2064,9 @@ WebInspector.TimelineDetailsContentHelper.prototype = { |
{ |
if (!this._linkifier || !this._target) |
return; |
- |
- var stackTraceElement = parentElement.createChild("div", "timeline-details-view-row-value timeline-details-view-row-stack-trace monospace"); |
- |
+ parentElement.classList.add("timeline-details-stack-values"); |
+ var stackTraceElement = parentElement.createChild("div", "timeline-details-view-row-value timeline-details-view-row-stack-trace"); |
var callFrameElem = WebInspector.DOMPresentationUtils.buildStackTracePreviewContents(this._target, this._linkifier, stackTrace); |
- |
stackTraceElement.appendChild(callFrameElem); |
}, |