docs: function() {
        var logreader = new tr.e.importer.v8.LogReader(
            { 'timer-event' : {
              parsers: [null, parseInt, parseInt],
              processor: this.processTimerEvent_.bind(this)
            },
            'shared-library': {
              parsers: [null, parseInt, parseInt],
              processor: this.processSharedLibrary_.bind(this)
            },
            'timer-event-start' : {
              parsers: [null, parseInt],
              processor: this.processTimerEventStart_.bind(this)
            },
            'timer-event-end' : {
              parsers: [null, parseInt],
              processor: this.processTimerEventEnd_.bind(this)
            },
            'code-creation': {
              parsers: [null, parseInt, parseInt, parseInt, null],
              processor: this.processCodeCreateEvent_.bind(this)
            },
            'code-move': {
              parsers: [parseInt, parseInt],
              processor: this.processCodeMoveEvent_.bind(this)
            },
            'code-delete': {
              parsers: [parseInt],
              processor: this.processCodeDeleteEvent_.bind(this)
            },
            'tick': {
              parsers: [parseInt, parseInt, null, null, parseInt, 'var-args'],
              processor: this.processTickEvent_.bind(this)
            },
            'distortion': {
              parsers: [parseInt],
              processor: this.processDistortion_.bind(this)
            },
            'plot-range': {
              parsers: [parseInt, parseInt],
              processor: this.processPlotRange_.bind(this)
            },
            'v8-version': {
              parsers: [parseInt, parseInt, parseInt, parseInt, parseInt],
              processor: this.processV8Version_.bind(this)
            }
            });
  
        this.v8_timer_thread_ =
            this.model_.getOrCreateProcess(-32).getOrCreateThread(1);
        this.v8_timer_thread_.name = 'V8 Timers';
        this.v8_thread_ =
            this.model_.getOrCreateProcess(-32).getOrCreateThread(2);
        this.v8_thread_.name = 'V8';
  
        var lines = this.logData_.split('\n');
        for (var i = 0; i < lines.length; i++) {
          logreader.processLogLine(lines[i]);
        }
  
        // The processing of samples adds all the root stack frame to
        // this.root_stack_frame_. But, we don't want that stack frame in the real
        // model. So get rid of it.
        this.root_stack_frame_.removeAllChildren();
  
        function addSlices(slices, thread) {
          for (var i = 0; i < slices.length; i++) {
            var duration = slices[i].end - slices[i].start;
            var slice = new tr.model.Slice('v8', slices[i].name,
                ColorScheme.getColorIdForGeneralPurposeString(slices[i].name),
                slices[i].start, {}, duration);
            thread.sliceGroup.pushSlice(slice);
            addSlices(slices[i].children, thread);
          }
        }
        addSlices(this.v8_stack_timeline_, this.v8_thread_);
      }