| Index: tools/tickprocessor.js
 | 
| ===================================================================
 | 
| --- tools/tickprocessor.js	(revision 12764)
 | 
| +++ tools/tickprocessor.js	(working copy)
 | 
| @@ -185,6 +185,7 @@
 | 
|        'begin-code-region': null,
 | 
|        'end-code-region': null });
 | 
|  
 | 
| +  this.timeline_ = "";
 | 
|    this.cppEntriesProvider_ = cppEntriesProvider;
 | 
|    this.callGraphSize_ = callGraphSize;
 | 
|    this.ignoreUnknown_ = ignoreUnknown;
 | 
| @@ -347,6 +348,16 @@
 | 
|    return this.stateFilter_ == null || this.stateFilter_ == vmState;
 | 
|  };
 | 
|  
 | 
| +TickProcessor.prototype.recordTickTimeline = function(vmState) {
 | 
| +  if (vmState == TickProcessor.VmStates.JS) this.timeline_ += "J";
 | 
| +  else if (vmState == TickProcessor.VmStates.GC) this.timeline_ += "G";
 | 
| +  else if (vmState == TickProcessor.VmStates.COMPILER) this.timeline_ += "C";
 | 
| +  else if (vmState == TickProcessor.VmStates.PARALLEL_COMPILER_PROLOGUE) this.timeline_ += "|";
 | 
| +  else if (vmState == TickProcessor.VmStates.OTHER) this.timeline_ += "O";
 | 
| +  else if (vmState == TickProcessor.VmStates.EXTERNAL) this.timeline_ += ".";
 | 
| +  else this.timeline_ += "U";
 | 
| +}
 | 
| +
 | 
|  TickProcessor.prototype.processTick = function(pc,
 | 
|                                                 sp,
 | 
|                                                 is_external_callback,
 | 
| @@ -354,6 +365,7 @@
 | 
|                                                 vmState,
 | 
|                                                 stack) {
 | 
|    this.ticks_.total++;
 | 
| +  this.recordTickTimeline(vmState);
 | 
|    if (vmState == TickProcessor.VmStates.GC) this.ticks_.gc++;
 | 
|    if (!this.includeTick(vmState)) {
 | 
|      this.ticks_.excluded++;
 | 
| @@ -465,6 +477,14 @@
 | 
|        return rec2.totalTime - rec1.totalTime ||
 | 
|            (rec2.internalFuncName < rec1.internalFuncName ? -1 : 1); });
 | 
|    this.printHeavyProfile(heavyView.head.children);
 | 
| +
 | 
| +  print('Visual Execution Timeline: ');
 | 
| +  var sliceLength = 80;
 | 
| +  var sliceStart = 0;
 | 
| +  while (sliceStart < this.timeline_.length) {
 | 
| +    print(this.timeline_.slice(sliceStart, sliceStart + sliceLength));
 | 
| +    sliceStart += sliceLength;
 | 
| +  }
 | 
|  };
 | 
|  
 | 
|  
 | 
| 
 |