Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/sdk/TracingModel.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/TracingModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/TracingModel.js |
| index 996fc50311f94ae9feac104e0ecd159c9af2f65d..19949d4fd7355281dea85871a7403544f2384afb 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/sdk/TracingModel.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/sdk/TracingModel.js |
| @@ -118,6 +118,13 @@ SDK.TracingModel = class { |
| } |
| /** |
| + * @return {!Array.<!SDK.TracingModel.Event>} |
| + */ |
| + flowHeads() { |
| + return this._flowHeads; |
| + } |
| + |
| + /** |
| * @param {!Array.<!SDK.TracingManager.EventPayload>} events |
| */ |
| setEventsForTest(events) { |
| @@ -136,6 +143,7 @@ SDK.TracingModel = class { |
| tracingComplete() { |
| this._processPendingAsyncEvents(); |
| + this._processFlowEvents(); |
| this._backingStorage.appendString(this._firstWritePending ? '[]' : ']'); |
| this._backingStorage.finishWriting(); |
| this._firstWritePending = false; |
| @@ -162,10 +170,14 @@ SDK.TracingModel = class { |
| this._openAsyncEvents = new Map(); |
| /** @type {!Map<string, !Array<!SDK.TracingModel.AsyncEvent>>} */ |
| this._openNestableAsyncEvents = new Map(); |
| + /** @type {!Map<string, !Array<!SDK.TracingModel.Event>>} */ |
| + this._flowEventsById = new Map(); |
| /** @type {!Map<string, !SDK.TracingModel.ProfileEventsGroup>} */ |
| this._profileGroups = new Map(); |
| /** @type {!Map<string, !Set<string>>} */ |
| this._parsedCategories = new Map(); |
| + /** @type {!Array<!SDK.TracingModel.Event>} */ |
| + this._flowHeads = []; |
| } |
| /** |
| @@ -231,8 +243,18 @@ SDK.TracingModel = class { |
| // Build async event when we've got events from all threads & processes, so we can sort them and process in the |
| // chronological order. However, also add individual async events to the thread flow (above), so we can easily |
| // display them on the same chart as other events, should we choose so. |
| - if (SDK.TracingModel.isAsyncPhase(payload.ph)) |
| + if (SDK.TracingModel.isAsyncPhase(payload.ph)) { |
| this._asyncEvents.push(event); |
| + } else if (SDK.TracingModel.isFlowPhase(payload.ph)) { |
| + var key = `${event.categoriesString}-${event.name}-${event.id}`; |
|
pfeldman
2017/03/16 07:03:50
I don't think categoriesString and event name shou
|
| + var flowEvents = this._flowEventsById.get(key); |
| + if (!flowEvents) { |
| + flowEvents = []; |
| + this._flowEventsById.set(key, flowEvents); |
| + } |
| + flowEvents.push(event); |
| + } |
| + |
| event._setBackingStorage(backingStorage); |
| if (event.hasCategory(SDK.TracingModel.DevToolsMetadataEventCategory)) |
| this._devToolsMetadataEvents.push(event); |
| @@ -329,6 +351,22 @@ SDK.TracingModel = class { |
| this._closeOpenAsyncEvents(); |
| } |
| + _processFlowEvents() { |
| + var phases = SDK.TracingModel.Phase; |
| + for (var events of this._flowEventsById.values()) { |
| + events.stableSort(SDK.TracingModel.Event.compareStartTime); |
| + var lastInChain = null; |
| + for (var e of events) { |
| + if (lastInChain && e.phase !== phases.FlowBegin) |
| + lastInChain._appendFlowEvent(e); |
| + if (!lastInChain && e.phase !== phases.FlowEnd) |
| + this._flowHeads.push(e); |
|
pfeldman
2017/03/16 02:00:22
So if there is no begin, you still consider it a h
|
| + lastInChain = e.phase !== phases.FlowEnd ? e : null; |
|
pfeldman
2017/03/16 02:00:22
why do you need all this logic? it is either begin
|
| + } |
| + } |
| + this._flowEventsById.clear(); |
| + } |
| + |
| _closeOpenAsyncEvents() { |
| for (var event of this._openAsyncEvents.values()) { |
| event.setEndTime(this._maximumRecordTime); |
| @@ -525,6 +563,10 @@ SDK.TracingModel.Event = class { |
| this.thread = thread; |
| /** @type {!Object} */ |
| this.args = {}; |
| + /** @type {!SDK.TracingModel.Event|undefined} */ |
| + this.nextFlow; |
| + /** @type {!SDK.TracingModel.Event|undefined} */ |
| + this.previousFlow; |
| /** @type {number} */ |
| this.selfTime = 0; |
| @@ -628,6 +670,14 @@ SDK.TracingModel.Event = class { |
| } |
| /** |
| + * @param {!SDK.TracingModel.Event} nextFlow |
| + */ |
| + _appendFlowEvent(nextFlow) { |
| + this.nextFlow = nextFlow; |
| + nextFlow.previousFlow = this; |
| + } |
| + |
| + /** |
| * @param {?function():!Promise.<?string>} backingStorage |
| */ |
| _setBackingStorage(backingStorage) { |