| 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 13 matching lines...) Expand all Loading... |
| 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 * @unrestricted | 32 * @unrestricted |
| 33 */ | 33 */ |
| 34 WebInspector.TimelineFrameModel = class { | 34 TimelineModel.TimelineFrameModel = class { |
| 35 /** | 35 /** |
| 36 * @param {function(!WebInspector.TracingModel.Event):string} categoryMapper | 36 * @param {function(!SDK.TracingModel.Event):string} categoryMapper |
| 37 */ | 37 */ |
| 38 constructor(categoryMapper) { | 38 constructor(categoryMapper) { |
| 39 this._categoryMapper = categoryMapper; | 39 this._categoryMapper = categoryMapper; |
| 40 this.reset(); | 40 this.reset(); |
| 41 } | 41 } |
| 42 | 42 |
| 43 /** | 43 /** |
| 44 * @return {!Array.<!WebInspector.TimelineFrame>} | 44 * @return {!Array.<!TimelineModel.TimelineFrame>} |
| 45 */ | 45 */ |
| 46 frames() { | 46 frames() { |
| 47 return this._frames; | 47 return this._frames; |
| 48 } | 48 } |
| 49 | 49 |
| 50 /** | 50 /** |
| 51 * @param {number} startTime | 51 * @param {number} startTime |
| 52 * @param {number} endTime | 52 * @param {number} endTime |
| 53 * @return {!Array.<!WebInspector.TimelineFrame>} | 53 * @return {!Array.<!TimelineModel.TimelineFrame>} |
| 54 */ | 54 */ |
| 55 filteredFrames(startTime, endTime) { | 55 filteredFrames(startTime, endTime) { |
| 56 /** | 56 /** |
| 57 * @param {number} value | 57 * @param {number} value |
| 58 * @param {!WebInspector.TimelineFrame} object | 58 * @param {!TimelineModel.TimelineFrame} object |
| 59 * @return {number} | 59 * @return {number} |
| 60 */ | 60 */ |
| 61 function compareStartTime(value, object) { | 61 function compareStartTime(value, object) { |
| 62 return value - object.startTime; | 62 return value - object.startTime; |
| 63 } | 63 } |
| 64 /** | 64 /** |
| 65 * @param {number} value | 65 * @param {number} value |
| 66 * @param {!WebInspector.TimelineFrame} object | 66 * @param {!TimelineModel.TimelineFrame} object |
| 67 * @return {number} | 67 * @return {number} |
| 68 */ | 68 */ |
| 69 function compareEndTime(value, object) { | 69 function compareEndTime(value, object) { |
| 70 return value - object.endTime; | 70 return value - object.endTime; |
| 71 } | 71 } |
| 72 var frames = this._frames; | 72 var frames = this._frames; |
| 73 var firstFrame = frames.lowerBound(startTime, compareEndTime); | 73 var firstFrame = frames.lowerBound(startTime, compareEndTime); |
| 74 var lastFrame = frames.lowerBound(endTime, compareStartTime); | 74 var lastFrame = frames.lowerBound(endTime, compareStartTime); |
| 75 return frames.slice(firstFrame, lastFrame); | 75 return frames.slice(firstFrame, lastFrame); |
| 76 } | 76 } |
| 77 | 77 |
| 78 /** | 78 /** |
| 79 * @param {!WebInspector.TracingModel.Event} rasterTask | 79 * @param {!SDK.TracingModel.Event} rasterTask |
| 80 * @return {boolean} | 80 * @return {boolean} |
| 81 */ | 81 */ |
| 82 hasRasterTile(rasterTask) { | 82 hasRasterTile(rasterTask) { |
| 83 var data = rasterTask.args['tileData']; | 83 var data = rasterTask.args['tileData']; |
| 84 if (!data) | 84 if (!data) |
| 85 return false; | 85 return false; |
| 86 var frameId = data['sourceFrameNumber']; | 86 var frameId = data['sourceFrameNumber']; |
| 87 var frame = frameId && this._frameById[frameId]; | 87 var frame = frameId && this._frameById[frameId]; |
| 88 if (!frame || !frame.layerTree) | 88 if (!frame || !frame.layerTree) |
| 89 return false; | 89 return false; |
| 90 return true; | 90 return true; |
| 91 } | 91 } |
| 92 | 92 |
| 93 /** | 93 /** |
| 94 * @param {!WebInspector.TracingModel.Event} rasterTask | 94 * @param {!SDK.TracingModel.Event} rasterTask |
| 95 * @return Promise<?{rect: !Protocol.DOM.Rect, snapshot: !WebInspector.PaintPr
ofilerSnapshot}>} | 95 * @return Promise<?{rect: !Protocol.DOM.Rect, snapshot: !SDK.PaintProfilerSna
pshot}>} |
| 96 */ | 96 */ |
| 97 rasterTilePromise(rasterTask) { | 97 rasterTilePromise(rasterTask) { |
| 98 if (!this._target) | 98 if (!this._target) |
| 99 return Promise.resolve(null); | 99 return Promise.resolve(null); |
| 100 var data = rasterTask.args['tileData']; | 100 var data = rasterTask.args['tileData']; |
| 101 var frameId = data['sourceFrameNumber']; | 101 var frameId = data['sourceFrameNumber']; |
| 102 var tileId = data['tileId'] && data['tileId']['id_ref']; | 102 var tileId = data['tileId'] && data['tileId']['id_ref']; |
| 103 var frame = frameId && this._frameById[frameId]; | 103 var frame = frameId && this._frameById[frameId]; |
| 104 if (!frame || !frame.layerTree || !tileId) | 104 if (!frame || !frame.layerTree || !tileId) |
| 105 return Promise.resolve(null); | 105 return Promise.resolve(null); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 handleCompositeLayers() { | 179 handleCompositeLayers() { |
| 180 if (!this._framePendingCommit) | 180 if (!this._framePendingCommit) |
| 181 return; | 181 return; |
| 182 this._framePendingActivation = this._framePendingCommit; | 182 this._framePendingActivation = this._framePendingCommit; |
| 183 this._framePendingCommit = null; | 183 this._framePendingCommit = null; |
| 184 this._mainFrameRequested = false; | 184 this._mainFrameRequested = false; |
| 185 this._mainFrameCommitted = true; | 185 this._mainFrameCommitted = true; |
| 186 } | 186 } |
| 187 | 187 |
| 188 /** | 188 /** |
| 189 * @param {!WebInspector.TracingFrameLayerTree} layerTree | 189 * @param {!TimelineModel.TracingFrameLayerTree} layerTree |
| 190 */ | 190 */ |
| 191 handleLayerTreeSnapshot(layerTree) { | 191 handleLayerTreeSnapshot(layerTree) { |
| 192 this._lastLayerTree = layerTree; | 192 this._lastLayerTree = layerTree; |
| 193 } | 193 } |
| 194 | 194 |
| 195 /** | 195 /** |
| 196 * @param {number} startTime | 196 * @param {number} startTime |
| 197 * @param {boolean} needsBeginFrame | 197 * @param {boolean} needsBeginFrame |
| 198 */ | 198 */ |
| 199 handleNeedFrameChanged(startTime, needsBeginFrame) { | 199 handleNeedFrameChanged(startTime, needsBeginFrame) { |
| 200 if (needsBeginFrame) | 200 if (needsBeginFrame) |
| 201 this._lastNeedsBeginFrame = startTime; | 201 this._lastNeedsBeginFrame = startTime; |
| 202 } | 202 } |
| 203 | 203 |
| 204 /** | 204 /** |
| 205 * @param {number} startTime | 205 * @param {number} startTime |
| 206 */ | 206 */ |
| 207 _startFrame(startTime) { | 207 _startFrame(startTime) { |
| 208 if (this._lastFrame) | 208 if (this._lastFrame) |
| 209 this._flushFrame(this._lastFrame, startTime); | 209 this._flushFrame(this._lastFrame, startTime); |
| 210 this._lastFrame = new WebInspector.TimelineFrame(startTime, startTime - this
._minimumRecordTime); | 210 this._lastFrame = new TimelineModel.TimelineFrame(startTime, startTime - thi
s._minimumRecordTime); |
| 211 } | 211 } |
| 212 | 212 |
| 213 /** | 213 /** |
| 214 * @param {!WebInspector.TimelineFrame} frame | 214 * @param {!TimelineModel.TimelineFrame} frame |
| 215 * @param {number} endTime | 215 * @param {number} endTime |
| 216 */ | 216 */ |
| 217 _flushFrame(frame, endTime) { | 217 _flushFrame(frame, endTime) { |
| 218 frame._setLayerTree(this._lastLayerTree); | 218 frame._setLayerTree(this._lastLayerTree); |
| 219 frame._setEndTime(endTime); | 219 frame._setEndTime(endTime); |
| 220 if (this._lastLayerTree) | 220 if (this._lastLayerTree) |
| 221 this._lastLayerTree._setPaints(frame._paints); | 221 this._lastLayerTree._setPaints(frame._paints); |
| 222 if (this._frames.length && (frame.startTime !== this._frames.peekLast().endT
ime || frame.startTime > frame.endTime)) | 222 if (this._frames.length && (frame.startTime !== this._frames.peekLast().endT
ime || frame.startTime > frame.endTime)) |
| 223 console.assert( | 223 console.assert( |
| 224 false, `Inconsistent frame time for frame ${this._frames.length} (${fr
ame.startTime} - ${frame.endTime})`); | 224 false, `Inconsistent frame time for frame ${this._frames.length} (${fr
ame.startTime} - ${frame.endTime})`); |
| 225 this._frames.push(frame); | 225 this._frames.push(frame); |
| 226 if (typeof frame._mainFrameId === 'number') | 226 if (typeof frame._mainFrameId === 'number') |
| 227 this._frameById[frame._mainFrameId] = frame; | 227 this._frameById[frame._mainFrameId] = frame; |
| 228 } | 228 } |
| 229 | 229 |
| 230 _commitPendingFrame() { | 230 _commitPendingFrame() { |
| 231 this._lastFrame._addTimeForCategories(this._framePendingActivation.timeByCat
egory); | 231 this._lastFrame._addTimeForCategories(this._framePendingActivation.timeByCat
egory); |
| 232 this._lastFrame._paints = this._framePendingActivation.paints; | 232 this._lastFrame._paints = this._framePendingActivation.paints; |
| 233 this._lastFrame._mainFrameId = this._framePendingActivation.mainFrameId; | 233 this._lastFrame._mainFrameId = this._framePendingActivation.mainFrameId; |
| 234 this._framePendingActivation = null; | 234 this._framePendingActivation = null; |
| 235 } | 235 } |
| 236 | 236 |
| 237 /** | 237 /** |
| 238 * @param {!Array.<string>} types | 238 * @param {!Array.<string>} types |
| 239 * @param {!WebInspector.TimelineModel.Record} record | 239 * @param {!TimelineModel.TimelineModel.Record} record |
| 240 * @return {?WebInspector.TimelineModel.Record} record | 240 * @return {?TimelineModel.TimelineModel.Record} record |
| 241 */ | 241 */ |
| 242 _findRecordRecursively(types, record) { | 242 _findRecordRecursively(types, record) { |
| 243 if (types.indexOf(record.type()) >= 0) | 243 if (types.indexOf(record.type()) >= 0) |
| 244 return record; | 244 return record; |
| 245 if (!record.children()) | 245 if (!record.children()) |
| 246 return null; | 246 return null; |
| 247 for (var i = 0; i < record.children().length; ++i) { | 247 for (var i = 0; i < record.children().length; ++i) { |
| 248 var result = this._findRecordRecursively(types, record.children()[i]); | 248 var result = this._findRecordRecursively(types, record.children()[i]); |
| 249 if (result) | 249 if (result) |
| 250 return result; | 250 return result; |
| 251 } | 251 } |
| 252 return null; | 252 return null; |
| 253 } | 253 } |
| 254 | 254 |
| 255 /** | 255 /** |
| 256 * @param {?WebInspector.Target} target | 256 * @param {?SDK.Target} target |
| 257 * @param {!Array.<!WebInspector.TracingModel.Event>} events | 257 * @param {!Array.<!SDK.TracingModel.Event>} events |
| 258 * @param {string} sessionId | 258 * @param {string} sessionId |
| 259 */ | 259 */ |
| 260 addTraceEvents(target, events, sessionId) { | 260 addTraceEvents(target, events, sessionId) { |
| 261 this._target = target; | 261 this._target = target; |
| 262 this._sessionId = sessionId; | 262 this._sessionId = sessionId; |
| 263 if (!events.length) | 263 if (!events.length) |
| 264 return; | 264 return; |
| 265 if (events[0].startTime < this._minimumRecordTime) | 265 if (events[0].startTime < this._minimumRecordTime) |
| 266 this._minimumRecordTime = events[0].startTime; | 266 this._minimumRecordTime = events[0].startTime; |
| 267 for (var i = 0; i < events.length; ++i) | 267 for (var i = 0; i < events.length; ++i) |
| 268 this._addTraceEvent(events[i]); | 268 this._addTraceEvent(events[i]); |
| 269 } | 269 } |
| 270 | 270 |
| 271 /** | 271 /** |
| 272 * @param {!WebInspector.TracingModel.Event} event | 272 * @param {!SDK.TracingModel.Event} event |
| 273 */ | 273 */ |
| 274 _addTraceEvent(event) { | 274 _addTraceEvent(event) { |
| 275 var eventNames = WebInspector.TimelineModel.RecordType; | 275 var eventNames = TimelineModel.TimelineModel.RecordType; |
| 276 | 276 |
| 277 if (event.name === eventNames.SetLayerTreeId) { | 277 if (event.name === eventNames.SetLayerTreeId) { |
| 278 var sessionId = event.args['sessionId'] || event.args['data']['sessionId']
; | 278 var sessionId = event.args['sessionId'] || event.args['data']['sessionId']
; |
| 279 if (this._sessionId === sessionId) | 279 if (this._sessionId === sessionId) |
| 280 this._layerTreeId = event.args['layerTreeId'] || event.args['data']['lay
erTreeId']; | 280 this._layerTreeId = event.args['layerTreeId'] || event.args['data']['lay
erTreeId']; |
| 281 } else if (event.name === eventNames.TracingStartedInPage) { | 281 } else if (event.name === eventNames.TracingStartedInPage) { |
| 282 this._mainThread = event.thread; | 282 this._mainThread = event.thread; |
| 283 } else if ( | 283 } else if ( |
| 284 event.phase === WebInspector.TracingModel.Phase.SnapshotObject && | 284 event.phase === SDK.TracingModel.Phase.SnapshotObject && |
| 285 event.name === eventNames.LayerTreeHostImplSnapshot && parseInt(event.id
, 0) === this._layerTreeId) { | 285 event.name === eventNames.LayerTreeHostImplSnapshot && parseInt(event.id
, 0) === this._layerTreeId) { |
| 286 var snapshot = /** @type {!WebInspector.TracingModel.ObjectSnapshot} */ (e
vent); | 286 var snapshot = /** @type {!SDK.TracingModel.ObjectSnapshot} */ (event); |
| 287 this.handleLayerTreeSnapshot(new WebInspector.TracingFrameLayerTree(this._
target, snapshot)); | 287 this.handleLayerTreeSnapshot(new TimelineModel.TracingFrameLayerTree(this.
_target, snapshot)); |
| 288 } else { | 288 } else { |
| 289 this._processCompositorEvents(event); | 289 this._processCompositorEvents(event); |
| 290 if (event.thread === this._mainThread) | 290 if (event.thread === this._mainThread) |
| 291 this._addMainThreadTraceEvent(event); | 291 this._addMainThreadTraceEvent(event); |
| 292 else if (this._lastFrame && event.selfTime && !WebInspector.TracingModel.i
sTopLevelEvent(event)) | 292 else if (this._lastFrame && event.selfTime && !SDK.TracingModel.isTopLevel
Event(event)) |
| 293 this._lastFrame._addTimeForCategory(this._categoryMapper(event), event.s
elfTime); | 293 this._lastFrame._addTimeForCategory(this._categoryMapper(event), event.s
elfTime); |
| 294 } | 294 } |
| 295 } | 295 } |
| 296 | 296 |
| 297 /** | 297 /** |
| 298 * @param {!WebInspector.TracingModel.Event} event | 298 * @param {!SDK.TracingModel.Event} event |
| 299 */ | 299 */ |
| 300 _processCompositorEvents(event) { | 300 _processCompositorEvents(event) { |
| 301 var eventNames = WebInspector.TimelineModel.RecordType; | 301 var eventNames = TimelineModel.TimelineModel.RecordType; |
| 302 | 302 |
| 303 if (event.args['layerTreeId'] !== this._layerTreeId) | 303 if (event.args['layerTreeId'] !== this._layerTreeId) |
| 304 return; | 304 return; |
| 305 | 305 |
| 306 var timestamp = event.startTime; | 306 var timestamp = event.startTime; |
| 307 if (event.name === eventNames.BeginFrame) | 307 if (event.name === eventNames.BeginFrame) |
| 308 this.handleBeginFrame(timestamp); | 308 this.handleBeginFrame(timestamp); |
| 309 else if (event.name === eventNames.DrawFrame) | 309 else if (event.name === eventNames.DrawFrame) |
| 310 this.handleDrawFrame(timestamp); | 310 this.handleDrawFrame(timestamp); |
| 311 else if (event.name === eventNames.ActivateLayerTree) | 311 else if (event.name === eventNames.ActivateLayerTree) |
| 312 this.handleActivateLayerTree(); | 312 this.handleActivateLayerTree(); |
| 313 else if (event.name === eventNames.RequestMainThreadFrame) | 313 else if (event.name === eventNames.RequestMainThreadFrame) |
| 314 this.handleRequestMainThreadFrame(); | 314 this.handleRequestMainThreadFrame(); |
| 315 else if (event.name === eventNames.NeedsBeginFrameChanged) | 315 else if (event.name === eventNames.NeedsBeginFrameChanged) |
| 316 this.handleNeedFrameChanged(timestamp, event.args['data'] && event.args['d
ata']['needsBeginFrame']); | 316 this.handleNeedFrameChanged(timestamp, event.args['data'] && event.args['d
ata']['needsBeginFrame']); |
| 317 } | 317 } |
| 318 | 318 |
| 319 /** | 319 /** |
| 320 * @param {!WebInspector.TracingModel.Event} event | 320 * @param {!SDK.TracingModel.Event} event |
| 321 */ | 321 */ |
| 322 _addMainThreadTraceEvent(event) { | 322 _addMainThreadTraceEvent(event) { |
| 323 var eventNames = WebInspector.TimelineModel.RecordType; | 323 var eventNames = TimelineModel.TimelineModel.RecordType; |
| 324 var timestamp = event.startTime; | 324 var timestamp = event.startTime; |
| 325 var selfTime = event.selfTime || 0; | 325 var selfTime = event.selfTime || 0; |
| 326 | 326 |
| 327 if (WebInspector.TracingModel.isTopLevelEvent(event)) { | 327 if (SDK.TracingModel.isTopLevelEvent(event)) { |
| 328 this._currentTaskTimeByCategory = {}; | 328 this._currentTaskTimeByCategory = {}; |
| 329 this._lastTaskBeginTime = event.startTime; | 329 this._lastTaskBeginTime = event.startTime; |
| 330 } | 330 } |
| 331 if (!this._framePendingCommit && WebInspector.TimelineFrameModel._mainFrameM
arkers.indexOf(event.name) >= 0) | 331 if (!this._framePendingCommit && TimelineModel.TimelineFrameModel._mainFrame
Markers.indexOf(event.name) >= 0) |
| 332 this._framePendingCommit = | 332 this._framePendingCommit = |
| 333 new WebInspector.PendingFrame(this._lastTaskBeginTime || event.startTi
me, this._currentTaskTimeByCategory); | 333 new TimelineModel.PendingFrame(this._lastTaskBeginTime || event.startT
ime, this._currentTaskTimeByCategory); |
| 334 if (!this._framePendingCommit) { | 334 if (!this._framePendingCommit) { |
| 335 this._addTimeForCategory(this._currentTaskTimeByCategory, event); | 335 this._addTimeForCategory(this._currentTaskTimeByCategory, event); |
| 336 return; | 336 return; |
| 337 } | 337 } |
| 338 this._addTimeForCategory(this._framePendingCommit.timeByCategory, event); | 338 this._addTimeForCategory(this._framePendingCommit.timeByCategory, event); |
| 339 | 339 |
| 340 if (event.name === eventNames.BeginMainThreadFrame && event.args['data'] &&
event.args['data']['frameId']) | 340 if (event.name === eventNames.BeginMainThreadFrame && event.args['data'] &&
event.args['data']['frameId']) |
| 341 this._framePendingCommit.mainFrameId = event.args['data']['frameId']; | 341 this._framePendingCommit.mainFrameId = event.args['data']['frameId']; |
| 342 if (event.name === eventNames.Paint && event.args['data']['layerId'] && WebI
nspector.TimelineData.forEvent(event).picture && this._target) | 342 if (event.name === eventNames.Paint && event.args['data']['layerId'] && Time
lineModel.TimelineData.forEvent(event).picture && this._target) |
| 343 this._framePendingCommit.paints.push(new WebInspector.LayerPaintEvent(even
t, this._target)); | 343 this._framePendingCommit.paints.push(new TimelineModel.LayerPaintEvent(eve
nt, this._target)); |
| 344 if (event.name === eventNames.CompositeLayers && event.args['layerTreeId'] =
== this._layerTreeId) | 344 if (event.name === eventNames.CompositeLayers && event.args['layerTreeId'] =
== this._layerTreeId) |
| 345 this.handleCompositeLayers(); | 345 this.handleCompositeLayers(); |
| 346 } | 346 } |
| 347 | 347 |
| 348 /** | 348 /** |
| 349 * @param {!Object.<string, number>} timeByCategory | 349 * @param {!Object.<string, number>} timeByCategory |
| 350 * @param {!WebInspector.TracingModel.Event} event | 350 * @param {!SDK.TracingModel.Event} event |
| 351 */ | 351 */ |
| 352 _addTimeForCategory(timeByCategory, event) { | 352 _addTimeForCategory(timeByCategory, event) { |
| 353 if (!event.selfTime) | 353 if (!event.selfTime) |
| 354 return; | 354 return; |
| 355 var categoryName = this._categoryMapper(event); | 355 var categoryName = this._categoryMapper(event); |
| 356 timeByCategory[categoryName] = (timeByCategory[categoryName] || 0) + event.s
elfTime; | 356 timeByCategory[categoryName] = (timeByCategory[categoryName] || 0) + event.s
elfTime; |
| 357 } | 357 } |
| 358 }; | 358 }; |
| 359 | 359 |
| 360 WebInspector.TimelineFrameModel._mainFrameMarkers = [ | 360 TimelineModel.TimelineFrameModel._mainFrameMarkers = [ |
| 361 WebInspector.TimelineModel.RecordType.ScheduleStyleRecalculation, | 361 TimelineModel.TimelineModel.RecordType.ScheduleStyleRecalculation, |
| 362 WebInspector.TimelineModel.RecordType.InvalidateLayout, WebInspector.TimelineM
odel.RecordType.BeginMainThreadFrame, | 362 TimelineModel.TimelineModel.RecordType.InvalidateLayout, TimelineModel.Timelin
eModel.RecordType.BeginMainThreadFrame, |
| 363 WebInspector.TimelineModel.RecordType.ScrollLayer | 363 TimelineModel.TimelineModel.RecordType.ScrollLayer |
| 364 ]; | 364 ]; |
| 365 | 365 |
| 366 /** | 366 /** |
| 367 * @unrestricted | 367 * @unrestricted |
| 368 */ | 368 */ |
| 369 WebInspector.TracingFrameLayerTree = class { | 369 TimelineModel.TracingFrameLayerTree = class { |
| 370 /** | 370 /** |
| 371 * @param {!WebInspector.Target} target | 371 * @param {!SDK.Target} target |
| 372 * @param {!WebInspector.TracingModel.ObjectSnapshot} snapshot | 372 * @param {!SDK.TracingModel.ObjectSnapshot} snapshot |
| 373 */ | 373 */ |
| 374 constructor(target, snapshot) { | 374 constructor(target, snapshot) { |
| 375 this._target = target; | 375 this._target = target; |
| 376 this._snapshot = snapshot; | 376 this._snapshot = snapshot; |
| 377 /** @type {!Array<!WebInspector.LayerPaintEvent>|undefined} */ | 377 /** @type {!Array<!TimelineModel.LayerPaintEvent>|undefined} */ |
| 378 this._paints; | 378 this._paints; |
| 379 } | 379 } |
| 380 | 380 |
| 381 /** | 381 /** |
| 382 * @return {!Promise<?WebInspector.TracingLayerTree>} | 382 * @return {!Promise<?TimelineModel.TracingLayerTree>} |
| 383 */ | 383 */ |
| 384 layerTreePromise() { | 384 layerTreePromise() { |
| 385 return this._snapshot.objectPromise().then(result => { | 385 return this._snapshot.objectPromise().then(result => { |
| 386 if (!result) | 386 if (!result) |
| 387 return null; | 387 return null; |
| 388 var viewport = result['device_viewport_size']; | 388 var viewport = result['device_viewport_size']; |
| 389 var tiles = result['active_tiles']; | 389 var tiles = result['active_tiles']; |
| 390 var rootLayer = result['active_tree']['root_layer']; | 390 var rootLayer = result['active_tree']['root_layer']; |
| 391 var layers = result['active_tree']['layers']; | 391 var layers = result['active_tree']['layers']; |
| 392 var layerTree = new WebInspector.TracingLayerTree(this._target); | 392 var layerTree = new TimelineModel.TracingLayerTree(this._target); |
| 393 layerTree.setViewportSize(viewport); | 393 layerTree.setViewportSize(viewport); |
| 394 layerTree.setTiles(tiles); | 394 layerTree.setTiles(tiles); |
| 395 return new Promise( | 395 return new Promise( |
| 396 resolve => layerTree.setLayers(rootLayer, layers, this._paints || [],
() => resolve(layerTree))); | 396 resolve => layerTree.setLayers(rootLayer, layers, this._paints || [],
() => resolve(layerTree))); |
| 397 }); | 397 }); |
| 398 } | 398 } |
| 399 | 399 |
| 400 /** | 400 /** |
| 401 * @return {!Array<!WebInspector.LayerPaintEvent>} | 401 * @return {!Array<!TimelineModel.LayerPaintEvent>} |
| 402 */ | 402 */ |
| 403 paints() { | 403 paints() { |
| 404 return this._paints || []; | 404 return this._paints || []; |
| 405 } | 405 } |
| 406 | 406 |
| 407 /** | 407 /** |
| 408 * @param {!Array<!WebInspector.LayerPaintEvent>} paints | 408 * @param {!Array<!TimelineModel.LayerPaintEvent>} paints |
| 409 */ | 409 */ |
| 410 _setPaints(paints) { | 410 _setPaints(paints) { |
| 411 this._paints = paints; | 411 this._paints = paints; |
| 412 } | 412 } |
| 413 }; | 413 }; |
| 414 | 414 |
| 415 /** | 415 /** |
| 416 * @unrestricted | 416 * @unrestricted |
| 417 */ | 417 */ |
| 418 WebInspector.TimelineFrame = class { | 418 TimelineModel.TimelineFrame = class { |
| 419 /** | 419 /** |
| 420 * @param {number} startTime | 420 * @param {number} startTime |
| 421 * @param {number} startTimeOffset | 421 * @param {number} startTimeOffset |
| 422 */ | 422 */ |
| 423 constructor(startTime, startTimeOffset) { | 423 constructor(startTime, startTimeOffset) { |
| 424 this.startTime = startTime; | 424 this.startTime = startTime; |
| 425 this.startTimeOffset = startTimeOffset; | 425 this.startTimeOffset = startTimeOffset; |
| 426 this.endTime = this.startTime; | 426 this.endTime = this.startTime; |
| 427 this.duration = 0; | 427 this.duration = 0; |
| 428 this.timeByCategory = {}; | 428 this.timeByCategory = {}; |
| 429 this.cpuTime = 0; | 429 this.cpuTime = 0; |
| 430 this.idle = false; | 430 this.idle = false; |
| 431 /** @type {?WebInspector.TracingFrameLayerTree} */ | 431 /** @type {?TimelineModel.TracingFrameLayerTree} */ |
| 432 this.layerTree = null; | 432 this.layerTree = null; |
| 433 /** @type {!Array.<!WebInspector.LayerPaintEvent>} */ | 433 /** @type {!Array.<!TimelineModel.LayerPaintEvent>} */ |
| 434 this._paints = []; | 434 this._paints = []; |
| 435 /** @type {number|undefined} */ | 435 /** @type {number|undefined} */ |
| 436 this._mainFrameId = undefined; | 436 this._mainFrameId = undefined; |
| 437 } | 437 } |
| 438 | 438 |
| 439 /** | 439 /** |
| 440 * @return {boolean} | 440 * @return {boolean} |
| 441 */ | 441 */ |
| 442 hasWarnings() { | 442 hasWarnings() { |
| 443 var /** @const */ longFrameDurationThresholdMs = 22; | 443 var /** @const */ longFrameDurationThresholdMs = 22; |
| 444 return !this.idle && this.duration > longFrameDurationThresholdMs; | 444 return !this.idle && this.duration > longFrameDurationThresholdMs; |
| 445 } | 445 } |
| 446 | 446 |
| 447 /** | 447 /** |
| 448 * @param {number} endTime | 448 * @param {number} endTime |
| 449 */ | 449 */ |
| 450 _setEndTime(endTime) { | 450 _setEndTime(endTime) { |
| 451 this.endTime = endTime; | 451 this.endTime = endTime; |
| 452 this.duration = this.endTime - this.startTime; | 452 this.duration = this.endTime - this.startTime; |
| 453 } | 453 } |
| 454 | 454 |
| 455 /** | 455 /** |
| 456 * @param {?WebInspector.TracingFrameLayerTree} layerTree | 456 * @param {?TimelineModel.TracingFrameLayerTree} layerTree |
| 457 */ | 457 */ |
| 458 _setLayerTree(layerTree) { | 458 _setLayerTree(layerTree) { |
| 459 this.layerTree = layerTree; | 459 this.layerTree = layerTree; |
| 460 } | 460 } |
| 461 | 461 |
| 462 /** | 462 /** |
| 463 * @param {!Object} timeByCategory | 463 * @param {!Object} timeByCategory |
| 464 */ | 464 */ |
| 465 _addTimeForCategories(timeByCategory) { | 465 _addTimeForCategories(timeByCategory) { |
| 466 for (var category in timeByCategory) | 466 for (var category in timeByCategory) |
| 467 this._addTimeForCategory(category, timeByCategory[category]); | 467 this._addTimeForCategory(category, timeByCategory[category]); |
| 468 } | 468 } |
| 469 | 469 |
| 470 /** | 470 /** |
| 471 * @param {string} category | 471 * @param {string} category |
| 472 * @param {number} time | 472 * @param {number} time |
| 473 */ | 473 */ |
| 474 _addTimeForCategory(category, time) { | 474 _addTimeForCategory(category, time) { |
| 475 this.timeByCategory[category] = (this.timeByCategory[category] || 0) + time; | 475 this.timeByCategory[category] = (this.timeByCategory[category] || 0) + time; |
| 476 this.cpuTime += time; | 476 this.cpuTime += time; |
| 477 } | 477 } |
| 478 }; | 478 }; |
| 479 | 479 |
| 480 /** | 480 /** |
| 481 * @unrestricted | 481 * @unrestricted |
| 482 */ | 482 */ |
| 483 WebInspector.LayerPaintEvent = class { | 483 TimelineModel.LayerPaintEvent = class { |
| 484 /** | 484 /** |
| 485 * @param {!WebInspector.TracingModel.Event} event | 485 * @param {!SDK.TracingModel.Event} event |
| 486 * @param {?WebInspector.Target} target | 486 * @param {?SDK.Target} target |
| 487 */ | 487 */ |
| 488 constructor(event, target) { | 488 constructor(event, target) { |
| 489 this._event = event; | 489 this._event = event; |
| 490 this._target = target; | 490 this._target = target; |
| 491 } | 491 } |
| 492 | 492 |
| 493 /** | 493 /** |
| 494 * @return {string} | 494 * @return {string} |
| 495 */ | 495 */ |
| 496 layerId() { | 496 layerId() { |
| 497 return this._event.args['data']['layerId']; | 497 return this._event.args['data']['layerId']; |
| 498 } | 498 } |
| 499 | 499 |
| 500 /** | 500 /** |
| 501 * @return {!WebInspector.TracingModel.Event} | 501 * @return {!SDK.TracingModel.Event} |
| 502 */ | 502 */ |
| 503 event() { | 503 event() { |
| 504 return this._event; | 504 return this._event; |
| 505 } | 505 } |
| 506 | 506 |
| 507 /** | 507 /** |
| 508 * @return {!Promise<?{rect: !Array<number>, serializedPicture: string}>} | 508 * @return {!Promise<?{rect: !Array<number>, serializedPicture: string}>} |
| 509 */ | 509 */ |
| 510 picturePromise() { | 510 picturePromise() { |
| 511 var picture = WebInspector.TimelineData.forEvent(this._event).picture; | 511 var picture = TimelineModel.TimelineData.forEvent(this._event).picture; |
| 512 return picture.objectPromise().then(result => { | 512 return picture.objectPromise().then(result => { |
| 513 if (!result) | 513 if (!result) |
| 514 return null; | 514 return null; |
| 515 var rect = result['params'] && result['params']['layer_rect']; | 515 var rect = result['params'] && result['params']['layer_rect']; |
| 516 var picture = result['skp64']; | 516 var picture = result['skp64']; |
| 517 return rect && picture ? {rect: rect, serializedPicture: picture} : null; | 517 return rect && picture ? {rect: rect, serializedPicture: picture} : null; |
| 518 }); | 518 }); |
| 519 } | 519 } |
| 520 | 520 |
| 521 /** | 521 /** |
| 522 * @return !Promise<?{rect: !Array<number>, snapshot: !WebInspector.PaintProfi
lerSnapshot}>} | 522 * @return !Promise<?{rect: !Array<number>, snapshot: !SDK.PaintProfilerSnapsh
ot}>} |
| 523 */ | 523 */ |
| 524 snapshotPromise() { | 524 snapshotPromise() { |
| 525 return this.picturePromise().then(picture => { | 525 return this.picturePromise().then(picture => { |
| 526 if (!picture || !this._target) | 526 if (!picture || !this._target) |
| 527 return null; | 527 return null; |
| 528 return WebInspector.PaintProfilerSnapshot.load(this._target, picture.seria
lizedPicture) | 528 return SDK.PaintProfilerSnapshot.load(this._target, picture.serializedPict
ure) |
| 529 .then(snapshot => snapshot ? {rect: picture.rect, snapshot: snapshot}
: null); | 529 .then(snapshot => snapshot ? {rect: picture.rect, snapshot: snapshot}
: null); |
| 530 }); | 530 }); |
| 531 } | 531 } |
| 532 }; | 532 }; |
| 533 | 533 |
| 534 /** | 534 /** |
| 535 * @unrestricted | 535 * @unrestricted |
| 536 */ | 536 */ |
| 537 WebInspector.PendingFrame = class { | 537 TimelineModel.PendingFrame = class { |
| 538 /** | 538 /** |
| 539 * @param {number} triggerTime | 539 * @param {number} triggerTime |
| 540 * @param {!Object.<string, number>} timeByCategory | 540 * @param {!Object.<string, number>} timeByCategory |
| 541 */ | 541 */ |
| 542 constructor(triggerTime, timeByCategory) { | 542 constructor(triggerTime, timeByCategory) { |
| 543 /** @type {!Object.<string, number>} */ | 543 /** @type {!Object.<string, number>} */ |
| 544 this.timeByCategory = timeByCategory; | 544 this.timeByCategory = timeByCategory; |
| 545 /** @type {!Array.<!WebInspector.LayerPaintEvent>} */ | 545 /** @type {!Array.<!TimelineModel.LayerPaintEvent>} */ |
| 546 this.paints = []; | 546 this.paints = []; |
| 547 /** @type {number|undefined} */ | 547 /** @type {number|undefined} */ |
| 548 this.mainFrameId = undefined; | 548 this.mainFrameId = undefined; |
| 549 this.triggerTime = triggerTime; | 549 this.triggerTime = triggerTime; |
| 550 } | 550 } |
| 551 }; | 551 }; |
| OLD | NEW |