| Index: src/snapshot-common.cc
|
| diff --git a/src/snapshot-common.cc b/src/snapshot-common.cc
|
| index f06f38a19983665b1f233251a3a0692169601688..80463542665ff7e2ed23947731fed7684da17d7a 100644
|
| --- a/src/snapshot-common.cc
|
| +++ b/src/snapshot-common.cc
|
| @@ -14,34 +14,56 @@
|
| namespace v8 {
|
| namespace internal {
|
|
|
| +bool Snapshot::HaveASnapshotToStartFrom() {
|
| + return SnapshotBlob().data != NULL;
|
| +}
|
|
|
| -bool Snapshot::Initialize(Isolate* isolate) {
|
| - if (size_ > 0) {
|
| - base::ElapsedTimer timer;
|
| - if (FLAG_profile_deserialization) timer.Start();
|
| -
|
| - SnapshotData snapshot_data(data_, size_);
|
| - Deserializer deserializer(&snapshot_data);
|
| - bool success = isolate->Init(&deserializer);
|
| - if (FLAG_profile_deserialization) {
|
| - double ms = timer.Elapsed().InMillisecondsF();
|
| - PrintF("[Snapshot loading and deserialization took %0.3f ms]\n", ms);
|
| - }
|
| - return success;
|
| - }
|
| - return false;
|
| +
|
| +const Vector<const byte> Snapshot::StartupSnapshot() {
|
| + DCHECK(HaveASnapshotToStartFrom());
|
| + const v8::StartupData blob = SnapshotBlob();
|
| + SnapshotByteSource source(blob.data, blob.raw_size);
|
| + const byte* data;
|
| + int length;
|
| + bool success = source.GetBlob(&data, &length);
|
| + CHECK(success);
|
| + return Vector<const byte>(data, length);
|
| }
|
|
|
|
|
| -bool Snapshot::HaveASnapshotToStartFrom() {
|
| - return size_ != 0;
|
| +const Vector<const byte> Snapshot::ContextSnapshot() {
|
| + DCHECK(HaveASnapshotToStartFrom());
|
| + const v8::StartupData blob = SnapshotBlob();
|
| + SnapshotByteSource source(blob.data, blob.raw_size);
|
| + const byte* data;
|
| + int length;
|
| + bool success = source.GetBlob(&data, &length);
|
| + success &= source.GetBlob(&data, &length);
|
| + CHECK(success);
|
| + return Vector<const byte>(data, length);
|
| +}
|
| +
|
| +
|
| +bool Snapshot::Initialize(Isolate* isolate) {
|
| + if (!HaveASnapshotToStartFrom()) return false;
|
| + base::ElapsedTimer timer;
|
| + if (FLAG_profile_deserialization) timer.Start();
|
| +
|
| + SnapshotData snapshot_data(StartupSnapshot());
|
| + Deserializer deserializer(&snapshot_data);
|
| + bool success = isolate->Init(&deserializer);
|
| + if (FLAG_profile_deserialization) {
|
| + double ms = timer.Elapsed().InMillisecondsF();
|
| + PrintF("[Snapshot loading and deserialization took %0.3f ms]\n", ms);
|
| + }
|
| + return success;
|
| }
|
|
|
|
|
| Handle<Context> Snapshot::NewContextFromSnapshot(Isolate* isolate) {
|
| - if (context_size_ == 0) return Handle<Context>();
|
| + if (!HaveASnapshotToStartFrom()) return Handle<Context>();
|
|
|
| - SnapshotData snapshot_data(context_data_, context_size_);
|
| + SnapshotData snapshot_data(ContextSnapshot());
|
| Deserializer deserializer(&snapshot_data);
|
| Object* root;
|
| deserializer.DeserializePartial(isolate, &root);
|
| @@ -49,15 +71,4 @@ Handle<Context> Snapshot::NewContextFromSnapshot(Isolate* isolate) {
|
| return Handle<Context>(Context::cast(root));
|
| }
|
|
|
| -
|
| -#ifdef V8_USE_EXTERNAL_STARTUP_DATA
|
| -// Dummy implementations of Set*FromFile(..) APIs.
|
| -//
|
| -// These are meant for use with snapshot-external.cc. Should this file
|
| -// be compiled with those options we just supply these dummy implementations
|
| -// below. This happens when compiling the mksnapshot utility.
|
| -void SetNativesFromFile(StartupData* data) { CHECK(false); }
|
| -void SetSnapshotFromFile(StartupData* data) { CHECK(false); }
|
| -#endif // V8_USE_EXTERNAL_STARTUP_DATA
|
| -
|
| } } // namespace v8::internal
|
|
|