Home | History | Annotate | Download | only in trace_model
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 'use strict';
      6 
      7 base.exportTo('tracing.trace_model', function() {
      8   /**
      9    * A snapshot of an object instance, at a given moment in time.
     10    *
     11    * Initialization of snapshots and instances is three phased:
     12    *
     13    * 1. Instances and snapshots are constructed. This happens during event
     14    *    importing. Little should be done here, because the object's data
     15    *    are still being used by the importer to reconstruct object references.
     16    *
     17    * 2. Instances and snapshtos are preinitialized. This happens after implicit
     18    *    objects have been found, but before any references have been found and
     19    *    switched to direct references. Thus, every snapshot stands on its own.
     20    *    This is a good time to do global field renaming and type conversion,
     21    *    e.g. recognizing domain-specific types and converting from C++ naming
     22    *    convention to JS.
     23    *
     24    * 3. Instances and snapshtos are initialized. At this point, {id_ref:
     25    *    '0x1000'} fields have been converted to snapshot references. This is a
     26    *    good time to generic initialization steps and argument verification.
     27    *
     28    * @constructor
     29    */
     30   function ObjectSnapshot(objectInstance, ts, args) {
     31     this.objectInstance = objectInstance;
     32     this.ts = ts;
     33     this.args = args;
     34     this.selected = false;
     35   }
     36 
     37   ObjectSnapshot.prototype = {
     38     __proto__: Object.prototype,
     39 
     40     /**
     41      * See ObjectSnapshot constructor notes on object initialization.
     42      */
     43     preInitialize: function() {
     44     },
     45 
     46     /**
     47      * See ObjectSnapshot constructor notes on object initialization.
     48      */
     49     initialize: function() {
     50     }
     51   };
     52 
     53   ObjectSnapshot.nameToConstructorMap_ = {};
     54   ObjectSnapshot.register = function(name, constructor) {
     55     if (ObjectSnapshot.nameToConstructorMap_[name])
     56       throw new Error('Constructor already registerd for ' + name);
     57     ObjectSnapshot.nameToConstructorMap_[name] = constructor;
     58   };
     59 
     60   ObjectSnapshot.unregister = function(name) {
     61     delete ObjectSnapshot.nameToConstructorMap_[name];
     62   };
     63 
     64   ObjectSnapshot.getConstructor = function(name) {
     65     if (ObjectSnapshot.nameToConstructorMap_[name])
     66       return ObjectSnapshot.nameToConstructorMap_[name];
     67     return ObjectSnapshot;
     68   };
     69 
     70   return {
     71     ObjectSnapshot: ObjectSnapshot
     72   };
     73 });
     74