1 // Copyright 2006-2008 the V8 project 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 // Used for building with external snapshots. 6 7 #include "src/snapshot/snapshot.h" 8 9 #include "src/base/platform/mutex.h" 10 #include "src/snapshot/serialize.h" 11 #include "src/snapshot/snapshot-source-sink.h" 12 #include "src/v8.h" // for V8::Initialize 13 14 15 #ifndef V8_USE_EXTERNAL_STARTUP_DATA 16 #error snapshot-external.cc is used only for the external snapshot build. 17 #endif // V8_USE_EXTERNAL_STARTUP_DATA 18 19 20 namespace v8 { 21 namespace internal { 22 23 static base::LazyMutex external_startup_data_mutex = LAZY_MUTEX_INITIALIZER; 24 static v8::StartupData external_startup_blob = {NULL, 0}; 25 SetSnapshotFromFile(StartupData * snapshot_blob)26void SetSnapshotFromFile(StartupData* snapshot_blob) { 27 base::LockGuard<base::Mutex> lock_guard( 28 external_startup_data_mutex.Pointer()); 29 DCHECK(snapshot_blob); 30 DCHECK(snapshot_blob->data); 31 DCHECK(snapshot_blob->raw_size > 0); 32 DCHECK(!external_startup_blob.data); 33 DCHECK(Snapshot::SnapshotIsValid(snapshot_blob)); 34 external_startup_blob = *snapshot_blob; 35 } 36 37 DefaultSnapshotBlob()38const v8::StartupData* Snapshot::DefaultSnapshotBlob() { 39 base::LockGuard<base::Mutex> lock_guard( 40 external_startup_data_mutex.Pointer()); 41 return &external_startup_blob; 42 } 43 } // namespace internal 44 } // namespace v8 45