Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: Source/devtools/front_end/timeline/TracingTimelineModel.js

Issue 311113002: Move inspected target events calculation into TracingTimelineModel (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 82
82 DecodeImage: "Decode Image", 83 DecodeImage: "Decode Image",
83 ResizeImage: "Resize Image", 84 ResizeImage: "Resize Image",
84 DrawLazyPixelRef: "Draw LazyPixelRef", 85 DrawLazyPixelRef: "Draw LazyPixelRef",
85 DecodeLazyPixelRef: "Decode LazyPixelRef", 86 DecodeLazyPixelRef: "Decode LazyPixelRef",
86 87
87 LazyPixelRef: "LazyPixelRef", 88 LazyPixelRef: "LazyPixelRef",
88 LayerTreeHostImplSnapshot: "cc::LayerTreeHostImpl" 89 LayerTreeHostImplSnapshot: "cc::LayerTreeHostImpl"
89 }; 90 };
90 91
91
92 WebInspector.TracingTimelineModel.prototype = { 92 WebInspector.TracingTimelineModel.prototype = {
93 willStartRecordingTraceEvents: function() 93 willStartRecordingTraceEvents: function()
caseq 2014/06/04 13:08:59 nit: I wonder if we really need this one?
yurys 2014/06/04 13:22:16 This will be merged with one on TimelineModel even
94 { 94 {
95 this._mainThreadEvents = []; 95 this._mainThreadEvents = [];
96 this._inspectedTargetEvents = [];
96 }, 97 },
97 98
98 didStopRecordingTraceEvents: function() 99 didStopRecordingTraceEvents: function()
caseq 2014/06/04 13:08:59 Can we get it as an event from TracingModel instea
yurys 2014/06/04 13:22:16 I was going to do this in a separate change. Timel
99 { 100 {
100 var events = this._tracingModel.inspectedTargetEvents(); 101 var events = this._tracingModel.devtoolsMetadataEvents();
102 events.sort(WebInspector.TracingModel.Event.compareStartTime);
103
101 this._resetProcessingState(); 104 this._resetProcessingState();
102 for (var i = 0, length = events.length; i < length; i++) 105 for (var i = 0, length = events.length; i < length; i++) {
103 this._processEvent(events[i]); 106 var event = events[i];
107 var process = event.thread.process();
108 var startTime = event.startTime;
109
110 var endTime = null;
caseq 2014/06/04 13:08:59 nit: endTime = Infinity, so that you don't have sp
yurys 2014/06/04 13:22:16 Done.
111 if (i + 1 < length)
112 endTime = events[i + 1].startTime;
113
114 this._mainThread = event.thread;
caseq 2014/06/04 13:08:59 Can we rather bind this to processThreadEvents as
yurys 2014/06/04 13:22:16 Done.
115 process.sortedThreads().forEach(this._processThreadEvents.bind(this, startTime, endTime));
116 this._mainThread = null;
117 }
104 this._resetProcessingState(); 118 this._resetProcessingState();
119
120 this._inspectedTargetEvents.sort(WebInspector.TracingModel.Event.compare StartTime);
105 }, 121 },
106 122
107 /** 123 /**
108 * @return {?number} 124 * @return {?number}
109 */ 125 */
110 minimumRecordTime: function() 126 minimumRecordTime: function()
111 { 127 {
112 return this._tracingModel.minimumRecordTime(); 128 return this._tracingModel.minimumRecordTime();
113 }, 129 },
114 130
115 /** 131 /**
116 * @return {?number} 132 * @return {?number}
117 */ 133 */
118 maximumRecordTime: function() 134 maximumRecordTime: function()
119 { 135 {
120 return this._tracingModel.maximumRecordTime(); 136 return this._tracingModel.maximumRecordTime();
121 }, 137 },
122 138
123 /** 139 /**
124 * @return {!Array.<!WebInspector.TracingModel.Event>} 140 * @return {!Array.<!WebInspector.TracingModel.Event>}
125 */ 141 */
126 inspectedTargetEvents: function() 142 inspectedTargetEvents: function()
127 { 143 {
128 return this._tracingModel.inspectedTargetEvents(); 144 return this._inspectedTargetEvents;
129 }, 145 },
130 146
131 /** 147 /**
132 * @return {!Array.<!WebInspector.TracingModel.Event>} 148 * @return {!Array.<!WebInspector.TracingModel.Event>}
133 */ 149 */
134 mainThreadEvents: function() 150 mainThreadEvents: function()
135 { 151 {
136 return this._mainThreadEvents; 152 return this._mainThreadEvents;
137 }, 153 },
138 154
139 _resetProcessingState: function() 155 _resetProcessingState: function()
140 { 156 {
157 this._mainThread = null;
158
141 this._sendRequestEvents = {}; 159 this._sendRequestEvents = {};
142 this._timerEvents = {}; 160 this._timerEvents = {};
143 this._requestAnimationFrameEvents = {}; 161 this._requestAnimationFrameEvents = {};
144 this._layoutInvalidate = {}; 162 this._layoutInvalidate = {};
145 this._lastScheduleStyleRecalculation = {}; 163 this._lastScheduleStyleRecalculation = {};
146 this._webSocketCreateEvents = {}; 164 this._webSocketCreateEvents = {};
147 this._paintImageEventByPixelRefId = {}; 165 this._paintImageEventByPixelRefId = {};
148 166
149 this._lastRecalculateStylesEvent = null; 167 this._lastRecalculateStylesEvent = null;
150 this._currentScriptEvent = null; 168 this._currentScriptEvent = null;
151 this._eventStack = []; 169 this._eventStack = [];
152 }, 170 },
153 171
154 /** 172 /**
173 * @param {number} startTime
174 * @param {?number} endTime
175 * @param {!WebInspector.TracingModel.Thread} thread
176 */
177 _processThreadEvents: function(startTime, endTime, thread)
178 {
179 var events = thread.events();
180 var i = 0
181 var length = events.length;
182 while (i < length && events[i].startTime < startTime)
caseq 2014/06/04 13:08:59 nit: i = events.upperBound(startTime, function (ti
yurys 2014/06/04 13:22:16 Done. Changed to use lowerBound
183 i++;
184
185 this._eventStack = [];
caseq 2014/06/04 13:08:59 unused?
yurys 2014/06/04 13:22:16 It is used. This is to make sure that event stack
186 for (; i < length; i++) {
187 var event = events[i];
188 if (endTime && event.startTime >= endTime)
189 break;
190 this._processEvent(event);
191 if (thread === this._mainThread)
192 this._mainThreadEvents.push(event);
193 this._inspectedTargetEvents.push(event);
194 }
195 },
196
197 /**
155 * @param {!WebInspector.TracingModel.Event} event 198 * @param {!WebInspector.TracingModel.Event} event
156 */ 199 */
157 _processEvent: function(event) 200 _processEvent: function(event)
158 { 201 {
159 var recordTypes = WebInspector.TracingTimelineModel.RecordType; 202 var recordTypes = WebInspector.TracingTimelineModel.RecordType;
160 203
161 var eventStack = this._eventStack; 204 var eventStack = this._eventStack;
162 while (eventStack.length && eventStack.peekLast().endTime < event.startT ime) 205 while (eventStack.length && eventStack.peekLast().endTime < event.startT ime)
163 eventStack.pop(); 206 eventStack.pop();
164 var duration = event.duration; 207 var duration = event.duration;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 case recordTypes.EvaluateScript: 294 case recordTypes.EvaluateScript:
252 case recordTypes.FunctionCall: 295 case recordTypes.FunctionCall:
253 if (!this._currentScriptEvent) 296 if (!this._currentScriptEvent)
254 this._currentScriptEvent = event; 297 this._currentScriptEvent = event;
255 break; 298 break;
256 299
257 case recordTypes.SetLayerTreeId: 300 case recordTypes.SetLayerTreeId:
258 this._inspectedTargetLayerTreeId = event.args["layerTreeId"]; 301 this._inspectedTargetLayerTreeId = event.args["layerTreeId"];
259 break; 302 break;
260 303
261 case recordTypes.TracingStartedInPage:
262 this._mainThread = event.thread;
263 break;
264
265 case recordTypes.Paint: 304 case recordTypes.Paint:
266 case recordTypes.ScrollLayer: 305 case recordTypes.ScrollLayer:
267 event.backendNodeId = event.args["data"]["nodeId"]; 306 event.backendNodeId = event.args["data"]["nodeId"];
268 break; 307 break;
269 308
270 case recordTypes.PaintImage: 309 case recordTypes.PaintImage:
271 event.backendNodeId = event.args["data"]["nodeId"]; 310 event.backendNodeId = event.args["data"]["nodeId"];
272 event.imageURL = event.args["data"]["url"]; 311 event.imageURL = event.args["data"]["url"];
273 break; 312 break;
274 313
(...skipping 12 matching lines...) Expand all
287 326
288 case recordTypes.DrawLazyPixelRef: 327 case recordTypes.DrawLazyPixelRef:
289 var paintImageEvent = this._findAncestorEvent(recordTypes.PaintImage ); 328 var paintImageEvent = this._findAncestorEvent(recordTypes.PaintImage );
290 if (!paintImageEvent) 329 if (!paintImageEvent)
291 break; 330 break;
292 this._paintImageEventByPixelRefId[event.args["LazyPixelRef"]] = pain tImageEvent; 331 this._paintImageEventByPixelRefId[event.args["LazyPixelRef"]] = pain tImageEvent;
293 event.backendNodeId = paintImageEvent.backendNodeId; 332 event.backendNodeId = paintImageEvent.backendNodeId;
294 event.imageURL = paintImageEvent.imageURL; 333 event.imageURL = paintImageEvent.imageURL;
295 break; 334 break;
296 } 335 }
297 if (this._mainThread === event.thread)
298 this._mainThreadEvents.push(event);
299 }, 336 },
300 337
301 /** 338 /**
302 * @param {string} name 339 * @param {string} name
303 * @return {?WebInspector.TracingModel.Event} 340 * @return {?WebInspector.TracingModel.Event}
304 */ 341 */
305 _findAncestorEvent: function(name) 342 _findAncestorEvent: function(name)
306 { 343 {
307 for (var i = this._eventStack.length - 1; i >= 0; --i) { 344 for (var i = this._eventStack.length - 1; i >= 0; --i) {
308 var event = this._eventStack[i]; 345 var event = this._eventStack[i];
309 if (event.name === name) 346 if (event.name === name)
310 return event; 347 return event;
311 } 348 }
312 return null; 349 return null;
313 } 350 }
314 } 351 }
315 352
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698