docs: function() {
        if (this.allObjectEvents_.length === 0)
          return;
  
        function processEvent(objectEventState) {
          var event = objectEventState.event;
          var thread = objectEventState.thread;
          if (event.name === undefined) {
            this.model_.importWarning({
              type: 'object_parse_error',
              message: 'While processing ' + JSON.stringify(event) + ': ' +
                  'Object events require an name parameter.'
            });
          }
  
          if (event.id === undefined) {
            this.model_.importWarning({
              type: 'object_parse_error',
              message: 'While processing ' + JSON.stringify(event) + ': ' +
                  'Object events require an id parameter.'
            });
          }
          var process = thread.parent;
          var ts = timestampFromUs(event.ts);
          var instance;
          if (event.ph === 'N') {
            try {
              instance = process.objects.idWasCreated(
                  event.id, event.cat, event.name, ts);
            } catch (e) {
              this.model_.importWarning({
                type: 'object_parse_error',
                message: 'While processing create of ' +
                    event.id + ' at ts=' + ts + ': ' + e
              });
              return;
            }
          } else if (event.ph === 'O') {
            if (event.args.snapshot === undefined) {
              this.model_.importWarning({
                type: 'object_parse_error',
                message: 'While processing ' + event.id + ' at ts=' + ts + ': ' +
                    'Snapshots must have args: {snapshot: ...}'
              });
              return;
            }
            var snapshot;
            try {
              var args = this.deepCopyIfNeeded_(event.args.snapshot);
              var cat;
              if (args.cat) {
                cat = args.cat;
                delete args.cat;
              } else {
                cat = event.cat;
              }
  
              var baseTypename;
              if (args.base_type) {
                baseTypename = args.base_type;
                delete args.base_type;
              } else {
                baseTypename = undefined;
              }
              snapshot = process.objects.addSnapshot(
                  event.id, cat, event.name, ts,
                  args, baseTypename);
              snapshot.snapshottedOnThread = thread;
            } catch (e) {
              this.model_.importWarning({
                type: 'object_parse_error',
                message: 'While processing snapshot of ' +
                    event.id + ' at ts=' + ts + ': ' + e
              });
              return;
            }
            instance = snapshot.objectInstance;
          } else if (event.ph === 'D') {
            try {
              process.objects.idWasDeleted(event.id, event.cat, event.name, ts);
              var instanceMap = process.objects.getOrCreateInstanceMap_(event.id);
              instance = instanceMap.lastInstance;
            } catch (e) {
              this.model_.importWarning({
                type: 'object_parse_error',
                message: 'While processing delete of ' +
                    event.id + ' at ts=' + ts + ': ' + e
              });
              return;
            }
          }
  
          if (instance)
            instance.colorId = getEventColor(event, instance.typeName);
        }
  
        this.allObjectEvents_.sort(function(x, y) {
          var d = x.event.ts - y.event.ts;
          if (d != 0)
            return d;
          return x.sequenceNumber - y.sequenceNumber;
        });
  
        var allObjectEvents = this.allObjectEvents_;
        for (var i = 0; i < allObjectEvents.length; i++) {
          var objectEventState = allObjectEvents[i];
          try {
            processEvent.call(this, objectEventState);
          } catch (e) {
            this.model_.importWarning({
              type: 'object_parse_error',
              message: e.message
            });
          }
        }
      }