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

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

Issue 320953002: Timeline: split frame model into trace-specific and record-specific parts (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebased and removed extra semicolon Created 6 years, 6 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 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 15 matching lines...) Expand all
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 /** 31 /**
32 * @constructor 32 * @constructor
33 * @extends {WebInspector.TargetAwareObject} 33 * @extends {WebInspector.TargetAwareObject}
34 * @param {!WebInspector.Target} target 34 * @param {!WebInspector.Target} target
35 */ 35 */
36 WebInspector.TimelineFrameModel = function(target) 36 WebInspector.TimelineFrameModelBase = function(target)
37 { 37 {
38 WebInspector.TargetAwareObject.call(this, target); 38 WebInspector.TargetAwareObject.call(this, target);
39 39
40 this.reset(); 40 this.reset();
41 } 41 }
42 42
43 WebInspector.TimelineFrameModel.Events = { 43 WebInspector.TimelineFrameModelBase.prototype = {
44 FrameAdded: "FrameAdded"
45 }
46
47 WebInspector.TimelineFrameModel._mainFrameMarkers = [
48 WebInspector.TimelineModel.RecordType.ScheduleStyleRecalculation,
49 WebInspector.TimelineModel.RecordType.InvalidateLayout,
50 WebInspector.TimelineModel.RecordType.BeginFrame,
51 WebInspector.TimelineModel.RecordType.ScrollLayer
52 ];
53
54 WebInspector.TimelineFrameModel._tracingMainFrameMarkers = [
55 WebInspector.TracingTimelineModel.RecordType.ScheduleStyleRecalculation,
56 WebInspector.TracingTimelineModel.RecordType.InvalidateLayout,
57 WebInspector.TracingTimelineModel.RecordType.BeginMainThreadFrame,
58 WebInspector.TracingTimelineModel.RecordType.ScrollLayer
59 ];
60
61 WebInspector.TimelineFrameModel.prototype = {
62 /** 44 /**
63 * @return {!Array.<!WebInspector.TimelineFrame>} 45 * @return {!Array.<!WebInspector.TimelineFrame>}
64 */ 46 */
65 frames: function() 47 frames: function()
66 { 48 {
67 return this._frames; 49 return this._frames;
68 }, 50 },
69 51
70 /** 52 /**
71 * @param {number} startTime 53 * @param {number} startTime
(...skipping 19 matching lines...) Expand all
91 function compareEndTime(value, object) 73 function compareEndTime(value, object)
92 { 74 {
93 return value - object.endTime; 75 return value - object.endTime;
94 } 76 }
95 var frames = this._frames; 77 var frames = this._frames;
96 var firstFrame = insertionIndexForObjectInListSortedByFunction(startTime , frames, compareEndTime); 78 var firstFrame = insertionIndexForObjectInListSortedByFunction(startTime , frames, compareEndTime);
97 var lastFrame = insertionIndexForObjectInListSortedByFunction(endTime, f rames, compareStartTime); 79 var lastFrame = insertionIndexForObjectInListSortedByFunction(endTime, f rames, compareStartTime);
98 return frames.slice(firstFrame, lastFrame); 80 return frames.slice(firstFrame, lastFrame);
99 }, 81 },
100 82
101 /**
102 * @param {boolean} value
103 */
104 setMergeRecords: function(value)
105 {
106 this._mergeRecords = value;
107 },
108
109 reset: function() 83 reset: function()
110 { 84 {
111 this._mergeRecords = true;
112 this._minimumRecordTime = Infinity; 85 this._minimumRecordTime = Infinity;
113 this._frames = []; 86 this._frames = [];
114 this._lastFrame = null; 87 this._lastFrame = null;
115 this._lastLayerTree = null; 88 this._lastLayerTree = null;
116 this._hasThreadedCompositing = false; 89 this._hasThreadedCompositing = false;
117 this._mainFrameCommitted = false; 90 this._mainFrameCommitted = false;
118 this._mainFrameRequested = false; 91 this._mainFrameRequested = false;
119 this._aggregatedMainThreadWork = null; 92 this._aggregatedMainThreadWork = null;
120 this._mergingBuffer = new WebInspector.TimelineMergingRecordBuffer();
121 }, 93 },
122 94
123 /** 95 /**
124 * @param {!Array.<!WebInspector.TimelineModel.Record>} records
125 */
126 addRecords: function(records)
127 {
128 if (!records.length)
129 return;
130 if (records[0].startTime() < this._minimumRecordTime)
131 this._minimumRecordTime = records[0].startTime();
132 for (var i = 0; i < records.length; ++i)
133 this.addRecord(records[i]);
134 },
135
136 /**
137 * @param {!WebInspector.TimelineModel.Record} record
138 */
139 addRecord: function(record)
140 {
141 var recordTypes = WebInspector.TimelineModel.RecordType;
142 var programRecord = record.type() === recordTypes.Program ? record : nul l;
143
144 // Start collecting main frame
145 if (programRecord) {
146 if (!this._aggregatedMainThreadWork && this._findRecordRecursively(W ebInspector.TimelineFrameModel._mainFrameMarkers, programRecord))
147 this._aggregatedMainThreadWork = {};
148 }
149 /** type {Array.<!WebInspector.TimelineModel.Record>} */
150 var records = [];
151 if (!this._mergeRecords)
152 records = [record];
153 else
154 records = this._mergingBuffer.process(record.thread(), /** type {Arr ay.<!WebInspector.TimelineModel.Record>} */(programRecord ? record.children() || [] : [record]));
155 for (var i = 0; i < records.length; ++i) {
156 if (records[i].thread())
157 this._addBackgroundRecord(records[i]);
158 else
159 this._addMainThreadRecord(programRecord, records[i]);
160 }
161 },
162
163 /**
164 * @param {!Array.<!WebInspector.TracingModel.Event>} events
165 * @param {string} sessionId
166 */
167 addTraceEvents: function(events, sessionId)
168 {
169 this._sessionId = sessionId;
170 for (var i = 0; i < events.length; ++i)
171 this._addTraceEvent(events[i]);
172 },
173
174 /**
175 * @param {!WebInspector.TracingModel.Event} event
176 */
177 _addTraceEvent: function(event)
178 {
179 var eventNames = WebInspector.TracingTimelineModel.RecordType;
180
181 if (event.name === eventNames.SetLayerTreeId) {
182 if (this._sessionId === event.args["sessionId"])
183 this._layerTreeId = event.args["layerTreeId"];
184 return;
185 }
186 if (event.name === eventNames.TracingStartedInPage) {
187 this._mainThread = event.thread;
188 return;
189 }
190 if (event.thread === this._mainThread)
191 this._addMainThreadTraceEvent(event);
192 else
193 this._addBackgroundTraceEvent(event);
194 },
195
196 /**
197 * @param {!WebInspector.TracingModel.Event} event
198 */
199 _addBackgroundTraceEvent: function(event)
200 {
201 var eventNames = WebInspector.TracingTimelineModel.RecordType;
202
203 if (event.phase === WebInspector.TracingModel.Phase.SnapshotObject && ev ent.name === eventNames.LayerTreeHostImplSnapshot && parseInt(event.id, 0) === t his._layerTreeId) {
204 this.handleLayerTreeSnapshot(new WebInspector.DeferredTracingLayerTr ee(this.target(), event.args["snapshot"]["active_tree"]["root_layer"]));
205 return;
206 }
207 if (this._lastFrame && event.selfTime)
208 this._lastFrame._addTimeForCategory(WebInspector.TracingTimelineUIUt ils.eventStyle(event).category.name, event.selfTime);
209
210 if (event.args["layerTreeId"] !== this._layerTreeId)
211 return;
212
213 var timestamp = event.startTime;
214 if (event.name === eventNames.BeginFrame)
215 this.handleBeginFrame(timestamp);
216 else if (event.name === eventNames.DrawFrame)
217 this.handleDrawFrame(timestamp);
218 else if (event.name === eventNames.ActivateLayerTree)
219 this.handleActivateLayerTree();
220 else if (event.name === eventNames.RequestMainThreadFrame)
221 this.handleRequestMainThreadFrame();
222 },
223
224 /**
225 * @param {!WebInspector.TracingModel.Event} event
226 */
227 _addMainThreadTraceEvent: function(event)
228 {
229 var eventNames = WebInspector.TracingTimelineModel.RecordType;
230 var timestamp = event.startTime;
231 var selfTime = event.selfTime || 0;
232
233 if (!this._hasThreadedCompositing) {
234 if (event.name === eventNames.BeginMainThreadFrame)
235 this._startMainThreadFrame(timestamp);
236 if (!this._lastFrame)
237 return;
238 if (!selfTime)
239 return;
240
241 var categoryName = WebInspector.TracingTimelineUIUtils.eventStyle(ev ent).category.name;
242 this._lastFrame._addTimeForCategory(categoryName, selfTime);
243 return;
244 }
245
246 if (!this._aggregatedMainThreadWork && WebInspector.TimelineFrameModel._ tracingMainFrameMarkers.indexOf(event.name) >= 0)
247 this._aggregatedMainThreadWork = {};
248 if (!this._aggregatedMainThreadWork)
249 return;
250
251 if (selfTime) {
252 var categoryName = WebInspector.TracingTimelineUIUtils.eventStyle(ev ent).category.name;
253 this._aggregatedMainThreadWork[categoryName] = (this._aggregatedMain ThreadWork[categoryName] || 0) + selfTime;
254 }
255 if (event.name === eventNames.CompositeLayers && event.args["layerTreeId "] === this._layerTreeId)
256 this.handleCompositeLayers();
257 },
258
259 /**
260 * @param {number} startTime 96 * @param {number} startTime
261 */ 97 */
262 handleBeginFrame: function(startTime) 98 handleBeginFrame: function(startTime)
263 { 99 {
264 if (!this._lastFrame) 100 if (!this._lastFrame)
265 this._startBackgroundFrame(startTime); 101 this._startBackgroundFrame(startTime);
266 }, 102 },
267 103
268 /** 104 /**
269 * @param {number} startTime 105 * @param {number} startTime
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 145
310 /** 146 /**
311 * @param {!WebInspector.DeferredLayerTree} layerTree 147 * @param {!WebInspector.DeferredLayerTree} layerTree
312 */ 148 */
313 handleLayerTreeSnapshot: function(layerTree) 149 handleLayerTreeSnapshot: function(layerTree)
314 { 150 {
315 this._lastLayerTree = layerTree; 151 this._lastLayerTree = layerTree;
316 }, 152 },
317 153
318 /** 154 /**
155 * @param {number} startTime
156 */
157 _startBackgroundFrame: function(startTime)
158 {
159 if (!this._hasThreadedCompositing) {
160 this._lastFrame = null;
161 this._hasThreadedCompositing = true;
162 }
163 if (this._lastFrame)
164 this._flushFrame(this._lastFrame, startTime);
165
166 this._lastFrame = new WebInspector.TimelineFrame(startTime, startTime - this._minimumRecordTime);
167 },
168
169 /**
170 * @param {number} startTime
171 */
172 _startMainThreadFrame: function(startTime)
173 {
174 if (this._lastFrame)
175 this._flushFrame(this._lastFrame, startTime);
176 this._lastFrame = new WebInspector.TimelineFrame(startTime, startTime - this._minimumRecordTime);
177 },
178
179 /**
180 * @param {!WebInspector.TimelineFrame} frame
181 * @param {number} endTime
182 */
183 _flushFrame: function(frame, endTime)
184 {
185 frame._setLayerTree(this._lastLayerTree);
186 frame._setEndTime(endTime);
187 this._frames.push(frame);
188 },
189
190 /**
191 * @param {!Array.<string>} types
192 * @param {!WebInspector.TimelineModel.Record} record
193 * @return {?WebInspector.TimelineModel.Record} record
194 */
195 _findRecordRecursively: function(types, record)
196 {
197 if (types.indexOf(record.type()) >= 0)
198 return record;
199 if (!record.children())
200 return null;
201 for (var i = 0; i < record.children().length; ++i) {
202 var result = this._findRecordRecursively(types, record.children()[i] );
203 if (result)
204 return result;
205 }
206 return null;
207 },
208
209 __proto__: WebInspector.TargetAwareObject.prototype
210 }
211
212 /**
213 * @constructor
214 * @param {!WebInspector.Target} target
215 * @extends {WebInspector.TimelineFrameModelBase}
216 */
217 WebInspector.TimelineFrameModel = function(target)
218 {
219 WebInspector.TimelineFrameModelBase.call(this, target);
220 }
221
222 WebInspector.TimelineFrameModel._mainFrameMarkers = [
223 WebInspector.TimelineModel.RecordType.ScheduleStyleRecalculation,
224 WebInspector.TimelineModel.RecordType.InvalidateLayout,
225 WebInspector.TimelineModel.RecordType.BeginFrame,
226 WebInspector.TimelineModel.RecordType.ScrollLayer
227 ];
228
229 WebInspector.TimelineFrameModel.prototype = {
230 reset: function()
231 {
232 this._mergeRecords = true;
233 this._mergingBuffer = new WebInspector.TimelineMergingRecordBuffer();
234 WebInspector.TimelineFrameModelBase.prototype.reset.call(this);
235 },
236
237 /**
238 * @param {boolean} value
239 */
240 setMergeRecords: function(value)
241 {
242 this._mergeRecords = value;
243 },
244
245 /**
246 * @param {!Array.<!WebInspector.TimelineModel.Record>} records
247 */
248 addRecords: function(records)
249 {
250 if (!records.length)
251 return;
252 if (records[0].startTime() < this._minimumRecordTime)
253 this._minimumRecordTime = records[0].startTime();
254 for (var i = 0; i < records.length; ++i)
255 this.addRecord(records[i]);
256 },
257
258 /**
259 * @param {!WebInspector.TimelineModel.Record} record
260 */
261 addRecord: function(record)
262 {
263 var recordTypes = WebInspector.TimelineModel.RecordType;
264 var programRecord = record.type() === recordTypes.Program ? record : nul l;
265
266 // Start collecting main frame
267 if (programRecord) {
268 if (!this._aggregatedMainThreadWork && this._findRecordRecursively(W ebInspector.TimelineFrameModel._mainFrameMarkers, programRecord))
269 this._aggregatedMainThreadWork = {};
270 }
271 /** type {Array.<!WebInspector.TimelineModel.Record>} */
272 var records = [];
273 if (!this._mergeRecords)
274 records = [record];
275 else
276 records = this._mergingBuffer.process(record.thread(), /** type {Arr ay.<!WebInspector.TimelineModel.Record>} */(programRecord ? record.children() || [] : [record]));
277 for (var i = 0; i < records.length; ++i) {
278 if (records[i].thread())
279 this._addBackgroundRecord(records[i]);
280 else
281 this._addMainThreadRecord(programRecord, records[i]);
282 }
283 },
284
285 /**
319 * @param {!WebInspector.TimelineModel.Record} record 286 * @param {!WebInspector.TimelineModel.Record} record
320 */ 287 */
321 _addBackgroundRecord: function(record) 288 _addBackgroundRecord: function(record)
322 { 289 {
323 var recordTypes = WebInspector.TimelineModel.RecordType; 290 var recordTypes = WebInspector.TimelineModel.RecordType;
324 if (record.type() === recordTypes.BeginFrame) 291 if (record.type() === recordTypes.BeginFrame)
325 this.handleBeginFrame(record.startTime()); 292 this.handleBeginFrame(record.startTime());
326 else if (record.type() === recordTypes.DrawFrame) 293 else if (record.type() === recordTypes.DrawFrame)
327 this.handleDrawFrame(record.startTime()); 294 this.handleDrawFrame(record.startTime());
328 else if (record.type() === recordTypes.RequestMainThreadFrame) 295 else if (record.type() === recordTypes.RequestMainThreadFrame)
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 * @return {number} 341 * @return {number}
375 */ 342 */
376 _deriveOtherTime: function(programRecord) 343 _deriveOtherTime: function(programRecord)
377 { 344 {
378 var accounted = 0; 345 var accounted = 0;
379 for (var i = 0; i < programRecord.children().length; ++i) 346 for (var i = 0; i < programRecord.children().length; ++i)
380 accounted += programRecord.children()[i].endTime() - programRecord.c hildren()[i].startTime(); 347 accounted += programRecord.children()[i].endTime() - programRecord.c hildren()[i].startTime();
381 return programRecord.endTime() - programRecord.startTime() - accounted; 348 return programRecord.endTime() - programRecord.startTime() - accounted;
382 }, 349 },
383 350
351 __proto__: WebInspector.TimelineFrameModelBase.prototype,
352 };
353
354 /**
355 * @constructor
356 * @param {!WebInspector.Target} target
357 * @extends {WebInspector.TimelineFrameModelBase}
358 */
359 WebInspector.TracingTimelineFrameModel = function(target)
360 {
361 WebInspector.TimelineFrameModelBase.call(this, target);
362 }
363
364 WebInspector.TracingTimelineFrameModel._mainFrameMarkers = [
365 WebInspector.TracingTimelineModel.RecordType.ScheduleStyleRecalculation,
366 WebInspector.TracingTimelineModel.RecordType.InvalidateLayout,
367 WebInspector.TracingTimelineModel.RecordType.BeginMainThreadFrame,
368 WebInspector.TracingTimelineModel.RecordType.ScrollLayer
369 ];
370
371 WebInspector.TracingTimelineFrameModel.prototype = {
384 /** 372 /**
385 * @param {number} startTime 373 * @param {!Array.<!WebInspector.TracingModel.Event>} events
374 * @param {string} sessionId
386 */ 375 */
387 _startBackgroundFrame: function(startTime) 376 addTraceEvents: function(events, sessionId)
388 { 377 {
389 if (!this._hasThreadedCompositing) { 378 this._sessionId = sessionId;
390 this._lastFrame = null; 379 for (var i = 0; i < events.length; ++i)
391 this._hasThreadedCompositing = true; 380 this._addTraceEvent(events[i]);
392 }
393 if (this._lastFrame)
394 this._flushFrame(this._lastFrame, startTime);
395
396 this._lastFrame = new WebInspector.TimelineFrame(startTime, startTime - this._minimumRecordTime);
397 }, 381 },
398 382
399 /** 383 /**
400 * @param {number} startTime 384 * @param {!WebInspector.TracingModel.Event} event
401 */ 385 */
402 _startMainThreadFrame: function(startTime) 386 _addTraceEvent: function(event)
403 { 387 {
404 if (this._lastFrame) 388 var eventNames = WebInspector.TracingTimelineModel.RecordType;
405 this._flushFrame(this._lastFrame, startTime); 389
406 this._lastFrame = new WebInspector.TimelineFrame(startTime, startTime - this._minimumRecordTime); 390 if (event.name === eventNames.SetLayerTreeId) {
391 if (this._sessionId === event.args["sessionId"])
392 this._layerTreeId = event.args["layerTreeId"];
393 return;
394 }
395 if (event.name === eventNames.TracingStartedInPage) {
396 this._mainThread = event.thread;
397 return;
398 }
399 if (event.thread === this._mainThread)
400 this._addMainThreadTraceEvent(event);
401 else
402 this._addBackgroundTraceEvent(event);
407 }, 403 },
408 404
409 /** 405 /**
410 * @param {!WebInspector.TimelineFrame} frame 406 * @param {!WebInspector.TracingModel.Event} event
411 * @param {number} endTime
412 */ 407 */
413 _flushFrame: function(frame, endTime) 408 _addBackgroundTraceEvent: function(event)
414 { 409 {
415 frame._setLayerTree(this._lastLayerTree); 410 var eventNames = WebInspector.TracingTimelineModel.RecordType;
416 frame._setEndTime(endTime); 411
417 this._frames.push(frame); 412 if (event.phase === WebInspector.TracingModel.Phase.SnapshotObject && ev ent.name === eventNames.LayerTreeHostImplSnapshot && parseInt(event.id, 0) === t his._layerTreeId) {
418 this.dispatchEventToListeners(WebInspector.TimelineFrameModel.Events.Fra meAdded, frame); 413 this.handleLayerTreeSnapshot(new WebInspector.DeferredTracingLayerTr ee(this.target(), event.args["snapshot"]["active_tree"]["root_layer"]));
414 return;
415 }
416 if (this._lastFrame && event.selfTime)
417 this._lastFrame._addTimeForCategory(WebInspector.TracingTimelineUIUt ils.eventStyle(event).category.name, event.selfTime);
418
419 if (event.args["layerTreeId"] !== this._layerTreeId)
420 return;
421
422 var timestamp = event.startTime;
423 if (event.name === eventNames.BeginFrame)
424 this.handleBeginFrame(timestamp);
425 else if (event.name === eventNames.DrawFrame)
426 this.handleDrawFrame(timestamp);
427 else if (event.name === eventNames.ActivateLayerTree)
428 this.handleActivateLayerTree();
429 else if (event.name === eventNames.RequestMainThreadFrame)
430 this.handleRequestMainThreadFrame();
419 }, 431 },
420 432
421 /** 433 /**
422 * @param {!Array.<string>} types 434 * @param {!WebInspector.TracingModel.Event} event
423 * @param {!WebInspector.TimelineModel.Record} record
424 * @return {?WebInspector.TimelineModel.Record} record
425 */ 435 */
426 _findRecordRecursively: function(types, record) 436 _addMainThreadTraceEvent: function(event)
427 { 437 {
428 if (types.indexOf(record.type()) >= 0) 438 var eventNames = WebInspector.TracingTimelineModel.RecordType;
429 return record; 439 var timestamp = event.startTime;
430 if (!record.children()) 440 var selfTime = event.selfTime || 0;
431 return null; 441
432 for (var i = 0; i < record.children().length; ++i) { 442 if (!this._hasThreadedCompositing) {
433 var result = this._findRecordRecursively(types, record.children()[i] ); 443 if (event.name === eventNames.BeginMainThreadFrame)
434 if (result) 444 this._startMainThreadFrame(timestamp);
435 return result; 445 if (!this._lastFrame)
446 return;
447 if (!selfTime)
448 return;
449
450 var categoryName = WebInspector.TracingTimelineUIUtils.eventStyle(ev ent).category.name;
451 this._lastFrame._addTimeForCategory(categoryName, selfTime);
452 return;
436 } 453 }
437 return null; 454
455 if (!this._aggregatedMainThreadWork && WebInspector.TracingTimelineFrame Model._mainFrameMarkers.indexOf(event.name) >= 0)
456 this._aggregatedMainThreadWork = {};
457 if (!this._aggregatedMainThreadWork)
458 return;
459
460 if (selfTime) {
461 var categoryName = WebInspector.TracingTimelineUIUtils.eventStyle(ev ent).category.name;
462 this._aggregatedMainThreadWork[categoryName] = (this._aggregatedMain ThreadWork[categoryName] || 0) + selfTime;
463 }
464 if (event.name === eventNames.CompositeLayers && event.args["layerTreeId "] === this._layerTreeId)
465 this.handleCompositeLayers();
438 }, 466 },
439 467
440 __proto__: WebInspector.TargetAwareObject.prototype 468 __proto__: WebInspector.TimelineFrameModelBase.prototype
441 } 469 }
442 470
443 /** 471 /**
444 * @constructor 472 * @constructor
445 * @param {!Array.<!WebInspector.TimelineFrame>} frames 473 * @param {!Array.<!WebInspector.TimelineFrame>} frames
446 */ 474 */
447 WebInspector.FrameStatistics = function(frames) 475 WebInspector.FrameStatistics = function(frames)
448 { 476 {
449 this.frameCount = frames.length; 477 this.frameCount = frames.length;
450 this.minDuration = Infinity; 478 this.minDuration = Infinity;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 /** 556 /**
529 * @param {string} category 557 * @param {string} category
530 * @param {number} time 558 * @param {number} time
531 */ 559 */
532 _addTimeForCategory: function(category, time) 560 _addTimeForCategory: function(category, time)
533 { 561 {
534 this.timeByCategory[category] = (this.timeByCategory[category] || 0) + t ime; 562 this.timeByCategory[category] = (this.timeByCategory[category] || 0) + t ime;
535 this.cpuTime += time; 563 this.cpuTime += time;
536 }, 564 },
537 } 565 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/timeline/TimelineFlameChart.js ('k') | Source/devtools/front_end/timeline/TimelineFrameOverview.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698