// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
base.exportTo('tracing.trace_model', function() {
/**
* A snapshot of an object instance, at a given moment in time.
*
* Initialization of snapshots and instances is three phased:
*
* 1. Instances and snapshots are constructed. This happens during event
* importing. Little should be done here, because the object's data
* are still being used by the importer to reconstruct object references.
*
* 2. Instances and snapshtos are preinitialized. This happens after implicit
* objects have been found, but before any references have been found and
* switched to direct references. Thus, every snapshot stands on its own.
* This is a good time to do global field renaming and type conversion,
* e.g. recognizing domain-specific types and converting from C++ naming
* convention to JS.
*
* 3. Instances and snapshtos are initialized. At this point, {id_ref:
* '0x1000'} fields have been converted to snapshot references. This is a
* good time to generic initialization steps and argument verification.
*
* @constructor
*/
function ObjectSnapshot(objectInstance, ts, args) {
this.objectInstance = objectInstance;
this.ts = ts;
this.args = args;
this.selected = false;
}
ObjectSnapshot.prototype = {
__proto__: Object.prototype,
/**
* See ObjectSnapshot constructor notes on object initialization.
*/
preInitialize: function() {
},
/**
* See ObjectSnapshot constructor notes on object initialization.
*/
initialize: function() {
}
};
ObjectSnapshot.nameToConstructorMap_ = {};
ObjectSnapshot.register = function(name, constructor) {
if (ObjectSnapshot.nameToConstructorMap_[name])
throw new Error('Constructor already registerd for ' + name);
ObjectSnapshot.nameToConstructorMap_[name] = constructor;
};
ObjectSnapshot.unregister = function(name) {
delete ObjectSnapshot.nameToConstructorMap_[name];
};
ObjectSnapshot.getConstructor = function(name) {
if (ObjectSnapshot.nameToConstructorMap_[name])
return ObjectSnapshot.nameToConstructorMap_[name];
return ObjectSnapshot;
};
return {
ObjectSnapshot: ObjectSnapshot
};
});