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

Side by Side Diff: chrome/browser/resources/gpu_internals/timeline_model.js

Issue 7495036: about:gpu support for thread name metadata. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Prune empty threads. Increase heading width. Created 9 years, 5 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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 /** 6 /**
7 * @fileoverview TimelineModel is a parsed representation of the 7 * @fileoverview TimelineModel is a parsed representation of the
8 * TraceEvents obtained from base/trace_event in which the begin-end 8 * TraceEvents obtained from base/trace_event in which the begin-end
9 * tokens are converted into a hierarchy of processes, threads, 9 * tokens are converted into a hierarchy of processes, threads,
10 * subrows, and slices. 10 * subrows, and slices.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 * @constructor 58 * @constructor
59 */ 59 */
60 function TimelineThread(parent, tid) { 60 function TimelineThread(parent, tid) {
61 this.parent = parent; 61 this.parent = parent;
62 this.tid = tid; 62 this.tid = tid;
63 this.subRows = [[]]; 63 this.subRows = [[]];
64 this.nonNestedSubRows = []; 64 this.nonNestedSubRows = [];
65 } 65 }
66 66
67 TimelineThread.prototype = { 67 TimelineThread.prototype = {
68 name: undefined,
69
68 getSubrow: function(i) { 70 getSubrow: function(i) {
69 while (i >= this.subRows.length) 71 while (i >= this.subRows.length)
70 this.subRows.push([]); 72 this.subRows.push([]);
71 return this.subRows[i]; 73 return this.subRows[i];
72 }, 74 },
73 75
74 addNonNestedSlice: function(slice) { 76 addNonNestedSlice: function(slice) {
75 for (var i = 0; i < this.nonNestedSubRows.length; i++) { 77 for (var i = 0; i < this.nonNestedSubRows.length; i++) {
76 var currSubRow = this.nonNestedSubRows[i]; 78 var currSubRow = this.nonNestedSubRows[i];
77 var lastSlice = currSubRow[currSubRow.length - 1]; 79 var lastSlice = currSubRow[currSubRow.length - 1];
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 224
223 // Add the slice to the subSlices array of its parent. 225 // Add the slice to the subSlices array of its parent.
224 if (state.openSlices.length) { 226 if (state.openSlices.length) {
225 var parentSlice = state.openSlices[state.openSlices.length - 1]; 227 var parentSlice = state.openSlices[state.openSlices.length - 1];
226 parentSlice.slice.subSlices.push(slice); 228 parentSlice.slice.subSlices.push(slice);
227 } 229 }
228 } 230 }
229 } else if (event.ph == 'I') { 231 } else if (event.ph == 'I') {
230 // TODO(nduca): Implement parsing of immediate events. 232 // TODO(nduca): Implement parsing of immediate events.
231 console.log('Parsing of I-type events not implemented.'); 233 console.log('Parsing of I-type events not implemented.');
234 } else if (event.ph == 'M') {
235 if (event.name == 'thread_name') {
236 var thread = this.getProcess(event.pid).getThread(event.tid);
237 thread.name = event.args.name;
238 } else {
239 console.log('Unrecognized metadata name: ' + event.name);
240 }
232 } else { 241 } else {
233 throw new Error('Unrecognized event phase: ' + event.ph + 242 console.log('Unrecognized event phase: ' + event.ph +
234 '(' + event.name + ')'); 243 '(' + event.name + ')');
235 } 244 }
236 } 245 }
237 246 this.pruneEmptyThreads();
238 this.updateBounds(); 247 this.updateBounds();
239 248
240 // Add end events for any events that are still on the stack. These 249 // Add end events for any events that are still on the stack. These
241 // are events that were still open when trace was ended, and can often 250 // are events that were still open when trace was ended, and can often
242 // indicate deadlock behavior. 251 // indicate deadlock behavior.
243 for (var ptid in threadStateByPTID) { 252 for (var ptid in threadStateByPTID) {
244 var state = threadStateByPTID[ptid]; 253 var state = threadStateByPTID[ptid];
245 while (state.openSlices.length > 0) { 254 while (state.openSlices.length > 0) {
246 var slice = state.openSlices.pop(); 255 var slice = state.openSlices.pop();
247 slice.slice.duration = this.maxTimestamp - slice.slice.start; 256 slice.slice.duration = this.maxTimestamp - slice.slice.start;
(...skipping 13 matching lines...) Expand all
261 } 270 }
262 } 271 }
263 272
264 this.shiftWorldToMicroseconds(); 273 this.shiftWorldToMicroseconds();
265 274
266 var boost = (this.maxTimestamp - this.minTimestamp) * 0.15; 275 var boost = (this.maxTimestamp - this.minTimestamp) * 0.15;
267 this.minTimestamp = this.minTimestamp - boost; 276 this.minTimestamp = this.minTimestamp - boost;
268 this.maxTimestamp = this.maxTimestamp + boost; 277 this.maxTimestamp = this.maxTimestamp + boost;
269 }, 278 },
270 279
280 pruneEmptyThreads: function() {
281 for (var pid in this.processes) {
282 var process = this.processes[pid];
283 var prunedThreads = [];
284 for (var tid in process.threads) {
285 var thread = process.threads[tid];
286 if (thread.subRows[0].length)
287 prunedThreads.push(thread);
288 }
289 process.threads = prunedThreads;
290 }
291 },
292
271 updateBounds: function() { 293 updateBounds: function() {
272 var wmin = Infinity; 294 var wmin = Infinity;
273 var wmax = -wmin; 295 var wmax = -wmin;
274 var threads = this.getAllThreads(); 296 var threads = this.getAllThreads();
275 for (var tI = 0; tI < threads.length; tI++) { 297 for (var tI = 0; tI < threads.length; tI++) {
276 var thread = threads[tI]; 298 var thread = threads[tI];
277 thread.updateBounds(); 299 thread.updateBounds();
278 if (thread.minTimestamp && thread.maxTimestamp) { 300 if (thread.minTimestamp != undefined &&
301 thread.maxTimestamp != undefined) {
279 wmin = Math.min(wmin, thread.minTimestamp); 302 wmin = Math.min(wmin, thread.minTimestamp);
280 wmax = Math.max(wmax, thread.maxTimestamp); 303 wmax = Math.max(wmax, thread.maxTimestamp);
281 } 304 }
282 } 305 }
283 this.minTimestamp = wmin; 306 this.minTimestamp = wmin;
284 this.maxTimestamp = wmax; 307 this.maxTimestamp = wmax;
285 }, 308 },
286 309
287 shiftWorldToMicroseconds: function() { 310 shiftWorldToMicroseconds: function() {
288 var timeBase = this.minTimestamp; 311 var timeBase = this.minTimestamp;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 343
321 }; 344 };
322 345
323 return { 346 return {
324 TimelineSlice: TimelineSlice, 347 TimelineSlice: TimelineSlice,
325 TimelineThread: TimelineThread, 348 TimelineThread: TimelineThread,
326 TimelineProcess: TimelineProcess, 349 TimelineProcess: TimelineProcess,
327 TimelineModel: TimelineModel 350 TimelineModel: TimelineModel
328 }; 351 };
329 }); 352 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698