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

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

Issue 1315373005: DevTools: remove most convenience wrappers from WI.TimelineModel.Record (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 3 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 29 matching lines...) Expand all
40 { 40 {
41 WebInspector.Object.call(this); 41 WebInspector.Object.call(this);
42 this._filters = []; 42 this._filters = [];
43 this._tracingModel = tracingModel; 43 this._tracingModel = tracingModel;
44 this._recordFilter = recordFilter; 44 this._recordFilter = recordFilter;
45 this._targets = []; 45 this._targets = [];
46 this.reset(); 46 this.reset();
47 WebInspector.targetManager.observeTargets(this); 47 WebInspector.targetManager.observeTargets(this);
48 } 48 }
49 49
50 /**
51 * @enum {string}
52 */
50 WebInspector.TimelineModel.RecordType = { 53 WebInspector.TimelineModel.RecordType = {
51 Task: "Task", 54 Task: "Task",
52 Program: "Program", 55 Program: "Program",
53 EventDispatch: "EventDispatch", 56 EventDispatch: "EventDispatch",
54 57
55 GPUTask: "GPUTask", 58 GPUTask: "GPUTask",
56 59
57 Animation: "Animation", 60 Animation: "Animation",
58 RequestMainThreadFrame: "RequestMainThreadFrame", 61 RequestMainThreadFrame: "RequestMainThreadFrame",
59 BeginFrame: "BeginFrame", 62 BeginFrame: "BeginFrame",
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 * @return {boolean} 250 * @return {boolean}
248 */ 251 */
249 isWorker: function() 252 isWorker: function()
250 { 253 {
251 return this.name === WebInspector.TimelineModel.WorkerThreadName; 254 return this.name === WebInspector.TimelineModel.WorkerThreadName;
252 } 255 }
253 } 256 }
254 257
255 /** 258 /**
256 * @constructor 259 * @constructor
257 * @param {!WebInspector.TimelineModel} model
258 * @param {!WebInspector.TracingModel.Event} traceEvent 260 * @param {!WebInspector.TracingModel.Event} traceEvent
259 */ 261 */
260 WebInspector.TimelineModel.Record = function(model, traceEvent) 262 WebInspector.TimelineModel.Record = function(traceEvent)
261 { 263 {
262 this._model = model;
263 this._event = traceEvent; 264 this._event = traceEvent;
264 traceEvent._timelineRecord = this;
265 this._children = []; 265 this._children = [];
266 } 266 }
267 267
268 /** 268 /**
269 * @param {!WebInspector.TimelineModel.Record} a 269 * @param {!WebInspector.TimelineModel.Record} a
270 * @param {!WebInspector.TimelineModel.Record} b 270 * @param {!WebInspector.TimelineModel.Record} b
271 * @return {number} 271 * @return {number}
272 */ 272 */
273 WebInspector.TimelineModel.Record._compareStartTime = function(a, b) 273 WebInspector.TimelineModel.Record._compareStartTime = function(a, b)
274 { 274 {
275 // Never return 0 as otherwise equal records would be merged. 275 // Never return 0 as otherwise equal records would be merged.
276 return a.startTime() <= b.startTime() ? -1 : 1; 276 return a.startTime() <= b.startTime() ? -1 : 1;
277 } 277 }
278 278
279 WebInspector.TimelineModel.Record.prototype = { 279 WebInspector.TimelineModel.Record.prototype = {
280 /** 280 /**
281 * @return {?Array.<!ConsoleAgent.CallFrame>}
282 */
283 callSiteStackTrace: function()
284 {
285 var initiator = this._event.initiator;
286 return initiator ? initiator.stackTrace : null;
287 },
288
289 /**
290 * @return {?WebInspector.TimelineModel.Record}
291 */
292 initiator: function()
293 {
294 var initiator = this._event.initiator;
295 return initiator ? initiator._timelineRecord : null;
296 },
297
298 /**
299 * @return {?WebInspector.Target} 281 * @return {?WebInspector.Target}
300 */ 282 */
301 target: function() 283 target: function()
302 { 284 {
303 var threadName = this._event.thread.name(); 285 var threadName = this._event.thread.name();
304 //FIXME: correctly specify target 286 //FIXME: correctly specify target
305 return threadName === WebInspector.TimelineModel.RendererMainThreadName ? WebInspector.targetManager.targets()[0] || null : null; 287 return threadName === WebInspector.TimelineModel.RendererMainThreadName ? WebInspector.targetManager.targets()[0] || null : null;
306 }, 288 },
307 289
308 /** 290 /**
309 * @return {number}
310 */
311 selfTime: function()
312 {
313 return this._event.selfTime;
314 },
315
316 /**
317 * @return {!Array.<!WebInspector.TimelineModel.Record>} 291 * @return {!Array.<!WebInspector.TimelineModel.Record>}
318 */ 292 */
319 children: function() 293 children: function()
320 { 294 {
321 return this._children; 295 return this._children;
322 }, 296 },
323 297
324 /** 298 /**
325 * @return {number} 299 * @return {number}
326 */ 300 */
327 startTime: function() 301 startTime: function()
328 { 302 {
329 return this._event.startTime; 303 return this._event.startTime;
330 }, 304 },
331 305
332 /** 306 /**
307 * @return {number}
308 */
309 endTime: function()
310 {
311 return this._event.endTime || this._event.startTime;
312 },
313
314 /**
333 * @return {string} 315 * @return {string}
334 */ 316 */
335 thread: function() 317 thread: function()
336 { 318 {
337 if (this._event.thread.name() === WebInspector.TimelineModel.RendererMai nThreadName) 319 if (this._event.thread.name() === WebInspector.TimelineModel.RendererMai nThreadName)
338 return WebInspector.TimelineModel.MainThreadName; 320 return WebInspector.TimelineModel.MainThreadName;
339 return this._event.thread.name(); 321 return this._event.thread.name();
340 }, 322 },
341 323
342 /** 324 /**
343 * @return {number} 325 * @return {!WebInspector.TimelineModel.RecordType}
344 */
345 endTime: function()
346 {
347 return this._endTime || this._event.endTime || this._event.startTime;
348 },
349
350 /**
351 * @param {number} endTime
352 */
353 setEndTime: function(endTime)
354 {
355 this._endTime = endTime;
356 },
357
358 /**
359 * @return {!Object}
360 */
361 data: function()
362 {
363 return this._event.args["data"];
364 },
365
366 /**
367 * @return {string}
368 */ 326 */
369 type: function() 327 type: function()
370 { 328 {
371 if (this._event.hasCategory(WebInspector.TracingModel.ConsoleEventCatego ry)) 329 if (this._event.hasCategory(WebInspector.TracingModel.ConsoleEventCatego ry))
372 return WebInspector.TimelineModel.RecordType.ConsoleTime; 330 return WebInspector.TimelineModel.RecordType.ConsoleTime;
373 return this._event.name; 331 return /** @type !WebInspector.TimelineModel.RecordType */ (this._event. name);
374 }, 332 },
375 333
376 /** 334 /**
377 * @return {string}
378 */
379 frameId: function()
380 {
381 switch (this._event.name) {
382 case WebInspector.TimelineModel.RecordType.UpdateLayoutTree:
383 case WebInspector.TimelineModel.RecordType.RecalculateStyles:
384 case WebInspector.TimelineModel.RecordType.Layout:
385 return this._event.args["beginData"]["frame"];
386 default:
387 var data = this._event.args["data"];
388 return (data && data["frame"]) || "";
389 }
390 },
391
392 /**
393 * @return {?Array.<!ConsoleAgent.CallFrame>}
394 */
395 stackTrace: function()
396 {
397 return this._event.stackTrace;
398 },
399
400 /**
401 * @param {string} key 335 * @param {string} key
402 * @return {?Object} 336 * @return {?Object}
403 */ 337 */
404 getUserObject: function(key) 338 getUserObject: function(key)
405 { 339 {
406 if (key === "TimelineUIUtils::preview-element") 340 if (key === "TimelineUIUtils::preview-element")
407 return this._event.previewElement; 341 return this._event.previewElement;
408 throw new Error("Unexpected key: " + key); 342 throw new Error("Unexpected key: " + key);
409 }, 343 },
410 344
411 /** 345 /**
412 * @param {string} key 346 * @param {string} key
413 * @param {?Object|undefined} value 347 * @param {?Object|undefined} value
414 */ 348 */
415 setUserObject: function(key, value) 349 setUserObject: function(key, value)
416 { 350 {
417 if (key !== "TimelineUIUtils::preview-element") 351 if (key !== "TimelineUIUtils::preview-element")
418 throw new Error("Unexpected key: " + key); 352 throw new Error("Unexpected key: " + key);
419 this._event.previewElement = /** @type {?Element} */ (value); 353 this._event.previewElement = /** @type {?Element} */ (value);
420 }, 354 },
421 355
422 /** 356 /**
423 * @return {?Array.<string>}
424 */
425 warnings: function()
426 {
427 if (this._event.warning)
428 return [this._event.warning];
429 return null;
430 },
431
432 /**
433 * @return {!WebInspector.TracingModel.Event} 357 * @return {!WebInspector.TracingModel.Event}
434 */ 358 */
435 traceEvent: function() 359 traceEvent: function()
436 { 360 {
437 return this._event; 361 return this._event;
438 }, 362 },
439 363
440 /** 364 /**
441 * @param {!WebInspector.TimelineModel.Record} child 365 * @param {!WebInspector.TimelineModel.Record} child
442 */ 366 */
443 _addChild: function(child) 367 _addChild: function(child)
444 { 368 {
445 this._children.push(child); 369 this._children.push(child);
446 child.parent = this; 370 child.parent = this;
447 }, 371 },
448
449 /**
450 * @return {!WebInspector.TimelineModel}
451 */
452 timelineModel: function()
453 {
454 return this._model;
455 }
456 } 372 }
457 373
458 /** @typedef {!{page: !Array<!WebInspector.TracingModel.Event>, workers: !Array< !WebInspector.TracingModel.Event>}} */ 374 /** @typedef {!{page: !Array<!WebInspector.TracingModel.Event>, workers: !Array< !WebInspector.TracingModel.Event>}} */
459 WebInspector.TimelineModel.MetadataEvents; 375 WebInspector.TimelineModel.MetadataEvents;
460 376
461 WebInspector.TimelineModel.prototype = { 377 WebInspector.TimelineModel.prototype = {
462 /** 378 /**
463 * @param {boolean} captureCauses 379 * @param {boolean} captureCauses
464 * @param {boolean} enableJSSampling 380 * @param {boolean} enableJSSampling
465 * @param {boolean} captureMemory 381 * @param {boolean} captureMemory
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
930 846
931 // First Paint is actually a DrawFrame that happened after first Composi teLayers following last CommitLoadEvent. 847 // First Paint is actually a DrawFrame that happened after first Composi teLayers following last CommitLoadEvent.
932 var recordTypes = WebInspector.TimelineModel.RecordType; 848 var recordTypes = WebInspector.TimelineModel.RecordType;
933 var i = insertionIndexForObjectInListSortedByFunction(this._firstComposi teLayers, this._inspectedTargetEvents, WebInspector.TracingModel.Event.compareSt artTime); 849 var i = insertionIndexForObjectInListSortedByFunction(this._firstComposi teLayers, this._inspectedTargetEvents, WebInspector.TracingModel.Event.compareSt artTime);
934 for (; i < this._inspectedTargetEvents.length && this._inspectedTargetEv ents[i].name !== recordTypes.DrawFrame; ++i) { } 850 for (; i < this._inspectedTargetEvents.length && this._inspectedTargetEv ents[i].name !== recordTypes.DrawFrame; ++i) { }
935 if (i >= this._inspectedTargetEvents.length) 851 if (i >= this._inspectedTargetEvents.length)
936 return; 852 return;
937 var drawFrameEvent = this._inspectedTargetEvents[i]; 853 var drawFrameEvent = this._inspectedTargetEvents[i];
938 var firstPaintEvent = new WebInspector.TracingModel.Event(drawFrameEvent .categoriesString, recordTypes.MarkFirstPaint, WebInspector.TracingModel.Phase.I nstant, drawFrameEvent.startTime, drawFrameEvent.thread); 854 var firstPaintEvent = new WebInspector.TracingModel.Event(drawFrameEvent .categoriesString, recordTypes.MarkFirstPaint, WebInspector.TracingModel.Phase.I nstant, drawFrameEvent.startTime, drawFrameEvent.thread);
939 this._mainThreadEvents.splice(insertionIndexForObjectInListSortedByFunct ion(firstPaintEvent, this._mainThreadEvents, WebInspector.TracingModel.Event.com pareStartTime), 0, firstPaintEvent); 855 this._mainThreadEvents.splice(insertionIndexForObjectInListSortedByFunct ion(firstPaintEvent, this._mainThreadEvents, WebInspector.TracingModel.Event.com pareStartTime), 0, firstPaintEvent);
940 var firstPaintRecord = new WebInspector.TimelineModel.Record(this, first PaintEvent); 856 var firstPaintRecord = new WebInspector.TimelineModel.Record(firstPaintE vent);
941 this._eventDividerRecords.splice(insertionIndexForObjectInListSortedByFu nction(firstPaintRecord, this._eventDividerRecords, WebInspector.TimelineModel.R ecord._compareStartTime), 0, firstPaintRecord); 857 this._eventDividerRecords.splice(insertionIndexForObjectInListSortedByFu nction(firstPaintRecord, this._eventDividerRecords, WebInspector.TimelineModel.R ecord._compareStartTime), 0, firstPaintRecord);
942 }, 858 },
943 859
944 _buildTimelineRecords: function() 860 _buildTimelineRecords: function()
945 { 861 {
946 var topLevelRecords = this._buildTimelineRecordsForThread(this.mainThrea dEvents()); 862 var topLevelRecords = this._buildTimelineRecordsForThread(this.mainThrea dEvents());
947 for (var i = 0; i < topLevelRecords.length; i++) { 863 for (var i = 0; i < topLevelRecords.length; i++) {
948 var record = topLevelRecords[i]; 864 var record = topLevelRecords[i];
949 if (WebInspector.TracingModel.isTopLevelEvent(record.traceEvent())) 865 if (WebInspector.TracingModel.isTopLevelEvent(record.traceEvent()))
950 this._mainThreadTasks.push(record); 866 this._mainThreadTasks.push(record);
(...skipping 17 matching lines...) Expand all
968 var gpuProcess = this._tracingModel.processByName("GPU Process"); 884 var gpuProcess = this._tracingModel.processByName("GPU Process");
969 if (!gpuProcess) 885 if (!gpuProcess)
970 return; 886 return;
971 var mainThread = gpuProcess.threadByName("CrGpuMain"); 887 var mainThread = gpuProcess.threadByName("CrGpuMain");
972 if (!mainThread) 888 if (!mainThread)
973 return; 889 return;
974 var events = mainThread.events(); 890 var events = mainThread.events();
975 var recordTypes = WebInspector.TimelineModel.RecordType; 891 var recordTypes = WebInspector.TimelineModel.RecordType;
976 for (var i = 0; i < events.length; ++i) { 892 for (var i = 0; i < events.length; ++i) {
977 if (events[i].name === recordTypes.GPUTask) 893 if (events[i].name === recordTypes.GPUTask)
978 this._gpuTasks.push(new WebInspector.TimelineModel.Record(this, events[i])); 894 this._gpuTasks.push(new WebInspector.TimelineModel.Record(events [i]));
979 } 895 }
980 }, 896 },
981 897
982 /** 898 /**
983 * @param {!Array.<!WebInspector.TracingModel.Event>} threadEvents 899 * @param {!Array.<!WebInspector.TracingModel.Event>} threadEvents
984 * @return {!Array.<!WebInspector.TimelineModel.Record>} 900 * @return {!Array.<!WebInspector.TimelineModel.Record>}
985 */ 901 */
986 _buildTimelineRecordsForThread: function(threadEvents) 902 _buildTimelineRecordsForThread: function(threadEvents)
987 { 903 {
988 var recordStack = []; 904 var recordStack = [];
989 var topLevelRecords = []; 905 var topLevelRecords = [];
990 906
991 for (var i = 0, size = threadEvents.length; i < size; ++i) { 907 for (var i = 0, size = threadEvents.length; i < size; ++i) {
992 var event = threadEvents[i]; 908 var event = threadEvents[i];
993 for (var top = recordStack.peekLast(); top && top._event.endTime <= event.startTime; top = recordStack.peekLast()) 909 for (var top = recordStack.peekLast(); top && top._event.endTime <= event.startTime; top = recordStack.peekLast())
994 recordStack.pop(); 910 recordStack.pop();
995 if (event.phase === WebInspector.TracingModel.Phase.AsyncEnd || even t.phase === WebInspector.TracingModel.Phase.NestableAsyncEnd) 911 if (event.phase === WebInspector.TracingModel.Phase.AsyncEnd || even t.phase === WebInspector.TracingModel.Phase.NestableAsyncEnd)
996 continue; 912 continue;
997 var parentRecord = recordStack.peekLast(); 913 var parentRecord = recordStack.peekLast();
998 // Maintain the back-end logic of old timeline, skip console.time() / console.timeEnd() that are not properly nested. 914 // Maintain the back-end logic of old timeline, skip console.time() / console.timeEnd() that are not properly nested.
999 if (WebInspector.TracingModel.isAsyncBeginPhase(event.phase) && pare ntRecord && event.endTime > parentRecord._event.endTime) 915 if (WebInspector.TracingModel.isAsyncBeginPhase(event.phase) && pare ntRecord && event.endTime > parentRecord._event.endTime)
1000 continue; 916 continue;
1001 var record = new WebInspector.TimelineModel.Record(this, event); 917 var record = new WebInspector.TimelineModel.Record(event);
1002 if (WebInspector.TimelineUIUtils.isMarkerEvent(event)) 918 if (WebInspector.TimelineUIUtils.isMarkerEvent(event))
1003 this._eventDividerRecords.push(record); 919 this._eventDividerRecords.push(record);
1004 if (!this._recordFilter.accept(record) && !WebInspector.TracingModel .isTopLevelEvent(event)) 920 if (!this._recordFilter.accept(record) && !WebInspector.TracingModel .isTopLevelEvent(event))
1005 continue; 921 continue;
1006 if (parentRecord) 922 if (parentRecord)
1007 parentRecord._addChild(record); 923 parentRecord._addChild(record);
1008 else 924 else
1009 topLevelRecords.push(record); 925 topLevelRecords.push(record);
1010 if (event.endTime) 926 if (event.endTime)
1011 recordStack.push(record); 927 recordStack.push(record);
(...skipping 1444 matching lines...) Expand 10 before | Expand all | Expand 10 after
2456 /** @type {!Object.<string, !Array.<!WebInspector.InvalidationTrackingEv ent>>} */ 2372 /** @type {!Object.<string, !Array.<!WebInspector.InvalidationTrackingEv ent>>} */
2457 this._invalidations = {}; 2373 this._invalidations = {};
2458 /** @type {!Object.<number, !Array.<!WebInspector.InvalidationTrackingEv ent>>} */ 2374 /** @type {!Object.<number, !Array.<!WebInspector.InvalidationTrackingEv ent>>} */
2459 this._invalidationsByNodeId = {}; 2375 this._invalidationsByNodeId = {};
2460 2376
2461 this._lastRecalcStyle = undefined; 2377 this._lastRecalcStyle = undefined;
2462 this._lastPaintWithLayer = undefined; 2378 this._lastPaintWithLayer = undefined;
2463 this._didPaint = false; 2379 this._didPaint = false;
2464 } 2380 }
2465 } 2381 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698