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

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

Issue 301593002: DevTools: process events from all threads in TimelineTraceEventBindings (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebased Created 6 years, 7 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
« no previous file with comments | « Source/devtools/front_end/timeline/TimelineTraceEventBindings.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2014 The Chromium Authors. All rights reserved. 2 * Copyright 2014 The Chromium Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be 3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file. 4 * found in the LICENSE file.
5 */ 5 */
6 6
7 /** 7 /**
8 * @constructor 8 * @constructor
9 * @extends {WebInspector.TargetAwareObject} 9 * @extends {WebInspector.TargetAwareObject}
10 */ 10 */
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 ThreadSortIndex: "thread_sort_index", 64 ThreadSortIndex: "thread_sort_index",
65 ThreadName: "thread_name" 65 ThreadName: "thread_name"
66 } 66 }
67 67
68 WebInspector.TracingModel.DevToolsMetadataEventCategory = "disabled-by-default-d evtools.timeline"; 68 WebInspector.TracingModel.DevToolsMetadataEventCategory = "disabled-by-default-d evtools.timeline";
69 69
70 WebInspector.TracingModel.FrameLifecycleEventCategory = "cc,devtools"; 70 WebInspector.TracingModel.FrameLifecycleEventCategory = "cc,devtools";
71 71
72 WebInspector.TracingModel.DevToolsMetadataEvent = { 72 WebInspector.TracingModel.DevToolsMetadataEvent = {
73 TracingStartedInPage: "TracingStartedInPage", 73 TracingStartedInPage: "TracingStartedInPage",
74 SetLayerTreeId: "SetLayerTreeId"
75 };
76
77 WebInspector.TracingModel.TraceEventName = {
78 ActivateLayerTree: "ActivateLayerTree",
79 BeginFrame: "BeginFrame",
80 BeginMainThreadFrame: "BeginMainThreadFrame",
81 CompositeLayers: "CompositeLayers",
82 DrawFrame: "DrawFrame",
83 PaintSetup: "PaintSetup",
84 RasterTask: "RasterTask",
85 RequestMainThreadFrame: "RequestMainThreadFrame",
86 LayerTreeHostImplSnapshot: "cc::LayerTreeHostImpl"
87 }; 74 };
88 75
89 WebInspector.TracingModel.prototype = { 76 WebInspector.TracingModel.prototype = {
90 /** 77 /**
91 * @return {!Array.<!WebInspector.TracingModel.Event>} 78 * @return {!Array.<!WebInspector.TracingModel.Event>}
92 */ 79 */
93 inspectedTargetMainThreadEvents: function() 80 inspectedTargetEvents: function()
94 {
95 return this._inspectedTargetMainThreadEvents;
96 },
97
98 /**
99 * @return {!Array.<!WebInspector.TracingModel.Event>}
100 */
101 frameLifecycleEvents: function()
102 { 81 {
103 /** 82 /**
104 * @param {!WebInspector.TracingModel.Event} a 83 * @param {!WebInspector.TracingModel.Event} a
105 * @param {!WebInspector.TracingModel.Event} b 84 * @param {!WebInspector.TracingModel.Event} b
106 */ 85 */
107 function compareStartTime(a, b) 86 function compareStartTime(a, b)
108 { 87 {
109 return a.startTime - b.startTime; 88 return a.startTime - b.startTime;
110 } 89 }
111 return this._frameLifecycleEvents.sort(compareStartTime); 90
91 if (this._needToSortInspectedTargetEvents) {
yurys 2014/05/27 15:41:32 Can we just sort them once after all events have b
92 this._inspectedTargetEvents.sort(compareStartTime);
93 this._needToSortInspectedTargetEvents = false;
94 }
95 return this._inspectedTargetEvents;
112 }, 96 },
113 97
114 /** 98 /**
115 * @param {string} categoryFilter 99 * @param {string} categoryFilter
116 * @param {string} options 100 * @param {string} options
117 * @param {function(?string)=} callback 101 * @param {function(?string)=} callback
118 */ 102 */
119 start: function(categoryFilter, options, callback) 103 start: function(categoryFilter, options, callback)
120 { 104 {
121 this.reset(); 105 this.reset();
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 this._pendingStopCallback = null; 174 this._pendingStopCallback = null;
191 }, 175 },
192 176
193 reset: function() 177 reset: function()
194 { 178 {
195 this._processById = {}; 179 this._processById = {};
196 this._minimumRecordTime = null; 180 this._minimumRecordTime = null;
197 this._maximumRecordTime = null; 181 this._maximumRecordTime = null;
198 this._sessionId = null; 182 this._sessionId = null;
199 this._inspectedTargetProcessId = null; 183 this._inspectedTargetProcessId = null;
200 this._inspectedTargetMainThread = null; 184 this._inspectedTargetEvents = [];
201 this._inspectedTargetMainThreadEvents = [];
202 this._inspectedTargetLayerTreeHostId = 0;
203 this._frameLifecycleEvents = [];
204 }, 185 },
205 186
206 /** 187 /**
207 * @param {!WebInspector.TracingModel.EventPayload} payload 188 * @param {!WebInspector.TracingModel.EventPayload} payload
208 */ 189 */
209 _addEvent: function(payload) 190 _addEvent: function(payload)
210 { 191 {
211 var process = this._processById[payload.pid]; 192 var process = this._processById[payload.pid];
212 if (!process) { 193 if (!process) {
213 process = new WebInspector.TracingModel.Process(payload.pid); 194 process = new WebInspector.TracingModel.Process(payload.pid);
214 this._processById[payload.pid] = process; 195 this._processById[payload.pid] = process;
215 } 196 }
216 if (payload.ph === WebInspector.TracingModel.Phase.SnapshotObject) { 197 if (payload.ph === WebInspector.TracingModel.Phase.SnapshotObject) {
217 process.addObject(payload); 198 process.addObject(payload);
218 if (payload.pid === this._inspectedTargetProcessId && payload.name = == "cc::LayerTreeHostImpl" && parseInt(payload.id, 0) === this._inspectedTargetL ayerTreeId) 199 if (payload.pid === this._inspectedTargetProcessId)
219 this._frameLifecycleEvents.push(new WebInspector.TracingModel.Ev ent(payload, 0)); 200 this._inspectedTargetEvents.push(new WebInspector.TracingModel.E vent(payload, 0));
220 return; 201 return;
221 } 202 }
222 var thread = process.threadById(payload.tid); 203 var thread = process.threadById(payload.tid);
223 if (payload.ph !== WebInspector.TracingModel.Phase.Metadata) { 204 if (payload.ph !== WebInspector.TracingModel.Phase.Metadata) {
224 var timestamp = payload.ts; 205 var timestamp = payload.ts;
225 // We do allow records for unrelated threads to arrive out-of-order, 206 // We do allow records for unrelated threads to arrive out-of-order,
226 // so there's a chance we're getting records from the past. 207 // so there's a chance we're getting records from the past.
227 if (timestamp && (!this._minimumRecordTime || timestamp < this._mini mumRecordTime)) 208 if (timestamp && (!this._minimumRecordTime || timestamp < this._mini mumRecordTime))
228 this._minimumRecordTime = timestamp; 209 this._minimumRecordTime = timestamp;
229 if (!this._maximumRecordTime || timestamp > this._maximumRecordTime) 210 if (!this._maximumRecordTime || timestamp > this._maximumRecordTime)
230 this._maximumRecordTime = timestamp; 211 this._maximumRecordTime = timestamp;
231 if (payload.cat === WebInspector.TracingModel.DevToolsMetadataEventC ategory) 212 if (payload.cat === WebInspector.TracingModel.DevToolsMetadataEventC ategory)
232 this._processDevToolsMetadataEvent(payload); 213 this._processDevToolsMetadataEvent(payload);
233 var event = thread.addEvent(payload); 214 var event = thread.addEvent(payload);
234 if (!event) 215 if (event && payload.pid === this._inspectedTargetProcessId) {
235 return; 216 this._needToSortInspectedTargetEvents = this._needToSortInspecte dTargetEvents || (this._inspectedTargetEvents.length && this._inspectedTargetEve nts.peekLast().startTime > event.startTime);
236 if (thread === this._inspectedTargetMainThread) 217 this._inspectedTargetEvents.push(event);
237 this._inspectedTargetMainThreadEvents.push(event); 218 }
238 if (payload.cat === WebInspector.TracingModel.FrameLifecycleEventCat egory && payload.pid === this._inspectedTargetProcessId && payload.args && paylo ad.args["layerTreeId"] === this._inspectedTargetLayerTreeId)
239 this._frameLifecycleEvents.push(event);
240 return; 219 return;
241 } 220 }
242 switch (payload.name) { 221 switch (payload.name) {
243 case WebInspector.TracingModel.MetadataEvent.ProcessSortIndex: 222 case WebInspector.TracingModel.MetadataEvent.ProcessSortIndex:
244 process._setSortIndex(payload.args["sort_index"]); 223 process._setSortIndex(payload.args["sort_index"]);
245 break; 224 break;
246 case WebInspector.TracingModel.MetadataEvent.ProcessName: 225 case WebInspector.TracingModel.MetadataEvent.ProcessName:
247 process._setName(payload.args["name"]); 226 process._setName(payload.args["name"]);
248 break; 227 break;
249 case WebInspector.TracingModel.MetadataEvent.ThreadSortIndex: 228 case WebInspector.TracingModel.MetadataEvent.ThreadSortIndex:
250 thread._setSortIndex(payload.args["sort_index"]); 229 thread._setSortIndex(payload.args["sort_index"]);
251 break; 230 break;
252 case WebInspector.TracingModel.MetadataEvent.ThreadName: 231 case WebInspector.TracingModel.MetadataEvent.ThreadName:
253 thread._setName(payload.args["name"]); 232 thread._setName(payload.args["name"]);
254 break; 233 break;
255 } 234 }
256 }, 235 },
257 236
258 /** 237 /**
259 * @param {!WebInspector.TracingModel.EventPayload} payload 238 * @param {!WebInspector.TracingModel.EventPayload} payload
260 */ 239 */
261 _processDevToolsMetadataEvent: function(payload) 240 _processDevToolsMetadataEvent: function(payload)
262 { 241 {
263 if (payload.args["sessionId"] !== this._sessionId) 242 if (payload.args["sessionId"] !== this._sessionId || payload.name !== We bInspector.TracingModel.DevToolsMetadataEvent.TracingStartedInPage)
264 return; 243 return;
265 if (payload.name === WebInspector.TracingModel.DevToolsMetadataEvent.Tra cingStartedInPage) { 244 this._inspectedTargetProcessId = payload.pid;
266 var thread = this._processById[payload.pid].threadById(payload.tid)
267 this._inspectedTargetProcessId = payload.pid;
268 this._inspectedTargetMainThread = thread;
269 this._inspectedTargetMainThreadEvents = this._inspectedTargetMainThr eadEvents.concat(thread.events());
270 } else if (payload.name === WebInspector.TracingModel.DevToolsMetadataEv ent.SetLayerTreeId) {
271 this._inspectedTargetLayerTreeId = payload.args["layerTreeId"];
272 }
273 }, 245 },
274 246
275 /** 247 /**
276 * @return {?number} 248 * @return {?number}
277 */ 249 */
278 minimumRecordTime: function() 250 minimumRecordTime: function()
279 { 251 {
280 return this._minimumRecordTime; 252 return this._minimumRecordTime;
281 }, 253 },
282 254
(...skipping 23 matching lines...) Expand all
306 */ 278 */
307 WebInspector.TracingModel.Event = function(payload, level) 279 WebInspector.TracingModel.Event = function(payload, level)
308 { 280 {
309 this.name = payload.name; 281 this.name = payload.name;
310 this.category = payload.cat; 282 this.category = payload.cat;
311 this.startTime = payload.ts; 283 this.startTime = payload.ts;
312 this.args = payload.args; 284 this.args = payload.args;
313 this.phase = payload.ph; 285 this.phase = payload.ph;
314 this.level = level; 286 this.level = level;
315 287
288 this.thread = payload.tid;
yurys 2014/05/27 15:41:32 thread -> tid? or we could store a reference to th
289 if (payload.id)
290 this.id = payload.id;
291
316 /** @type {?string} */ 292 /** @type {?string} */
317 this.warning = null; 293 this.warning = null;
318 /** @type {?WebInspector.TracingModel.Event} */ 294 /** @type {?WebInspector.TracingModel.Event} */
319 this.initiator = null; 295 this.initiator = null;
320 /** @type {?Array.<!ConsoleAgent.CallFrame>} */ 296 /** @type {?Array.<!ConsoleAgent.CallFrame>} */
321 this.stackTrace = null; 297 this.stackTrace = null;
322 /** @type {?Element} */ 298 /** @type {?Element} */
323 this.previewElement = null; 299 this.previewElement = null;
324 /** @type {number} */ 300 /** @type {number} */
325 this.selfTime = 0; 301 this.selfTime = 0;
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 dataCollected: function(data) 548 dataCollected: function(data)
573 { 549 {
574 this._tracingModel._eventsCollected(data); 550 this._tracingModel._eventsCollected(data);
575 }, 551 },
576 552
577 tracingComplete: function() 553 tracingComplete: function()
578 { 554 {
579 this._tracingModel._tracingComplete(); 555 this._tracingModel._tracingComplete();
580 } 556 }
581 } 557 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/timeline/TimelineTraceEventBindings.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698