Chromium Code Reviews| 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 |