| Index: third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChart.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChart.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChart.js
|
| index 9ecab49dc33c05781351dcb5f89dc5417531c1b0..093d87e3aefc03b9be00ae9eb488c772b7a6122b 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChart.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChart.js
|
| @@ -75,8 +75,8 @@
|
| this._interactionsHeaderLevel2 = /** @type {!PerfUI.FlameChart.GroupStyle} */
|
| (Object.assign({}, defaultGroupStyle, {padding: 2, nestingLevel: 1}));
|
|
|
| - /** @type {!Map<!SDK.TracingModel.Event, number>} */
|
| - this._flowEventIndexByEvent = new Map();
|
| + /** @type {!Map<string, number>} */
|
| + this._flowEventIndexById = new Map();
|
| }
|
|
|
| /**
|
| @@ -178,7 +178,7 @@
|
| if (!this._model)
|
| return this._timelineData;
|
|
|
| - this._flowEventIndexByEvent.clear();
|
| + this._flowEventIndexById.clear();
|
|
|
| this._minimumBoundary = this._model.minimumRecordTime();
|
| this._timeSpan = this._model.isEmpty() ? 1000 : this._model.maximumRecordTime() - this._minimumBoundary;
|
| @@ -232,9 +232,6 @@
|
| thread => this._appendThreadTimelineData(
|
| thread.name || Common.UIString('Thread %d', thread.id), thread.events, thread.asyncEventsByGroup));
|
|
|
| - this._appendFlowData();
|
| - this._flowEventIndexByEvent.clear();
|
| -
|
| for (let extensionIndex = 0; extensionIndex < this._extensionInfo.length; extensionIndex++)
|
| this._innerAppendExtensionEvents(extensionIndex);
|
|
|
| @@ -248,6 +245,7 @@
|
|
|
| this._markers.sort(compareStartTime);
|
| this._timelineData.markers = this._markers;
|
| + this._flowEventIndexById.clear();
|
|
|
| return this._timelineData;
|
| }
|
| @@ -336,10 +334,11 @@
|
| title = '';
|
| }
|
|
|
| - if (flowEventsEnabled && (e.nextFlow || e.previousFlow))
|
| - this._flowEventIndexByEvent.set(e, this._entryData.length);
|
| var level = this._currentLevel + openEvents.length;
|
| - this._appendEvent(e, level);
|
| + if (flowEventsEnabled)
|
| + this._appendFlowEvent(e, level);
|
| + if (e.phase !== SDK.TracingModel.Phase.FlowEnd)
|
| + this._appendEvent(e, level);
|
| if (!isExtension && TimelineModel.TimelineModel.isMarkerEvent(e))
|
| this._timelineData.entryTotalTimes[this._entryData.length] = undefined;
|
|
|
| @@ -447,32 +446,6 @@
|
| ++this._currentLevel;
|
| }
|
|
|
| - _appendFlowData() {
|
| - var flowPairs = [];
|
| - for (var flowEvent of this._performanceModel.tracingModel().flowHeads()) {
|
| - var lastTime;
|
| - var lastLevel;
|
| - for (; flowEvent; flowEvent = flowEvent.nextFlow) {
|
| - var index = this._flowEventIndexByEvent.get(flowEvent);
|
| - if (typeof index !== 'number')
|
| - continue;
|
| - var level = this._timelineData.entryLevels[index];
|
| - var time = flowEvent.startTime;
|
| - if (lastTime)
|
| - flowPairs.push({startTime: lastTime, startLevel: lastLevel, endTime: time, endLevel: level});
|
| - lastTime = time;
|
| - lastLevel = level;
|
| - }
|
| - }
|
| - flowPairs.sort((a, b) => a.startTime - b.startTime);
|
| - var td = this._timelineData;
|
| - for (var fp of flowPairs) {
|
| - td.flowStartTimes.push(fp.startTime);
|
| - td.flowStartLevels.push(fp.startLevel);
|
| - td.flowEndTimes.push(fp.endTime);
|
| - td.flowEndLevels.push(fp.endLevel);
|
| - }
|
| - }
|
| /**
|
| * @param {number} entryIndex
|
| * @return {!Timeline.TimelineFlameChartEntryType}
|
| @@ -762,6 +735,47 @@
|
| }
|
|
|
| /**
|
| + * @param {!SDK.TracingModel.Event} event
|
| + * @param {number} level
|
| + */
|
| + _appendFlowEvent(event, level) {
|
| + var timelineData = this._timelineData;
|
| + /**
|
| + * @param {!SDK.TracingModel.Event} event
|
| + * @return {number}
|
| + */
|
| + function pushStartFlow(event) {
|
| + var flowIndex = timelineData.flowStartTimes.length;
|
| + timelineData.flowStartTimes.push(event.startTime);
|
| + timelineData.flowStartLevels.push(level);
|
| + return flowIndex;
|
| + }
|
| +
|
| + /**
|
| + * @param {!SDK.TracingModel.Event} event
|
| + * @param {number} flowIndex
|
| + */
|
| + function pushEndFlow(event, flowIndex) {
|
| + timelineData.flowEndTimes[flowIndex] = event.startTime;
|
| + timelineData.flowEndLevels[flowIndex] = level;
|
| + }
|
| +
|
| + switch (event.phase) {
|
| + case SDK.TracingModel.Phase.FlowBegin:
|
| + this._flowEventIndexById.set(event.id, pushStartFlow(event));
|
| + break;
|
| + case SDK.TracingModel.Phase.FlowStep:
|
| + pushEndFlow(event, this._flowEventIndexById.get(event.id));
|
| + this._flowEventIndexById.set(event.id, pushStartFlow(event));
|
| + break;
|
| + case SDK.TracingModel.Phase.FlowEnd:
|
| + pushEndFlow(event, this._flowEventIndexById.get(event.id));
|
| + this._flowEventIndexById.delete(event.id);
|
| + break;
|
| + }
|
| + }
|
| +
|
| + /**
|
| * @param {!TimelineModel.TimelineFrame} frame
|
| */
|
| _appendFrame(frame) {
|
|
|