166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2013 The Chromium Authors. All rights reserved. 266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Use of this source code is governed by a BSD-style license that can be 366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// found in the LICENSE file. 466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict'; 666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.exportTo('tracing.trace_model', function() { 866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis /** 966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * A snapshot of an object instance, at a given moment in time. 1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * 1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * Initialization of snapshots and instances is three phased: 1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * 1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * 1. Instances and snapshots are constructed. This happens during event 1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * importing. Little should be done here, because the object's data 1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * are still being used by the importer to reconstruct object references. 1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * 1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * 2. Instances and snapshtos are preinitialized. This happens after implicit 1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * objects have been found, but before any references have been found and 1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * switched to direct references. Thus, every snapshot stands on its own. 2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * This is a good time to do global field renaming and type conversion, 2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * e.g. recognizing domain-specific types and converting from C++ naming 2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * convention to JS. 2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * 2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * 3. Instances and snapshtos are initialized. At this point, {id_ref: 2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * '0x1000'} fields have been converted to snapshot references. This is a 2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * good time to generic initialization steps and argument verification. 2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * 2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * @constructor 2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis */ 3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis function ObjectSnapshot(objectInstance, ts, args) { 3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.objectInstance = objectInstance; 3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.ts = ts; 3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.args = args; 3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this.selected = false; 3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ObjectSnapshot.prototype = { 3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis __proto__: Object.prototype, 3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis /** 4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * See ObjectSnapshot constructor notes on object initialization. 4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis */ 4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis preInitialize: function() { 4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }, 4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis /** 4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * See ObjectSnapshot constructor notes on object initialization. 4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis */ 4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis initialize: function() { 5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis } 5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ObjectSnapshot.nameToConstructorMap_ = {}; 5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ObjectSnapshot.register = function(name, constructor) { 5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (ObjectSnapshot.nameToConstructorMap_[name]) 5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis throw new Error('Constructor already registerd for ' + name); 5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ObjectSnapshot.nameToConstructorMap_[name] = constructor; 5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ObjectSnapshot.unregister = function(name) { 6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis delete ObjectSnapshot.nameToConstructorMap_[name]; 6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ObjectSnapshot.getConstructor = function(name) { 6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis if (ObjectSnapshot.nameToConstructorMap_[name]) 6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return ObjectSnapshot.nameToConstructorMap_[name]; 6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return ObjectSnapshot; 6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis return { 7166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ObjectSnapshot: ObjectSnapshot 7266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }; 7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis}); 74