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

Side by Side Diff: tools/plot-timer-events.js

Issue 11543019: Find plot range with only sampling ticks (profiling with only --prof). (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years 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 | « no previous file | 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 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 'reg.exp. ': new CodeKind("#0000FF", [-2]), 87 'reg.exp. ': new CodeKind("#0000FF", [-2]),
88 'runtime ': new CodeKind("#000000", [-1]), 88 'runtime ': new CodeKind("#000000", [-1]),
89 'full code': new CodeKind("#DD0000", [0]), 89 'full code': new CodeKind("#DD0000", [0]),
90 'opt code ': new CodeKind("#00EE00", [1]), 90 'opt code ': new CodeKind("#00EE00", [1]),
91 'code stub': new CodeKind("#FF00FF", [2]), 91 'code stub': new CodeKind("#FF00FF", [2]),
92 'built-in ': new CodeKind("#AA00AA", [3]), 92 'built-in ': new CodeKind("#AA00AA", [3]),
93 'inl.cache': new CodeKind("#4444AA", [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]), 93 'inl.cache': new CodeKind("#4444AA", [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]),
94 } 94 }
95 95
96 96
97 var xrange_start = Infinity; 97 var xrange_start;
98 var xrange_end = 0; 98 var xrange_end;
99 var obj_index = 0; 99 var obj_index = 0;
100 var execution_pauses = []; 100 var execution_pauses = [];
101 var code_map = new CodeMap(); 101 var code_map = new CodeMap();
102 102
103 var xrange_start_override = undefined; 103 var xrange_start_override = undefined;
104 var xrange_end_override = undefined; 104 var xrange_end_override = undefined;
105 var distortion_per_entry = 0.005; // Milliseconds 105 var distortion_per_entry = 0.005; // Milliseconds
106 106
107 var sort_by_start = []; 107 var sort_by_start = [];
108 var sort_by_end = []; 108 var sort_by_end = [];
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 // Make sure that start <= end applies for every range. 261 // Make sure that start <= end applies for every range.
262 for (name in TimerEvents) { 262 for (name in TimerEvents) {
263 var ranges = TimerEvents[name].ranges; 263 var ranges = TimerEvents[name].ranges;
264 for (var j = 0; j < ranges.length; j++) { 264 for (var j = 0; j < ranges.length; j++) {
265 if (ranges[j].end < ranges[j].start) ranges[j].end = ranges[j].start; 265 if (ranges[j].end < ranges[j].start) ranges[j].end = ranges[j].start;
266 } 266 }
267 } 267 }
268 } 268 }
269 269
270 270
271 function FindPlotRange() {
272 var start_found = (xrange_start_override || xrange_start_override == 0);
273 var end_found = (xrange_end_override || xrange_end_override == 0);
274 xrange_start = start_found ? xrange_start_override : Infinity;
275 xrange_end = end_found ? xrange_end_override : -Infinity;
276
277 if (start_found && end_found) return;
278
279 var execution_ranges = kExecutionEvent.ranges;
280 for (var i = 0; i < execution_ranges.length; i++) {
281 if (execution_ranges[i].start < xrange_start && !start_found) {
282 xrange_start = execution_ranges[i].start;
283 }
284 if (execution_ranges[i].end > xrange_end && !end_found) {
285 xrange_end = execution_ranges[i].end;
286 }
287 }
288
289 for (codekind in CodeKinds) {
290 var ticks = CodeKinds[codekind].in_execution;
291 for (var i = 0; i < ticks.length; i++) {
292 if (ticks[i].tick < xrange_start && !start_found) {
293 xrange_start = ticks[i].tick;
294 }
295 if (ticks[i].tick > xrange_end && !end_found) {
296 xrange_end = ticks[i].tick;
297 }
298 }
299 }
300 }
301
302
271 function CollectData() { 303 function CollectData() {
272 // Collect data from log. 304 // Collect data from log.
273 var logreader = new LogReader( 305 var logreader = new LogReader(
274 { 'timer-event' : { parsers: [null, parseInt, parseInt], 306 { 'timer-event' : { parsers: [null, parseInt, parseInt],
275 processor: ProcessTimerEvent }, 307 processor: ProcessTimerEvent },
276 'shared-library': { parsers: [null, parseInt, parseInt], 308 'shared-library': { parsers: [null, parseInt, parseInt],
277 processor: ProcessSharedLibrary }, 309 processor: ProcessSharedLibrary },
278 'code-creation': { parsers: [null, parseInt, parseInt, parseInt, null], 310 'code-creation': { parsers: [null, parseInt, parseInt, parseInt, null],
279 processor: ProcessCodeCreateEvent }, 311 processor: ProcessCodeCreateEvent },
280 'code-move': { parsers: [parseInt, parseInt], 312 'code-move': { parsers: [parseInt, parseInt],
281 processor: ProcessCodeMoveEvent }, 313 processor: ProcessCodeMoveEvent },
282 'code-delete': { parsers: [parseInt], 314 'code-delete': { parsers: [parseInt],
283 processor: ProcessCodeDeleteEvent }, 315 processor: ProcessCodeDeleteEvent },
284 'tick': { parsers: [parseInt, parseInt, parseInt, 316 'tick': { parsers: [parseInt, parseInt, parseInt,
285 null, null, parseInt, 'var-args'], 317 null, null, parseInt, 'var-args'],
286 processor: ProcessTickEvent }, 318 processor: ProcessTickEvent },
287 'distortion': { parsers: [parseInt], 319 'distortion': { parsers: [parseInt],
288 processor: ProcessDistortion }, 320 processor: ProcessDistortion },
289 'plot-range': { parsers: [parseInt, parseInt], 321 'plot-range': { parsers: [parseInt, parseInt],
290 processor: ProcessPlotRange }, 322 processor: ProcessPlotRange },
291 }); 323 });
292 324
293 var line; 325 var line;
294 while (line = readline()) { 326 while (line = readline()) {
295 logreader.processLogLine(line); 327 logreader.processLogLine(line);
296 } 328 }
297 329
298 Undistort(); 330 Undistort();
299 331
300 // Figure out plot range.
301 var execution_ranges = kExecutionEvent.ranges;
302 for (var i = 0; i < execution_ranges.length; i++) {
303 if (execution_ranges[i].start < xrange_start) {
304 xrange_start = execution_ranges[i].start;
305 }
306 if (execution_ranges[i].end > xrange_end) {
307 xrange_end = execution_ranges[i].end;
308 }
309 }
310
311 // Collect execution pauses. 332 // Collect execution pauses.
312 for (name in TimerEvents) { 333 for (name in TimerEvents) {
313 var event = TimerEvents[name]; 334 var event = TimerEvents[name];
314 if (!event.pause) continue; 335 if (!event.pause) continue;
315 var ranges = event.ranges; 336 var ranges = event.ranges;
316 for (var j = 0; j < ranges.length; j++) execution_pauses.push(ranges[j]); 337 for (var j = 0; j < ranges.length; j++) execution_pauses.push(ranges[j]);
317 } 338 }
318 execution_pauses = MergeRanges(execution_pauses); 339 execution_pauses = MergeRanges(execution_pauses);
319 340
320 // Knock out time not spent in javascript execution. Note that this also 341 // Knock out time not spent in javascript execution. Note that this also
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 } else { 480 } else {
460 throw new Error("this should not happen!"); 481 throw new Error("this should not happen!");
461 } 482 }
462 } 483 }
463 484
464 return result; 485 return result;
465 } 486 }
466 487
467 488
468 function GnuplotOutput() { 489 function GnuplotOutput() {
469 xrange_start = (xrange_start_override || xrange_start_override == 0) 490 FindPlotRange();
470 ? xrange_start_override : xrange_start; 491
471 xrange_end = (xrange_end_override || xrange_end_override == 0)
472 ? xrange_end_override : xrange_end;
473 print("set terminal pngcairo size " + kResX + "," + kResY + 492 print("set terminal pngcairo size " + kResX + "," + kResY +
474 " enhanced font 'Helvetica,10'"); 493 " enhanced font 'Helvetica,10'");
475 print("set yrange [0:" + (num_timer_event + 1) + "]"); 494 print("set yrange [0:" + (num_timer_event + 1) + "]");
476 print("set xlabel \"execution time in ms\""); 495 print("set xlabel \"execution time in ms\"");
477 print("set xrange [" + xrange_start + ":" + xrange_end + "]"); 496 print("set xrange [" + xrange_start + ":" + xrange_end + "]");
478 print("set style fill pattern 2 bo 1"); 497 print("set style fill pattern 2 bo 1");
479 print("set style rect fs solid 1 noborder"); 498 print("set style rect fs solid 1 noborder");
480 print("set style line 1 lt 1 lw 1 lc rgb \"#000000\""); 499 print("set style line 1 lt 1 lw 1 lc rgb \"#000000\"");
481 print("set xtics out nomirror"); 500 print("set xtics out nomirror");
482 print("unset key"); 501 print("unset key");
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 for (var i = 0; i < execution_pauses.length; i++) { 586 for (var i = 0; i < execution_pauses.length; i++) {
568 var pause = execution_pauses[i]; 587 var pause = execution_pauses[i];
569 print(pause.end + " " + pause.duration()); 588 print(pause.end + " " + pause.duration());
570 } 589 }
571 print("e"); 590 print("e");
572 } 591 }
573 592
574 593
575 CollectData(); 594 CollectData();
576 GnuplotOutput(); 595 GnuplotOutput();
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698