OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |