Index: Source/devtools/front_end/timeline/TimelineUIUtils.js |
diff --git a/Source/devtools/front_end/timeline/TimelineUIUtils.js b/Source/devtools/front_end/timeline/TimelineUIUtils.js |
index 924dd5475db37272c07d4f872a221b24bcf5106b..de69a605746b8ba491363105066310ffc51a1ff1 100644 |
--- a/Source/devtools/front_end/timeline/TimelineUIUtils.js |
+++ b/Source/devtools/front_end/timeline/TimelineUIUtils.js |
@@ -737,6 +737,9 @@ WebInspector.TimelineUIUtils.buildTraceEventDetails = function(event, model, lin |
WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously = function(event, model, linkifier, imagePreviewElement, relatedNode, loadedFromFile, bindings, target) |
{ |
var fragment = document.createDocumentFragment(); |
+ var stats = WebInspector.TimelineUIUtils._aggregatedStatsForTraceEvent(model, event); |
+ fragment.appendChild(WebInspector.TimelineUIUtils.generatePieChart(stats)); |
+ |
var recordTypes = WebInspector.TimelineModel.RecordType; |
// The messages may vary per event.name; |
@@ -883,6 +886,40 @@ WebInspector.TimelineUIUtils._buildTraceEventDetailsSynchronously = function(eve |
} |
/** |
+ * @param {!WebInspector.TracingModel} model |
+ * @param {!WebInspector.TracingModel.Event} event |
+ * @return {!Object} |
+ */ |
+WebInspector.TimelineUIUtils._aggregatedStatsForTraceEvent = function(model, event) |
+{ |
+ var events = model.inspectedTargetEvents(); |
+ /** |
+ * @param {number} startTime |
+ * @param {!WebInspector.TracingModel.Event} e |
+ * @return {number} |
+ */ |
+ function eventComparator(startTime, e) |
+ { |
+ return startTime - e.startTime; |
+ } |
+ var index = events.binaryIndexOf(event.startTime, eventComparator); |
+ var aggregatedStats = {}; |
+ var endTime = event.endTime; |
+ if (!endTime) |
+ return aggregatedStats; |
+ for (; index < events.length; index++) { |
+ var nextEvent = events[index]; |
+ if (nextEvent.startTime > endTime) |
+ break; |
+ if (!nextEvent.selfTime) |
+ continue; |
+ var category = WebInspector.TimelineUIUtils.styleForTimelineEvent(nextEvent.name).category.name; |
+ aggregatedStats[category] = (aggregatedStats[category] || 0) + nextEvent.selfTime; |
+ } |
+ return aggregatedStats; |
+} |
+ |
+/** |
* @param {!Array.<number>} quad |
* @return {number} |
*/ |