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

Side by Side Diff: Source/devtools/front_end/timeline/TracingModel.js

Issue 301593002: DevTools: process events from all threads in TimelineTraceEventBindings (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: review comments addressed Created 6 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « Source/devtools/front_end/timeline/TimelineTracingView.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2014 The Chromium Authors. All rights reserved. 2 * Copyright 2014 The Chromium Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be 3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file. 4 * found in the LICENSE file.
5 */ 5 */
6 6
7 /** 7 /**
8 * @constructor 8 * @constructor
9 * @extends {WebInspector.TargetAwareObject} 9 * @extends {WebInspector.TargetAwareObject}
10 */ 10 */
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 ThreadSortIndex: "thread_sort_index", 64 ThreadSortIndex: "thread_sort_index",
65 ThreadName: "thread_name" 65 ThreadName: "thread_name"
66 } 66 }
67 67
68 WebInspector.TracingModel.DevToolsMetadataEventCategory = "disabled-by-default-d evtools.timeline"; 68 WebInspector.TracingModel.DevToolsMetadataEventCategory = "disabled-by-default-d evtools.timeline";
69 69
70 WebInspector.TracingModel.FrameLifecycleEventCategory = "cc,devtools"; 70 WebInspector.TracingModel.FrameLifecycleEventCategory = "cc,devtools";
71 71
72 WebInspector.TracingModel.DevToolsMetadataEvent = { 72 WebInspector.TracingModel.DevToolsMetadataEvent = {
73 TracingStartedInPage: "TracingStartedInPage", 73 TracingStartedInPage: "TracingStartedInPage",
74 SetLayerTreeId: "SetLayerTreeId"
75 };
76
77 WebInspector.TracingModel.TraceEventName = {
78 ActivateLayerTree: "ActivateLayerTree",
79 BeginFrame: "BeginFrame",
80 BeginMainThreadFrame: "BeginMainThreadFrame",
81 CompositeLayers: "CompositeLayers",
82 DrawFrame: "DrawFrame",
83 PaintSetup: "PaintSetup",
84 RasterTask: "RasterTask",
85 RequestMainThreadFrame: "RequestMainThreadFrame",
86 LayerTreeHostImplSnapshot: "cc::LayerTreeHostImpl"
87 }; 74 };
88 75
89 WebInspector.TracingModel.prototype = { 76 WebInspector.TracingModel.prototype = {
90 /** 77 /**
91 * @return {!Array.<!WebInspector.TracingModel.Event>} 78 * @return {!Array.<!WebInspector.TracingModel.Event>}
92 */ 79 */
93 inspectedTargetMainThreadEvents: function() 80 inspectedTargetEvents: function()
94 { 81 {
95 return this._inspectedTargetMainThreadEvents; 82 return this._inspectedTargetEvents;
96 }, 83 },
97 84
98 /** 85 /**
99 * @return {!Array.<!WebInspector.TracingModel.Event>}
100 */
101 frameLifecycleEvents: function()
102 {
103 /**
104 * @param {!WebInspector.TracingModel.Event} a
105 * @param {!WebInspector.TracingModel.Event} b
106 */
107 function compareStartTime(a, b)
108 {
109 return a.startTime - b.startTime;
110 }
111 return this._frameLifecycleEvents.sort(compareStartTime);
112 },
113
114 /**
115 * @param {string} categoryFilter 86 * @param {string} categoryFilter
116 * @param {string} options 87 * @param {string} options
117 * @param {function(?string)=} callback 88 * @param {function(?string)=} callback
118 */ 89 */
119 start: function(categoryFilter, options, callback) 90 start: function(categoryFilter, options, callback)
120 { 91 {
121 this.reset(); 92 this.reset();
122 var bufferUsageReportingIntervalMs = 500; 93 var bufferUsageReportingIntervalMs = 500;
123 /** 94 /**
124 * @param {?string} error 95 * @param {?string} error
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 */ 148 */
178 _eventsCollected: function(events) 149 _eventsCollected: function(events)
179 { 150 {
180 for (var i = 0; i < events.length; ++i) 151 for (var i = 0; i < events.length; ++i)
181 this._addEvent(events[i]); 152 this._addEvent(events[i]);
182 }, 153 },
183 154
184 _tracingComplete: function() 155 _tracingComplete: function()
185 { 156 {
186 this._active = false; 157 this._active = false;
158
159 /**
160 * @param {!WebInspector.TracingModel.Event} a
161 * @param {!WebInspector.TracingModel.Event} b
162 */
163 function compareStartTime(a, b)
164 {
165 return a.startTime - b.startTime;
166 }
167
168 this._inspectedTargetEvents.sort(compareStartTime);
187 if (!this._pendingStopCallback) 169 if (!this._pendingStopCallback)
188 return; 170 return;
189 this._pendingStopCallback(); 171 this._pendingStopCallback();
190 this._pendingStopCallback = null; 172 this._pendingStopCallback = null;
191 }, 173 },
192 174
193 reset: function() 175 reset: function()
194 { 176 {
195 this._processById = {}; 177 this._processById = {};
196 this._minimumRecordTime = null; 178 this._minimumRecordTime = null;
197 this._maximumRecordTime = null; 179 this._maximumRecordTime = null;
198 this._sessionId = null; 180 this._sessionId = null;
199 this._inspectedTargetProcessId = null; 181 this._inspectedTargetProcessId = null;
200 this._inspectedTargetMainThread = null; 182 this._inspectedTargetEvents = [];
201 this._inspectedTargetMainThreadEvents = [];
202 this._inspectedTargetLayerTreeHostId = 0;
203 this._frameLifecycleEvents = [];
204 }, 183 },
205 184
206 /** 185 /**
207 * @param {!WebInspector.TracingModel.EventPayload} payload 186 * @param {!WebInspector.TracingModel.EventPayload} payload
208 */ 187 */
209 _addEvent: function(payload) 188 _addEvent: function(payload)
210 { 189 {
211 var process = this._processById[payload.pid]; 190 var process = this._processById[payload.pid];
212 if (!process) { 191 if (!process) {
213 process = new WebInspector.TracingModel.Process(payload.pid); 192 process = new WebInspector.TracingModel.Process(payload.pid);
214 this._processById[payload.pid] = process; 193 this._processById[payload.pid] = process;
215 } 194 }
195 var thread = process.threadById(payload.tid);
216 if (payload.ph === WebInspector.TracingModel.Phase.SnapshotObject) { 196 if (payload.ph === WebInspector.TracingModel.Phase.SnapshotObject) {
217 process.addObject(payload); 197 var event = new WebInspector.TracingModel.Event(payload, 0, thread);
218 if (payload.pid === this._inspectedTargetProcessId && payload.name = == "cc::LayerTreeHostImpl" && parseInt(payload.id, 0) === this._inspectedTargetL ayerTreeId) 198 process.addObject(event);
219 this._frameLifecycleEvents.push(new WebInspector.TracingModel.Ev ent(payload, 0)); 199 if (payload.pid === this._inspectedTargetProcessId)
200 this._inspectedTargetEvents.push(event);
220 return; 201 return;
221 } 202 }
222 var thread = process.threadById(payload.tid);
223 if (payload.ph !== WebInspector.TracingModel.Phase.Metadata) { 203 if (payload.ph !== WebInspector.TracingModel.Phase.Metadata) {
224 var timestamp = payload.ts; 204 var timestamp = payload.ts;
225 // We do allow records for unrelated threads to arrive out-of-order, 205 // We do allow records for unrelated threads to arrive out-of-order,
226 // so there's a chance we're getting records from the past. 206 // so there's a chance we're getting records from the past.
227 if (timestamp && (!this._minimumRecordTime || timestamp < this._mini mumRecordTime)) 207 if (timestamp && (!this._minimumRecordTime || timestamp < this._mini mumRecordTime))
228 this._minimumRecordTime = timestamp; 208 this._minimumRecordTime = timestamp;
229 if (!this._maximumRecordTime || timestamp > this._maximumRecordTime) 209 if (!this._maximumRecordTime || timestamp > this._maximumRecordTime)
230 this._maximumRecordTime = timestamp; 210 this._maximumRecordTime = timestamp;
231 if (payload.cat === WebInspector.TracingModel.DevToolsMetadataEventC ategory) 211 if (payload.cat === WebInspector.TracingModel.DevToolsMetadataEventC ategory)
232 this._processDevToolsMetadataEvent(payload); 212 this._processDevToolsMetadataEvent(payload);
233 var event = thread.addEvent(payload); 213 var event = thread.addEvent(payload);
234 if (!event) 214 if (event && payload.pid === this._inspectedTargetProcessId)
235 return; 215 this._inspectedTargetEvents.push(event);
236 if (thread === this._inspectedTargetMainThread)
237 this._inspectedTargetMainThreadEvents.push(event);
238 if (payload.cat === WebInspector.TracingModel.FrameLifecycleEventCat egory && payload.pid === this._inspectedTargetProcessId && payload.args && paylo ad.args["layerTreeId"] === this._inspectedTargetLayerTreeId)
239 this._frameLifecycleEvents.push(event);
240 return; 216 return;
241 } 217 }
242 switch (payload.name) { 218 switch (payload.name) {
243 case WebInspector.TracingModel.MetadataEvent.ProcessSortIndex: 219 case WebInspector.TracingModel.MetadataEvent.ProcessSortIndex:
244 process._setSortIndex(payload.args["sort_index"]); 220 process._setSortIndex(payload.args["sort_index"]);
245 break; 221 break;
246 case WebInspector.TracingModel.MetadataEvent.ProcessName: 222 case WebInspector.TracingModel.MetadataEvent.ProcessName:
247 process._setName(payload.args["name"]); 223 process._setName(payload.args["name"]);
248 break; 224 break;
249 case WebInspector.TracingModel.MetadataEvent.ThreadSortIndex: 225 case WebInspector.TracingModel.MetadataEvent.ThreadSortIndex:
250 thread._setSortIndex(payload.args["sort_index"]); 226 thread._setSortIndex(payload.args["sort_index"]);
251 break; 227 break;
252 case WebInspector.TracingModel.MetadataEvent.ThreadName: 228 case WebInspector.TracingModel.MetadataEvent.ThreadName:
253 thread._setName(payload.args["name"]); 229 thread._setName(payload.args["name"]);
254 break; 230 break;
255 } 231 }
256 }, 232 },
257 233
258 /** 234 /**
259 * @param {!WebInspector.TracingModel.EventPayload} payload 235 * @param {!WebInspector.TracingModel.EventPayload} payload
260 */ 236 */
261 _processDevToolsMetadataEvent: function(payload) 237 _processDevToolsMetadataEvent: function(payload)
262 { 238 {
263 if (payload.args["sessionId"] !== this._sessionId) 239 if (payload.args["sessionId"] !== this._sessionId || payload.name !== We bInspector.TracingModel.DevToolsMetadataEvent.TracingStartedInPage)
264 return; 240 return;
265 if (payload.name === WebInspector.TracingModel.DevToolsMetadataEvent.Tra cingStartedInPage) { 241 this._inspectedTargetProcessId = payload.pid;
266 var thread = this._processById[payload.pid].threadById(payload.tid)
267 this._inspectedTargetProcessId = payload.pid;
268 this._inspectedTargetMainThread = thread;
269 this._inspectedTargetMainThreadEvents = this._inspectedTargetMainThr eadEvents.concat(thread.events());
270 } else if (payload.name === WebInspector.TracingModel.DevToolsMetadataEv ent.SetLayerTreeId) {
271 this._inspectedTargetLayerTreeId = payload.args["layerTreeId"];
272 }
273 }, 242 },
274 243
275 /** 244 /**
276 * @return {?number} 245 * @return {?number}
277 */ 246 */
278 minimumRecordTime: function() 247 minimumRecordTime: function()
279 { 248 {
280 return this._minimumRecordTime; 249 return this._minimumRecordTime;
281 }, 250 },
282 251
(...skipping 13 matching lines...) Expand all
296 return WebInspector.TracingModel.NamedObject._sort(Object.values(this._p rocessById)); 265 return WebInspector.TracingModel.NamedObject._sort(Object.values(this._p rocessById));
297 }, 266 },
298 267
299 __proto__: WebInspector.TargetAwareObject.prototype 268 __proto__: WebInspector.TargetAwareObject.prototype
300 } 269 }
301 270
302 /** 271 /**
303 * @constructor 272 * @constructor
304 * @param {!WebInspector.TracingModel.EventPayload} payload 273 * @param {!WebInspector.TracingModel.EventPayload} payload
305 * @param {number} level 274 * @param {number} level
275 * @param {?WebInspector.TracingModel.Thread} thread
306 */ 276 */
307 WebInspector.TracingModel.Event = function(payload, level) 277 WebInspector.TracingModel.Event = function(payload, level, thread)
308 { 278 {
309 this.name = payload.name; 279 this.name = payload.name;
310 this.category = payload.cat; 280 this.category = payload.cat;
311 this.startTime = payload.ts; 281 this.startTime = payload.ts;
312 this.args = payload.args; 282 this.args = payload.args;
313 this.phase = payload.ph; 283 this.phase = payload.ph;
314 this.level = level; 284 this.level = level;
315 285
286 if (payload.id)
287 this.id = payload.id;
288
289 this.thread = thread;
290
316 /** @type {?string} */ 291 /** @type {?string} */
317 this.warning = null; 292 this.warning = null;
318 /** @type {?WebInspector.TracingModel.Event} */ 293 /** @type {?WebInspector.TracingModel.Event} */
319 this.initiator = null; 294 this.initiator = null;
320 /** @type {?Array.<!ConsoleAgent.CallFrame>} */ 295 /** @type {?Array.<!ConsoleAgent.CallFrame>} */
321 this.stackTrace = null; 296 this.stackTrace = null;
322 /** @type {?Element} */ 297 /** @type {?Element} */
323 this.previewElement = null; 298 this.previewElement = null;
324 /** @type {number} */ 299 /** @type {number} */
325 this.selfTime = 0; 300 this.selfTime = 0;
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 { 407 {
433 var thread = this._threads[id]; 408 var thread = this._threads[id];
434 if (!thread) { 409 if (!thread) {
435 thread = new WebInspector.TracingModel.Thread(id); 410 thread = new WebInspector.TracingModel.Thread(id);
436 this._threads[id] = thread; 411 this._threads[id] = thread;
437 } 412 }
438 return thread; 413 return thread;
439 }, 414 },
440 415
441 /** 416 /**
442 * @param {!WebInspector.TracingModel.EventPayload} event 417 * @param {!WebInspector.TracingModel.Event} event
443 */ 418 */
444 addObject: function(event) 419 addObject: function(event)
445 { 420 {
446 this.objectsByName(event.name).push(new WebInspector.TracingModel.Event( event, 0)); 421 this.objectsByName(event.name).push(event);
447 }, 422 },
448 423
449 /** 424 /**
450 * @param {string} name 425 * @param {string} name
451 * @return {!Array.<!WebInspector.TracingModel.Event>} 426 * @return {!Array.<!WebInspector.TracingModel.Event>}
452 */ 427 */
453 objectsByName: function(name) 428 objectsByName: function(name)
454 { 429 {
455 var objects = this._objects[name]; 430 var objects = this._objects[name];
456 if (!objects) { 431 if (!objects) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 top = this._stack.peekLast(); 480 top = this._stack.peekLast();
506 } 481 }
507 if (payload.ph === WebInspector.TracingModel.Phase.End) { 482 if (payload.ph === WebInspector.TracingModel.Phase.End) {
508 var openEvent = this._stack.pop(); 483 var openEvent = this._stack.pop();
509 // Quietly ignore unbalanced close events, they're legit (we could h ave missed start one). 484 // Quietly ignore unbalanced close events, they're legit (we could h ave missed start one).
510 if (openEvent) 485 if (openEvent)
511 openEvent._complete(payload); 486 openEvent._complete(payload);
512 return null; 487 return null;
513 } 488 }
514 489
515 var event = new WebInspector.TracingModel.Event(payload, this._stack.len gth); 490 var event = new WebInspector.TracingModel.Event(payload, this._stack.len gth, this);
516 if (payload.ph === WebInspector.TracingModel.Phase.Begin || payload.ph = == WebInspector.TracingModel.Phase.Complete) { 491 if (payload.ph === WebInspector.TracingModel.Phase.Begin || payload.ph = == WebInspector.TracingModel.Phase.Complete) {
517 if (payload.ph === WebInspector.TracingModel.Phase.Complete) 492 if (payload.ph === WebInspector.TracingModel.Phase.Complete)
518 event._setDuration(payload.dur); 493 event._setDuration(payload.dur);
519 this._stack.push(event); 494 this._stack.push(event);
520 if (this._maxStackDepth < this._stack.length) 495 if (this._maxStackDepth < this._stack.length)
521 this._maxStackDepth = this._stack.length; 496 this._maxStackDepth = this._stack.length;
522 } 497 }
523 if (this._events.length && this._events.peekLast().startTime > event.sta rtTime) 498 if (this._events.length && this._events.peekLast().startTime > event.sta rtTime)
524 console.assert(false, "Event is our of order: " + event.name); 499 console.assert(false, "Event is our of order: " + event.name);
525 this._events.push(event); 500 this._events.push(event);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 dataCollected: function(data) 547 dataCollected: function(data)
573 { 548 {
574 this._tracingModel._eventsCollected(data); 549 this._tracingModel._eventsCollected(data);
575 }, 550 },
576 551
577 tracingComplete: function() 552 tracingComplete: function()
578 { 553 {
579 this._tracingModel._tracingComplete(); 554 this._tracingModel._tracingComplete();
580 } 555 }
581 } 556 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/timeline/TimelineTracingView.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698