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

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

Issue 319743002: Timeline: decouple TimelineFrameModel from TimelineModel (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebased 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
« no previous file with comments | « no previous file | Source/devtools/front_end/timeline/TimelineModel.js » ('j') | 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 (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 12 matching lines...) Expand all
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
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.Object} 33 * @extends {WebInspector.TargetAwareObject}
34 * @param {!WebInspector.TimelineModel} model 34 * @param {!WebInspector.Target} target
35 */ 35 */
36 WebInspector.TimelineFrameModel = function(model) 36 WebInspector.TimelineFrameModel = function(target)
37 { 37 {
38 this._model = model; 38 WebInspector.TargetAwareObject.call(this, target);
39 39
40 this.reset(); 40 this.reset();
41 var records = model.records();
42 for (var i = 0; i < records.length; ++i)
43 this.addRecord(records[i]);
44 } 41 }
45 42
46 WebInspector.TimelineFrameModel.Events = { 43 WebInspector.TimelineFrameModel.Events = {
47 FrameAdded: "FrameAdded" 44 FrameAdded: "FrameAdded"
48 } 45 }
49 46
50 WebInspector.TimelineFrameModel._mainFrameMarkers = [ 47 WebInspector.TimelineFrameModel._mainFrameMarkers = [
51 WebInspector.TimelineModel.RecordType.ScheduleStyleRecalculation, 48 WebInspector.TimelineModel.RecordType.ScheduleStyleRecalculation,
52 WebInspector.TimelineModel.RecordType.InvalidateLayout, 49 WebInspector.TimelineModel.RecordType.InvalidateLayout,
53 WebInspector.TimelineModel.RecordType.BeginFrame, 50 WebInspector.TimelineModel.RecordType.BeginFrame,
54 WebInspector.TimelineModel.RecordType.ScrollLayer 51 WebInspector.TimelineModel.RecordType.ScrollLayer
55 ]; 52 ];
56 53
57 WebInspector.TimelineFrameModel.prototype = { 54 WebInspector.TimelineFrameModel.prototype = {
58 /** 55 /**
59 * @return {!WebInspector.Target}
60 */
61 target: function()
62 {
63 return this._model.target();
64 },
65
66 /**
67 * @return {!Array.<!WebInspector.TimelineFrame>} 56 * @return {!Array.<!WebInspector.TimelineFrame>}
68 */ 57 */
69 frames: function() 58 frames: function()
70 { 59 {
71 return this._frames; 60 return this._frames;
72 }, 61 },
73 62
74 /** 63 /**
75 * @param {number} startTime 64 * @param {number} startTime
76 * @param {number} endTime 65 * @param {number} endTime
(...skipping 18 matching lines...) Expand all
95 function compareEndTime(value, object) 84 function compareEndTime(value, object)
96 { 85 {
97 return value - object.endTime; 86 return value - object.endTime;
98 } 87 }
99 var frames = this._frames; 88 var frames = this._frames;
100 var firstFrame = insertionIndexForObjectInListSortedByFunction(startTime , frames, compareEndTime); 89 var firstFrame = insertionIndexForObjectInListSortedByFunction(startTime , frames, compareEndTime);
101 var lastFrame = insertionIndexForObjectInListSortedByFunction(endTime, f rames, compareStartTime); 90 var lastFrame = insertionIndexForObjectInListSortedByFunction(endTime, f rames, compareStartTime);
102 return frames.slice(firstFrame, lastFrame); 91 return frames.slice(firstFrame, lastFrame);
103 }, 92 },
104 93
94 /**
95 * @param {boolean} value
96 */
97 setMergeRecords: function(value)
98 {
99 this._mergeRecords = value;
100 },
101
105 reset: function() 102 reset: function()
106 { 103 {
104 this._mergeRecords = true;
105 this._minimumRecordTime = Infinity;
107 this._frames = []; 106 this._frames = [];
108 this._lastFrame = null; 107 this._lastFrame = null;
109 this._lastLayerTree = null; 108 this._lastLayerTree = null;
110 this._hasThreadedCompositing = false; 109 this._hasThreadedCompositing = false;
111 this._mainFrameCommitted = false; 110 this._mainFrameCommitted = false;
112 this._mainFrameRequested = false; 111 this._mainFrameRequested = false;
113 this._aggregatedMainThreadWork = null; 112 this._aggregatedMainThreadWork = null;
114 this._mergingBuffer = new WebInspector.TimelineMergingRecordBuffer(); 113 this._mergingBuffer = new WebInspector.TimelineMergingRecordBuffer();
115 }, 114 },
116 115
117 /** 116 /**
117 * @param {!Array.<!WebInspector.TimelineModel.Record>} records
118 */
119 addRecords: function(records)
120 {
121 if (!records.length)
122 return;
123 if (records[0].startTime() < this._minimumRecordTime)
124 this._minimumRecordTime = records[0].startTime();
125 for (var i = 0; i < records.length; ++i)
126 this.addRecord(records[i]);
127 },
128
129 /**
118 * @param {!WebInspector.TimelineModel.Record} record 130 * @param {!WebInspector.TimelineModel.Record} record
119 */ 131 */
120 addRecord: function(record) 132 addRecord: function(record)
121 { 133 {
122 var recordTypes = WebInspector.TimelineModel.RecordType; 134 var recordTypes = WebInspector.TimelineModel.RecordType;
123 var programRecord = record.type() === recordTypes.Program ? record : nul l; 135 var programRecord = record.type() === recordTypes.Program ? record : nul l;
124 136
125 // Start collecting main frame 137 // Start collecting main frame
126 if (programRecord) { 138 if (programRecord) {
127 if (!this._aggregatedMainThreadWork && this._findRecordRecursively(W ebInspector.TimelineFrameModel._mainFrameMarkers, programRecord)) 139 if (!this._aggregatedMainThreadWork && this._findRecordRecursively(W ebInspector.TimelineFrameModel._mainFrameMarkers, programRecord))
128 this._aggregatedMainThreadWork = {}; 140 this._aggregatedMainThreadWork = {};
129 } 141 }
130 /** type {Array.<!WebInspector.TimelineModel.Record>} */ 142 /** type {Array.<!WebInspector.TimelineModel.Record>} */
131 var records = []; 143 var records = [];
132 if (this._model.bufferEvents()) 144 if (!this._mergeRecords)
133 records = [record]; 145 records = [record];
134 else 146 else
135 records = this._mergingBuffer.process(record.thread(), /** type {Arr ay.<!WebInspector.TimelineModel.Record>} */(programRecord ? record.children() || [] : [record])); 147 records = this._mergingBuffer.process(record.thread(), /** type {Arr ay.<!WebInspector.TimelineModel.Record>} */(programRecord ? record.children() || [] : [record]));
136 for (var i = 0; i < records.length; ++i) { 148 for (var i = 0; i < records.length; ++i) {
137 if (records[i].thread()) 149 if (records[i].thread())
138 this._addBackgroundRecord(records[i]); 150 this._addBackgroundRecord(records[i]);
139 else 151 else
140 this._addMainThreadRecord(programRecord, records[i]); 152 this._addMainThreadRecord(programRecord, records[i]);
141 } 153 }
142 }, 154 },
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 */ 333 */
322 _startBackgroundFrame: function(startTime) 334 _startBackgroundFrame: function(startTime)
323 { 335 {
324 if (!this._hasThreadedCompositing) { 336 if (!this._hasThreadedCompositing) {
325 this._lastFrame = null; 337 this._lastFrame = null;
326 this._hasThreadedCompositing = true; 338 this._hasThreadedCompositing = true;
327 } 339 }
328 if (this._lastFrame) 340 if (this._lastFrame)
329 this._flushFrame(this._lastFrame, startTime); 341 this._flushFrame(this._lastFrame, startTime);
330 342
331 this._lastFrame = new WebInspector.TimelineFrame(startTime, startTime - this._model.minimumRecordTime()); 343 this._lastFrame = new WebInspector.TimelineFrame(startTime, startTime - this._minimumRecordTime);
332 }, 344 },
333 345
334 /** 346 /**
335 * @param {number} startTime 347 * @param {number} startTime
336 */ 348 */
337 _startMainThreadFrame: function(startTime) 349 _startMainThreadFrame: function(startTime)
338 { 350 {
339 if (this._lastFrame) 351 if (this._lastFrame)
340 this._flushFrame(this._lastFrame, startTime); 352 this._flushFrame(this._lastFrame, startTime);
341 this._lastFrame = new WebInspector.TimelineFrame(startTime, startTime - this._model.minimumRecordTime()); 353 this._lastFrame = new WebInspector.TimelineFrame(startTime, startTime - this._minimumRecordTime);
342 }, 354 },
343 355
344 /** 356 /**
345 * @param {!WebInspector.TimelineFrame} frame 357 * @param {!WebInspector.TimelineFrame} frame
346 * @param {number} endTime 358 * @param {number} endTime
347 */ 359 */
348 _flushFrame: function(frame, endTime) 360 _flushFrame: function(frame, endTime)
349 { 361 {
350 frame._setLayerTree(this._lastLayerTree); 362 frame._setLayerTree(this._lastLayerTree);
351 frame._setEndTime(endTime); 363 frame._setEndTime(endTime);
(...skipping 13 matching lines...) Expand all
365 if (!record.children()) 377 if (!record.children())
366 return null; 378 return null;
367 for (var i = 0; i < record.children().length; ++i) { 379 for (var i = 0; i < record.children().length; ++i) {
368 var result = this._findRecordRecursively(types, record.children()[i] ); 380 var result = this._findRecordRecursively(types, record.children()[i] );
369 if (result) 381 if (result)
370 return result; 382 return result;
371 } 383 }
372 return null; 384 return null;
373 }, 385 },
374 386
375 __proto__: WebInspector.Object.prototype 387 __proto__: WebInspector.TargetAwareObject.prototype
376 } 388 }
377 389
378 /** 390 /**
379 * @constructor 391 * @constructor
380 * @param {!Array.<!WebInspector.TimelineFrame>} frames 392 * @param {!Array.<!WebInspector.TimelineFrame>} frames
381 */ 393 */
382 WebInspector.FrameStatistics = function(frames) 394 WebInspector.FrameStatistics = function(frames)
383 { 395 {
384 this.frameCount = frames.length; 396 this.frameCount = frames.length;
385 this.minDuration = Infinity; 397 this.minDuration = Infinity;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 this._updateCpuTime(); 471 this._updateCpuTime();
460 }, 472 },
461 473
462 _updateCpuTime: function() 474 _updateCpuTime: function()
463 { 475 {
464 this.cpuTime = 0; 476 this.cpuTime = 0;
465 for (var key in this.timeByCategory) 477 for (var key in this.timeByCategory)
466 this.cpuTime += this.timeByCategory[key]; 478 this.cpuTime += this.timeByCategory[key];
467 } 479 }
468 } 480 }
OLDNEW
« no previous file with comments | « no previous file | Source/devtools/front_end/timeline/TimelineModel.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698