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 }; |
yurys
2014/06/10 07:56:53
style: please remove ;
| |
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; |
451 this.maxDuration = 0; | 479 this.maxDuration = 0; |
(...skipping 76 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 |