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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModel.js

Issue 2073343002: Timeline addTraceProvider API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: timelineFlameChart.js Created 4 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 LatencyInfoFlow: "LatencyInfo.Flow", 153 LatencyInfoFlow: "LatencyInfo.Flow",
154 InputLatencyMouseMove: "InputLatency::MouseMove", 154 InputLatencyMouseMove: "InputLatency::MouseMove",
155 InputLatencyMouseWheel: "InputLatency::MouseWheel", 155 InputLatencyMouseWheel: "InputLatency::MouseWheel",
156 ImplSideFling: "InputHandlerProxy::HandleGestureFling::started", 156 ImplSideFling: "InputHandlerProxy::HandleGestureFling::started",
157 GCIdleLazySweep: "ThreadState::performIdleLazySweep", 157 GCIdleLazySweep: "ThreadState::performIdleLazySweep",
158 GCCompleteSweep: "ThreadState::completeSweep", 158 GCCompleteSweep: "ThreadState::completeSweep",
159 GCCollectGarbage: "BlinkGCMarking", 159 GCCollectGarbage: "BlinkGCMarking",
160 160
161 // CpuProfile is a virtual event created on frontend to support 161 // CpuProfile is a virtual event created on frontend to support
162 // serialization of CPU Profiles within tracing timeline data. 162 // serialization of CPU Profiles within tracing timeline data.
163 CpuProfile: "CpuProfile" 163 CpuProfile: "CpuProfile",
164
165 Extension: "Extension"
caseq 2016/07/11 18:58:38 This shouldn't be necessary.
164 } 166 }
165 167
166 WebInspector.TimelineModel.Category = { 168 WebInspector.TimelineModel.Category = {
167 Console: "blink.console", 169 Console: "blink.console",
168 UserTiming: "blink.user_timing", 170 UserTiming: "blink.user_timing",
169 LatencyInfo: "latencyInfo" 171 LatencyInfo: "latencyInfo"
170 }; 172 };
171 173
172 /** 174 /**
173 * @enum {string} 175 * @enum {string}
174 */ 176 */
175 WebInspector.TimelineModel.WarningType = { 177 WebInspector.TimelineModel.WarningType = {
176 ForcedStyle: "ForcedStyle", 178 ForcedStyle: "ForcedStyle",
177 ForcedLayout: "ForcedLayout", 179 ForcedLayout: "ForcedLayout",
178 IdleDeadlineExceeded: "IdleDeadlineExceeded", 180 IdleDeadlineExceeded: "IdleDeadlineExceeded",
179 V8Deopt: "V8Deopt" 181 V8Deopt: "V8Deopt"
180 } 182 }
181 183
182 WebInspector.TimelineModel.MainThreadName = "main"; 184 WebInspector.TimelineModel.MainThreadName = "main";
185 WebInspector.TimelineModel.ExtensionThreadName = "extension";
caseq 2016/07/11 18:58:38 ditto.
183 WebInspector.TimelineModel.WorkerThreadName = "DedicatedWorker Thread"; 186 WebInspector.TimelineModel.WorkerThreadName = "DedicatedWorker Thread";
184 WebInspector.TimelineModel.RendererMainThreadName = "CrRendererMain"; 187 WebInspector.TimelineModel.RendererMainThreadName = "CrRendererMain";
185 188
186 /** 189 /**
187 * @enum {symbol} 190 * @enum {symbol}
188 */ 191 */
189 WebInspector.TimelineModel.AsyncEventGroup = { 192 WebInspector.TimelineModel.AsyncEventGroup = {
190 animation: Symbol("animation"), 193 animation: Symbol("animation"),
191 console: Symbol("console"), 194 console: Symbol("console"),
192 userTiming: Symbol("userTiming"), 195 userTiming: Symbol("userTiming"),
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 * @return {?WebInspector.Target} 477 * @return {?WebInspector.Target}
475 */ 478 */
476 target: function() 479 target: function()
477 { 480 {
478 // FIXME: Consider returning null for loaded traces. 481 // FIXME: Consider returning null for loaded traces.
479 return WebInspector.targetManager.targets()[0]; 482 return WebInspector.targetManager.targets()[0];
480 }, 483 },
481 484
482 /** 485 /**
483 * @param {!WebInspector.TracingModel} tracingModel 486 * @param {!WebInspector.TracingModel} tracingModel
487 * @param {!Array.<!WebInspector.ExtensionTraceProvider>} traceProviders
484 * @param {boolean=} produceTraceStartedInPage 488 * @param {boolean=} produceTraceStartedInPage
485 */ 489 */
486 setEvents: function(tracingModel, produceTraceStartedInPage) 490 setEvents: function(tracingModel, traceProviders, produceTraceStartedInPage)
487 { 491 {
488 this.reset(); 492 this.reset();
489 this._resetProcessingState(); 493 this._resetProcessingState();
490 494
491 this._minimumRecordTime = tracingModel.minimumRecordTime(); 495 this._minimumRecordTime = tracingModel.minimumRecordTime();
492 this._maximumRecordTime = tracingModel.maximumRecordTime(); 496 this._maximumRecordTime = tracingModel.maximumRecordTime();
493 497
494 var metadataEvents = this._processMetadataEvents(tracingModel, !!produce TraceStartedInPage); 498 var metadataEvents = this._processMetadataEvents(tracingModel, !!produce TraceStartedInPage);
495 var startTime = 0; 499 var startTime = 0;
496 for (var i = 0, length = metadataEvents.page.length; i < length; i++) { 500 for (var i = 0, length = metadataEvents.page.length; i < length; i++) {
497 var metaEvent = metadataEvents.page[i]; 501 var metaEvent = metadataEvents.page[i];
498 var process = metaEvent.thread.process(); 502 var process = metaEvent.thread.process();
499 var endTime = i + 1 < length ? metadataEvents.page[i + 1].startTime : Infinity; 503 var endTime = i + 1 < length ? metadataEvents.page[i + 1].startTime : Infinity;
500 this._currentPage = metaEvent.args["data"] && metaEvent.args["data"] ["page"]; 504 this._currentPage = metaEvent.args["data"] && metaEvent.args["data"] ["page"];
501 for (var thread of process.sortedThreads()) { 505 for (var thread of process.sortedThreads()) {
502 if (thread.name() === WebInspector.TimelineModel.WorkerThreadNam e && !metadataEvents.workers.some(function(e) { return e.args["data"]["workerThr eadId"] === thread.id(); })) 506 if (thread.name() === WebInspector.TimelineModel.WorkerThreadNam e && !metadataEvents.workers.some(function(e) { return e.args["data"]["workerThr eadId"] === thread.id(); }))
503 continue; 507 continue;
504 this._processThreadEvents(startTime, endTime, metaEvent.thread, thread); 508 this._processThreadEvents(startTime, endTime, metaEvent.thread, thread);
505 } 509 }
506 startTime = endTime; 510 startTime = endTime;
507 } 511 }
508 this._inspectedTargetEvents.sort(WebInspector.TracingModel.Event.compare StartTime); 512 this._inspectedTargetEvents.sort(WebInspector.TracingModel.Event.compare StartTime);
509 513
510 this._processBrowserEvents(tracingModel); 514 this._processBrowserEvents(tracingModel);
515 this._processExtensionEvents(traceProviders);
511 this._buildTimelineRecords(); 516 this._buildTimelineRecords();
512 this._buildGPUEvents(tracingModel); 517 this._buildGPUEvents(tracingModel);
513 this._insertFirstPaintEvent(); 518 this._insertFirstPaintEvent();
514 this._resetProcessingState(); 519 this._resetProcessingState();
515 }, 520 },
516 521
517 /** 522 /**
518 * @param {!WebInspector.TracingModel} tracingModel 523 * @param {!WebInspector.TracingModel} tracingModel
519 * @param {boolean} produceTraceStartedInPage 524 * @param {boolean} produceTraceStartedInPage
520 * @return {!WebInspector.TimelineModel.MetadataEvents} 525 * @return {!WebInspector.TimelineModel.MetadataEvents}
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 if (!browserMain) 626 if (!browserMain)
622 return; 627 return;
623 // Disregard regular events, we don't need them yet, but still process t o get proper metadata. 628 // Disregard regular events, we don't need them yet, but still process t o get proper metadata.
624 browserMain.events().forEach(this._processBrowserEvent, this); 629 browserMain.events().forEach(this._processBrowserEvent, this);
625 /** @type {!Map<!WebInspector.TimelineModel.AsyncEventGroup, !Array<!Web Inspector.TracingModel.AsyncEvent>>} */ 630 /** @type {!Map<!WebInspector.TimelineModel.AsyncEventGroup, !Array<!Web Inspector.TracingModel.AsyncEvent>>} */
626 var asyncEventsByGroup = new Map(); 631 var asyncEventsByGroup = new Map();
627 this._processAsyncEvents(asyncEventsByGroup, browserMain.asyncEvents()); 632 this._processAsyncEvents(asyncEventsByGroup, browserMain.asyncEvents());
628 this._mergeAsyncEvents(this._mainThreadAsyncEventsByGroup, asyncEventsBy Group); 633 this._mergeAsyncEvents(this._mainThreadAsyncEventsByGroup, asyncEventsBy Group);
629 }, 634 },
630 635
636 /**
637 * @param {!Array.<!WebInspector.ExtensionTraceProvider>} traceProviders
638 */
639 _processExtensionEvents: function(traceProviders)
640 {
641 for (var traceProvider of traceProviders) {
642 traceProvider.tracingModel.threadByName("Extension", "Thread 0").eve nts().forEach(function(entry) {
643 this._extensionEvents.push(entry);
644 }, this);
645 }
646 },
647
631 _buildTimelineRecords: function() 648 _buildTimelineRecords: function()
632 { 649 {
633 var topLevelRecords = this._buildTimelineRecordsForThread(this.mainThrea dEvents()); 650 var topLevelRecords = this._buildTimelineRecordsForThread(this.mainThrea dEvents());
634 for (var i = 0; i < topLevelRecords.length; i++) { 651 for (var i = 0; i < topLevelRecords.length; i++) {
635 var record = topLevelRecords[i]; 652 var record = topLevelRecords[i];
636 if (WebInspector.TracingModel.isTopLevelEvent(record.traceEvent())) 653 if (WebInspector.TracingModel.isTopLevelEvent(record.traceEvent()))
637 this._mainThreadTasks.push(record); 654 this._mainThreadTasks.push(record);
638 } 655 }
639 656
640 /** 657 /**
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
1068 events = events.mergeOrdered(source.get(group) || [], WebInspector.T racingModel.Event.compareStartAndEndTime); 1085 events = events.mergeOrdered(source.get(group) || [], WebInspector.T racingModel.Event.compareStartAndEndTime);
1069 target.set(group, events); 1086 target.set(group, events);
1070 } 1087 }
1071 }, 1088 },
1072 1089
1073 reset: function() 1090 reset: function()
1074 { 1091 {
1075 this._virtualThreads = []; 1092 this._virtualThreads = [];
1076 /** @type {!Array<!WebInspector.TracingModel.Event>} */ 1093 /** @type {!Array<!WebInspector.TracingModel.Event>} */
1077 this._mainThreadEvents = []; 1094 this._mainThreadEvents = [];
1095 /** @type {!Array<!WebInspector.TracingModel.Event>} */
1096 this._extensionEvents = [];
1078 /** @type {!Map<!WebInspector.TimelineModel.AsyncEventGroup, !Array<!Web Inspector.TracingModel.AsyncEvent>>} */ 1097 /** @type {!Map<!WebInspector.TimelineModel.AsyncEventGroup, !Array<!Web Inspector.TracingModel.AsyncEvent>>} */
1079 this._mainThreadAsyncEventsByGroup = new Map(); 1098 this._mainThreadAsyncEventsByGroup = new Map();
1080 /** @type {!Array<!WebInspector.TracingModel.Event>} */ 1099 /** @type {!Array<!WebInspector.TracingModel.Event>} */
1081 this._inspectedTargetEvents = []; 1100 this._inspectedTargetEvents = [];
1082 /** @type {!Array<!WebInspector.TimelineModel.Record>} */ 1101 /** @type {!Array<!WebInspector.TimelineModel.Record>} */
1083 this._records = []; 1102 this._records = [];
1084 /** @type {!Array<!WebInspector.TimelineModel.Record>} */ 1103 /** @type {!Array<!WebInspector.TimelineModel.Record>} */
1085 this._mainThreadTasks = []; 1104 this._mainThreadTasks = [];
1086 /** @type {!Array<!WebInspector.TracingModel.Event>} */ 1105 /** @type {!Array<!WebInspector.TracingModel.Event>} */
1087 this._gpuEvents = []; 1106 this._gpuEvents = [];
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1123 1142
1124 /** 1143 /**
1125 * @return {!Array.<!WebInspector.TracingModel.Event>} 1144 * @return {!Array.<!WebInspector.TracingModel.Event>}
1126 */ 1145 */
1127 mainThreadEvents: function() 1146 mainThreadEvents: function()
1128 { 1147 {
1129 return this._mainThreadEvents; 1148 return this._mainThreadEvents;
1130 }, 1149 },
1131 1150
1132 /** 1151 /**
1152 * @return {!Array.<!WebInspector.TracingModel.Event>}
1153 */
1154 extensionEvents: function()
1155 {
1156 return this._extensionEvents;
1157 },
1158
1159 /**
1133 * @param {!Array.<!WebInspector.TracingModel.Event>} events 1160 * @param {!Array.<!WebInspector.TracingModel.Event>} events
1134 */ 1161 */
1135 _setMainThreadEvents: function(events) 1162 _setMainThreadEvents: function(events)
1136 { 1163 {
1137 this._mainThreadEvents = events; 1164 this._mainThreadEvents = events;
1138 }, 1165 },
1139 1166
1140 /** 1167 /**
1141 * @return {!Map<!WebInspector.TimelineModel.AsyncEventGroup, !Array.<!WebIn spector.TracingModel.AsyncEvent>>} 1168 * @return {!Map<!WebInspector.TimelineModel.AsyncEventGroup, !Array.<!WebIn spector.TracingModel.AsyncEvent>>}
1142 */ 1169 */
(...skipping 605 matching lines...) Expand 10 before | Expand all | Expand 10 after
1748 if (!id) 1775 if (!id)
1749 return; 1776 return;
1750 /** @type {!Map<string, !WebInspector.TracingModel.Event>|undefined} */ 1777 /** @type {!Map<string, !WebInspector.TracingModel.Event>|undefined} */
1751 var initiatorMap = this._initiatorByType.get(initiatorType); 1778 var initiatorMap = this._initiatorByType.get(initiatorType);
1752 if (isInitiator) 1779 if (isInitiator)
1753 initiatorMap.set(id, event); 1780 initiatorMap.set(id, event);
1754 else 1781 else
1755 event.initiator = initiatorMap.get(id) || null; 1782 event.initiator = initiatorMap.get(id) || null;
1756 } 1783 }
1757 } 1784 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698