| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * @param {!WebInspector.TracingModel} tracingModel | 6 * @param {!WebInspector.TracingModel} tracingModel |
| 7 * @constructor | 7 * @constructor |
| 8 */ | 8 */ |
| 9 WebInspector.TracingTimelineModel = function(tracingModel) | 9 WebInspector.TracingTimelineModel = function(tracingModel) |
| 10 { | 10 { |
| 11 this._tracingModel = tracingModel; | 11 this._tracingModel = tracingModel; |
| 12 this._mainThreadEvents = []; | 12 this._mainThreadEvents = []; |
| 13 this._inspectedTargetEvents = []; |
| 13 } | 14 } |
| 14 | 15 |
| 15 WebInspector.TracingTimelineModel.RecordType = { | 16 WebInspector.TracingTimelineModel.RecordType = { |
| 16 Program: "Program", | 17 Program: "Program", |
| 17 EventDispatch: "EventDispatch", | 18 EventDispatch: "EventDispatch", |
| 18 | 19 |
| 19 GPUTask: "GPUTask", | 20 GPUTask: "GPUTask", |
| 20 | 21 |
| 21 RequestMainThreadFrame: "RequestMainThreadFrame", | 22 RequestMainThreadFrame: "RequestMainThreadFrame", |
| 22 BeginFrame: "BeginFrame", | 23 BeginFrame: "BeginFrame", |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 | 81 |
| 81 DecodeImage: "Decode Image", | 82 DecodeImage: "Decode Image", |
| 82 ResizeImage: "Resize Image", | 83 ResizeImage: "Resize Image", |
| 83 DrawLazyPixelRef: "Draw LazyPixelRef", | 84 DrawLazyPixelRef: "Draw LazyPixelRef", |
| 84 DecodeLazyPixelRef: "Decode LazyPixelRef", | 85 DecodeLazyPixelRef: "Decode LazyPixelRef", |
| 85 | 86 |
| 86 LazyPixelRef: "LazyPixelRef", | 87 LazyPixelRef: "LazyPixelRef", |
| 87 LayerTreeHostImplSnapshot: "cc::LayerTreeHostImpl" | 88 LayerTreeHostImplSnapshot: "cc::LayerTreeHostImpl" |
| 88 }; | 89 }; |
| 89 | 90 |
| 90 | |
| 91 WebInspector.TracingTimelineModel.prototype = { | 91 WebInspector.TracingTimelineModel.prototype = { |
| 92 willStartRecordingTraceEvents: function() | 92 willStartRecordingTraceEvents: function() |
| 93 { | 93 { |
| 94 this._mainThreadEvents = []; | 94 this._mainThreadEvents = []; |
| 95 this._inspectedTargetEvents = []; |
| 95 }, | 96 }, |
| 96 | 97 |
| 97 didStopRecordingTraceEvents: function() | 98 didStopRecordingTraceEvents: function() |
| 98 { | 99 { |
| 99 var events = this._tracingModel.inspectedTargetEvents(); | 100 var events = this._tracingModel.devtoolsMetadataEvents(); |
| 101 events.sort(WebInspector.TracingModel.Event.compareStartTime); |
| 102 |
| 100 this._resetProcessingState(); | 103 this._resetProcessingState(); |
| 101 for (var i = 0, length = events.length; i < length; i++) | 104 for (var i = 0, length = events.length; i < length; i++) { |
| 102 this._processEvent(events[i]); | 105 var event = events[i]; |
| 106 var process = event.thread.process(); |
| 107 var startTime = event.startTime; |
| 108 |
| 109 var endTime = Infinity; |
| 110 if (i + 1 < length) |
| 111 endTime = events[i + 1].startTime; |
| 112 |
| 113 process.sortedThreads().forEach(this._processThreadEvents.bind(this,
startTime, endTime, event.thread)); |
| 114 } |
| 103 this._resetProcessingState(); | 115 this._resetProcessingState(); |
| 116 |
| 117 this._inspectedTargetEvents.sort(WebInspector.TracingModel.Event.compare
StartTime); |
| 104 }, | 118 }, |
| 105 | 119 |
| 106 /** | 120 /** |
| 107 * @return {?number} | 121 * @return {?number} |
| 108 */ | 122 */ |
| 109 minimumRecordTime: function() | 123 minimumRecordTime: function() |
| 110 { | 124 { |
| 111 return this._tracingModel.minimumRecordTime(); | 125 return this._tracingModel.minimumRecordTime(); |
| 112 }, | 126 }, |
| 113 | 127 |
| 114 /** | 128 /** |
| 115 * @return {?number} | 129 * @return {?number} |
| 116 */ | 130 */ |
| 117 maximumRecordTime: function() | 131 maximumRecordTime: function() |
| 118 { | 132 { |
| 119 return this._tracingModel.maximumRecordTime(); | 133 return this._tracingModel.maximumRecordTime(); |
| 120 }, | 134 }, |
| 121 | 135 |
| 122 /** | 136 /** |
| 123 * @return {!Array.<!WebInspector.TracingModel.Event>} | 137 * @return {!Array.<!WebInspector.TracingModel.Event>} |
| 124 */ | 138 */ |
| 125 inspectedTargetEvents: function() | 139 inspectedTargetEvents: function() |
| 126 { | 140 { |
| 127 return this._tracingModel.inspectedTargetEvents(); | 141 return this._inspectedTargetEvents; |
| 128 }, | 142 }, |
| 129 | 143 |
| 130 /** | 144 /** |
| 131 * @return {!Array.<!WebInspector.TracingModel.Event>} | 145 * @return {!Array.<!WebInspector.TracingModel.Event>} |
| 132 */ | 146 */ |
| 133 mainThreadEvents: function() | 147 mainThreadEvents: function() |
| 134 { | 148 { |
| 135 return this._mainThreadEvents; | 149 return this._mainThreadEvents; |
| 136 }, | 150 }, |
| 137 | 151 |
| 138 _resetProcessingState: function() | 152 _resetProcessingState: function() |
| 139 { | 153 { |
| 140 this._sendRequestEvents = {}; | 154 this._sendRequestEvents = {}; |
| 141 this._timerEvents = {}; | 155 this._timerEvents = {}; |
| 142 this._requestAnimationFrameEvents = {}; | 156 this._requestAnimationFrameEvents = {}; |
| 143 this._layoutInvalidate = {}; | 157 this._layoutInvalidate = {}; |
| 144 this._lastScheduleStyleRecalculation = {}; | 158 this._lastScheduleStyleRecalculation = {}; |
| 145 this._webSocketCreateEvents = {}; | 159 this._webSocketCreateEvents = {}; |
| 146 this._paintImageEventByPixelRefId = {}; | 160 this._paintImageEventByPixelRefId = {}; |
| 147 | 161 |
| 148 this._lastRecalculateStylesEvent = null; | 162 this._lastRecalculateStylesEvent = null; |
| 149 this._currentScriptEvent = null; | 163 this._currentScriptEvent = null; |
| 150 this._eventStack = []; | 164 this._eventStack = []; |
| 151 }, | 165 }, |
| 152 | 166 |
| 153 /** | 167 /** |
| 168 * @param {number} startTime |
| 169 * @param {?number} endTime |
| 170 * @param {!WebInspector.TracingModel.Thread} mainThread |
| 171 * @param {!WebInspector.TracingModel.Thread} thread |
| 172 */ |
| 173 _processThreadEvents: function(startTime, endTime, mainThread, thread) |
| 174 { |
| 175 var events = thread.events(); |
| 176 var length = events.length; |
| 177 var i = events.lowerBound(startTime, function (time, event) { return tim
e - event.startTime }); |
| 178 |
| 179 this._eventStack = []; |
| 180 for (; i < length; i++) { |
| 181 var event = events[i]; |
| 182 if (endTime && event.startTime >= endTime) |
| 183 break; |
| 184 this._processEvent(event); |
| 185 if (thread === mainThread) |
| 186 this._mainThreadEvents.push(event); |
| 187 this._inspectedTargetEvents.push(event); |
| 188 } |
| 189 }, |
| 190 |
| 191 /** |
| 154 * @param {!WebInspector.TracingModel.Event} event | 192 * @param {!WebInspector.TracingModel.Event} event |
| 155 */ | 193 */ |
| 156 _processEvent: function(event) | 194 _processEvent: function(event) |
| 157 { | 195 { |
| 158 var recordTypes = WebInspector.TracingTimelineModel.RecordType; | 196 var recordTypes = WebInspector.TracingTimelineModel.RecordType; |
| 159 | 197 |
| 160 var eventStack = this._eventStack; | 198 var eventStack = this._eventStack; |
| 161 while (eventStack.length && eventStack.peekLast().endTime < event.startT
ime) | 199 while (eventStack.length && eventStack.peekLast().endTime < event.startT
ime) |
| 162 eventStack.pop(); | 200 eventStack.pop(); |
| 163 var duration = event.duration; | 201 var duration = event.duration; |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 case recordTypes.EvaluateScript: | 288 case recordTypes.EvaluateScript: |
| 251 case recordTypes.FunctionCall: | 289 case recordTypes.FunctionCall: |
| 252 if (!this._currentScriptEvent) | 290 if (!this._currentScriptEvent) |
| 253 this._currentScriptEvent = event; | 291 this._currentScriptEvent = event; |
| 254 break; | 292 break; |
| 255 | 293 |
| 256 case recordTypes.SetLayerTreeId: | 294 case recordTypes.SetLayerTreeId: |
| 257 this._inspectedTargetLayerTreeId = event.args["layerTreeId"]; | 295 this._inspectedTargetLayerTreeId = event.args["layerTreeId"]; |
| 258 break; | 296 break; |
| 259 | 297 |
| 260 case recordTypes.TracingStartedInPage: | |
| 261 this._mainThread = event.thread; | |
| 262 break; | |
| 263 | |
| 264 case recordTypes.Paint: | 298 case recordTypes.Paint: |
| 265 case recordTypes.ScrollLayer: | 299 case recordTypes.ScrollLayer: |
| 266 event.backendNodeId = event.args["data"]["nodeId"]; | 300 event.backendNodeId = event.args["data"]["nodeId"]; |
| 267 break; | 301 break; |
| 268 | 302 |
| 269 case recordTypes.PaintImage: | 303 case recordTypes.PaintImage: |
| 270 event.backendNodeId = event.args["data"]["nodeId"]; | 304 event.backendNodeId = event.args["data"]["nodeId"]; |
| 271 event.imageURL = event.args["data"]["url"]; | 305 event.imageURL = event.args["data"]["url"]; |
| 272 break; | 306 break; |
| 273 | 307 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 286 | 320 |
| 287 case recordTypes.DrawLazyPixelRef: | 321 case recordTypes.DrawLazyPixelRef: |
| 288 var paintImageEvent = this._findAncestorEvent(recordTypes.PaintImage
); | 322 var paintImageEvent = this._findAncestorEvent(recordTypes.PaintImage
); |
| 289 if (!paintImageEvent) | 323 if (!paintImageEvent) |
| 290 break; | 324 break; |
| 291 this._paintImageEventByPixelRefId[event.args["LazyPixelRef"]] = pain
tImageEvent; | 325 this._paintImageEventByPixelRefId[event.args["LazyPixelRef"]] = pain
tImageEvent; |
| 292 event.backendNodeId = paintImageEvent.backendNodeId; | 326 event.backendNodeId = paintImageEvent.backendNodeId; |
| 293 event.imageURL = paintImageEvent.imageURL; | 327 event.imageURL = paintImageEvent.imageURL; |
| 294 break; | 328 break; |
| 295 } | 329 } |
| 296 if (this._mainThread === event.thread) | |
| 297 this._mainThreadEvents.push(event); | |
| 298 }, | 330 }, |
| 299 | 331 |
| 300 /** | 332 /** |
| 301 * @param {string} name | 333 * @param {string} name |
| 302 * @return {?WebInspector.TracingModel.Event} | 334 * @return {?WebInspector.TracingModel.Event} |
| 303 */ | 335 */ |
| 304 _findAncestorEvent: function(name) | 336 _findAncestorEvent: function(name) |
| 305 { | 337 { |
| 306 for (var i = this._eventStack.length - 1; i >= 0; --i) { | 338 for (var i = this._eventStack.length - 1; i >= 0; --i) { |
| 307 var event = this._eventStack[i]; | 339 var event = this._eventStack[i]; |
| 308 if (event.name === name) | 340 if (event.name === name) |
| 309 return event; | 341 return event; |
| 310 } | 342 } |
| 311 return null; | 343 return null; |
| 312 } | 344 } |
| 313 } | 345 } |
| 314 | 346 |
| OLD | NEW |