Chromium Code Reviews| 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 cf1cac10ebb82c1f789d4c464bbae0180fb8125c..b252c30d3a000a95e777ebf65d871d105d6829f6 100644 |
| --- a/Source/devtools/front_end/timeline/TimelineFlameChart.js |
| +++ b/Source/devtools/front_end/timeline/TimelineFlameChart.js |
| @@ -575,9 +575,11 @@ WebInspector.TracingBasedTimelineFlameChartDataProvider.prototype = { |
| { |
| var maxStackDepth = 0; |
| var openEvents = []; |
| - var heights = []; |
| + var levels = []; |
| + var jsHeights = []; |
| var headerAppended = false; |
| var level = 0; |
| + var jsStackHeight = 0; |
| for (var i = 0; i < events.length; ++i) { |
| var e = events[i]; |
| if (!e.endTime && e.phase !== WebInspector.TracingModel.Phase.Instant) |
| @@ -586,19 +588,22 @@ WebInspector.TracingBasedTimelineFlameChartDataProvider.prototype = { |
| continue; |
| while (openEvents.length && openEvents.peekLast().endTime <= e.startTime) { |
| openEvents.pop(); |
| - level = heights.pop(); |
| + level = levels.pop(); |
| + jsStackHeight = jsHeights.pop(); |
| } |
| if (!headerAppended) { |
| this._appendHeaderRecord(headerName, this._currentLevel); |
| ++level; |
| headerAppended = true; |
| } |
| - var height = this._processEvent(e, this._currentLevel + level); |
| + var jsHeightDelta = this._processEvent(e, this._currentLevel + level, jsStackHeight); |
| if (e.endTime) { |
| openEvents.push(e); |
| - heights.push(level) |
| + jsHeights.push(jsStackHeight); |
| + levels.push(level); |
| } |
| - level += height; |
| + level += 1 + jsHeightDelta; |
| + jsStackHeight += jsHeightDelta; |
| maxStackDepth = Math.max(maxStackDepth, level); |
| } |
| this._currentLevel += maxStackDepth; |
| @@ -606,14 +611,14 @@ WebInspector.TracingBasedTimelineFlameChartDataProvider.prototype = { |
| /** |
| * @param {!WebInspector.TracingModel.Event} event |
| - * @param {number} baseLevel |
| + * @param {number} level |
| + * @param {number} jsStackHeight |
| * @return {number} |
| */ |
| - _processEvent: function(event, baseLevel) |
| + _processEvent: function(event, level, jsStackHeight) |
| { |
| - var level = baseLevel; |
| if (event.stackTrace && WebInspector.experimentsSettings.timelineJSCPUProfile.isEnabled()) { |
| - for (var i = event.stackTrace.length - 1; i >= 0; --i) { |
| + for (var i = event.stackTrace.length - 1; i >= jsStackHeight; --i) { |
| var payload = /** @type {!WebInspector.TracingModel.EventPayload} */ ({ |
| ph: WebInspector.TracingModel.Phase.Complete, |
| cat: WebInspector.TracingModel.DevToolsMetadataEventCategory, |
| @@ -628,8 +633,8 @@ WebInspector.TracingBasedTimelineFlameChartDataProvider.prototype = { |
| this._appendEvent(jsFrameEvent, level++); |
| } |
| } |
| - this._appendEvent(event, level++) |
| - return level - baseLevel; |
| + this._appendEvent(event, level) |
| + return event.stackTrace ? event.stackTrace.length - jsStackHeight : 0; |
|
yurys
2014/07/18 11:16:19
You should always return 0 if the experiment is of
alph
2014/07/18 11:21:57
Good catch!
|
| }, |
| /** |