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