// Copyright 2006-2008 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "src/isolate.h" #ifndef V8_SNAPSHOT_H_ #define V8_SNAPSHOT_H_ namespace v8 { namespace internal { class Snapshot : public AllStatic { public: class Metadata { public: explicit Metadata(uint32_t data = 0) : data_(data) {} bool embeds_script() { return EmbedsScriptBits::decode(data_); } void set_embeds_script(bool v) { data_ = EmbedsScriptBits::update(data_, v); } uint32_t& RawValue() { return data_; } private: class EmbedsScriptBits : public BitField {}; uint32_t data_; }; // Initialize the Isolate from the internal snapshot. Returns false if no // snapshot could be found. static bool Initialize(Isolate* isolate); // Create a new context using the internal partial snapshot. static MaybeHandle NewContextFromSnapshot( Isolate* isolate, Handle global_proxy, Handle* outdated_contexts_out); static bool HaveASnapshotToStartFrom(); static bool EmbedsScript(); // To be implemented by the snapshot source. static const v8::StartupData SnapshotBlob(); static v8::StartupData CreateSnapshotBlob( const Vector startup_data, const Vector context_data, Metadata metadata); #ifdef DEBUG static bool SnapshotIsValid(v8::StartupData* snapshot_blob); #endif // DEBUG private: static Vector ExtractStartupData(const v8::StartupData* data); static Vector ExtractContextData(const v8::StartupData* data); static Metadata ExtractMetadata(const v8::StartupData* data); static const int kMetadataOffset = 0; static const int kStartupLengthOffset = kMetadataOffset + kInt32Size; static const int kStartupDataOffset = kStartupLengthOffset + kInt32Size; static int ContextOffset(int startup_length) { return kStartupDataOffset + startup_length; } DISALLOW_IMPLICIT_CONSTRUCTORS(Snapshot); }; #ifdef V8_USE_EXTERNAL_STARTUP_DATA void SetSnapshotFromFile(StartupData* snapshot_blob); #endif } } // namespace v8::internal #endif // V8_SNAPSHOT_H_