Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(870)

Unified Diff: Source/devtools/front_end/timeline/TimelineFlameChart.js

Issue 391373008: DevTools: Show JS callstacks on tracing-based timeline (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Added JSDoc Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/devtools/front_end/timeline/TracingTimelineUIUtils.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/timeline/TimelineFlameChart.js
diff --git a/Source/devtools/front_end/timeline/TimelineFlameChart.js b/Source/devtools/front_end/timeline/TimelineFlameChart.js
index bd2a2acd061aa5d2df5f86e1851c25b9c16b137f..cf1cac10ebb82c1f789d4c464bbae0180fb8125c 100644
--- a/Source/devtools/front_end/timeline/TimelineFlameChart.js
+++ b/Source/devtools/front_end/timeline/TimelineFlameChart.js
@@ -461,6 +461,8 @@ WebInspector.TracingBasedTimelineFlameChartDataProvider = function(model, frameM
this.addFilter(new WebInspector.TracingTimelineModel.ExclusiveEventNameFilter([WebInspector.TracingTimelineModel.RecordType.Program]));
}
+WebInspector.TracingBasedTimelineFlameChartDataProvider.InstantEventVisibleDurationMs = 0.01;
+
WebInspector.TracingBasedTimelineFlameChartDataProvider.prototype = {
/**
* @return {number}
@@ -506,6 +508,8 @@ WebInspector.TracingBasedTimelineFlameChartDataProvider.prototype = {
var name = WebInspector.TracingTimelineUIUtils.styleForTraceEvent(event.name).title;
// TODO(yurys): support event dividers
var details = WebInspector.TracingTimelineUIUtils.buildDetailsNodeForTraceEvent(event, this._linkifier, false, this._target);
+ if (event.name === WebInspector.TracingTimelineModel.RecordType.JSFrame && details)
+ return details.textContent;
return details ? WebInspector.UIString("%s (%s)", name, details.textContent) : name;
}
var title = this._entryIndexToTitle[entryIndex];
@@ -571,25 +575,61 @@ WebInspector.TracingBasedTimelineFlameChartDataProvider.prototype = {
{
var maxStackDepth = 0;
var openEvents = [];
+ var heights = [];
var headerAppended = false;
+ var level = 0;
for (var i = 0; i < events.length; ++i) {
var e = events[i];
if (!e.endTime && e.phase !== WebInspector.TracingModel.Phase.Instant)
continue;
if (!this._isVisible(e))
continue;
- while (openEvents.length && openEvents.peekLast().endTime <= e.startTime)
+ while (openEvents.length && openEvents.peekLast().endTime <= e.startTime) {
openEvents.pop();
+ level = heights.pop();
+ }
if (!headerAppended) {
- this._appendHeaderRecord(headerName, this._currentLevel++);
+ this._appendHeaderRecord(headerName, this._currentLevel);
+ ++level;
headerAppended = true;
}
- this._appendEvent(e, this._currentLevel + openEvents.length);
- maxStackDepth = Math.max(maxStackDepth, openEvents.length + 1);
- if (e.endTime)
+ var height = this._processEvent(e, this._currentLevel + level);
+ if (e.endTime) {
openEvents.push(e);
+ heights.push(level)
+ }
+ level += height;
+ maxStackDepth = Math.max(maxStackDepth, level);
+ }
+ this._currentLevel += maxStackDepth;
+ },
+
+ /**
+ * @param {!WebInspector.TracingModel.Event} event
+ * @param {number} baseLevel
+ * @return {number}
+ */
+ _processEvent: function(event, baseLevel)
+ {
+ var level = baseLevel;
+ if (event.stackTrace && WebInspector.experimentsSettings.timelineJSCPUProfile.isEnabled()) {
+ for (var i = event.stackTrace.length - 1; i >= 0; --i) {
+ var payload = /** @type {!WebInspector.TracingModel.EventPayload} */ ({
+ ph: WebInspector.TracingModel.Phase.Complete,
+ cat: WebInspector.TracingModel.DevToolsMetadataEventCategory,
+ name: WebInspector.TracingTimelineModel.RecordType.JSFrame,
+ ts: event.startTime * 1000,
+ dur: event.duration * 1000,
+ args: {
+ data: event.stackTrace[i]
+ }
+ });
+ var jsFrameEvent = new WebInspector.TracingModel.Event(payload, 0, event.thread);
+ this._appendEvent(jsFrameEvent, level++);
+ }
}
- this._currentLevel += maxStackDepth + (headerAppended ? 1 : 0);
+ this._appendEvent(event, level++)
+ return level - baseLevel;
},
/**
@@ -660,6 +700,8 @@ WebInspector.TracingBasedTimelineFlameChartDataProvider.prototype = {
var event = this._entryEvents[entryIndex];
if (!event)
return "#555";
+ if (event.name === WebInspector.TracingTimelineModel.RecordType.JSFrame)
+ return WebInspector.TimelineFlameChartDataProvider.jsFrameColorGenerator().colorForID(event.args.data["functionName"]);
var style = WebInspector.TracingTimelineUIUtils.styleForTraceEvent(event.name);
return style.category.fillColorStop1;
},
@@ -737,7 +779,7 @@ WebInspector.TracingBasedTimelineFlameChartDataProvider.prototype = {
return null;
return {
startTime: event.startTime,
- endTime: event.endTime
+ endTime: event.endTime || event.startTime + WebInspector.TracingBasedTimelineFlameChartDataProvider.InstantEventVisibleDurationMs
}
},
@@ -781,7 +823,7 @@ WebInspector.TracingBasedTimelineFlameChartDataProvider.prototype = {
var index = this._entryEvents.length;
this._entryEvents.push(event);
this._timelineData.entryLevels[index] = level;
- this._timelineData.entryTotalTimes[index] = event.duration || 1;
+ this._timelineData.entryTotalTimes[index] = event.duration || WebInspector.TracingBasedTimelineFlameChartDataProvider.InstantEventVisibleDurationMs;
this._timelineData.entryStartTimes[index] = event.startTime;
},
« no previous file with comments | « no previous file | Source/devtools/front_end/timeline/TracingTimelineUIUtils.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698