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 |