| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_SNAPSHOT_SNAPSHOT_H_ | 5 #ifndef V8_SNAPSHOT_SNAPSHOT_H_ |
| 6 #define V8_SNAPSHOT_SNAPSHOT_H_ | 6 #define V8_SNAPSHOT_SNAPSHOT_H_ |
| 7 | 7 |
| 8 #include "src/snapshot/partial-serializer.h" | 8 #include "src/snapshot/partial-serializer.h" |
| 9 #include "src/snapshot/startup-serializer.h" | 9 #include "src/snapshot/startup-serializer.h" |
| 10 | 10 |
| 11 namespace v8 { | 11 namespace v8 { |
| 12 namespace internal { | 12 namespace internal { |
| 13 | 13 |
| 14 // Forward declarations. | 14 // Forward declarations. |
| 15 class Isolate; | 15 class Isolate; |
| 16 class PartialSerializer; | 16 class PartialSerializer; |
| 17 class StartupSerializer; | 17 class StartupSerializer; |
| 18 | 18 |
| 19 class Snapshot : public AllStatic { | 19 class Snapshot : public AllStatic { |
| 20 public: | 20 public: |
| 21 class Metadata { | |
| 22 public: | |
| 23 explicit Metadata(uint32_t data = 0) : data_(data) {} | |
| 24 bool embeds_script() { return EmbedsScriptBits::decode(data_); } | |
| 25 void set_embeds_script(bool v) { | |
| 26 data_ = EmbedsScriptBits::update(data_, v); | |
| 27 } | |
| 28 | |
| 29 uint32_t& RawValue() { return data_; } | |
| 30 | |
| 31 private: | |
| 32 class EmbedsScriptBits : public BitField<bool, 0, 1> {}; | |
| 33 uint32_t data_; | |
| 34 }; | |
| 35 | |
| 36 // Initialize the Isolate from the internal snapshot. Returns false if no | 21 // Initialize the Isolate from the internal snapshot. Returns false if no |
| 37 // snapshot could be found. | 22 // snapshot could be found. |
| 38 static bool Initialize(Isolate* isolate); | 23 static bool Initialize(Isolate* isolate); |
| 39 // Create a new context using the internal partial snapshot. | 24 // Create a new context using the internal partial snapshot. |
| 40 static MaybeHandle<Context> NewContextFromSnapshot( | 25 static MaybeHandle<Context> NewContextFromSnapshot( |
| 41 Isolate* isolate, Handle<JSGlobalProxy> global_proxy); | 26 Isolate* isolate, Handle<JSGlobalProxy> global_proxy); |
| 42 | 27 |
| 43 static bool HaveASnapshotToStartFrom(Isolate* isolate); | 28 static bool HaveASnapshotToStartFrom(Isolate* isolate); |
| 44 | 29 |
| 45 static bool EmbedsScript(Isolate* isolate); | 30 static bool EmbedsScript(Isolate* isolate); |
| 46 | 31 |
| 47 static uint32_t SizeOfFirstPage(Isolate* isolate, AllocationSpace space); | 32 static uint32_t SizeOfFirstPage(Isolate* isolate, AllocationSpace space); |
| 48 | 33 |
| 49 | 34 |
| 50 // To be implemented by the snapshot source. | 35 // To be implemented by the snapshot source. |
| 51 static const v8::StartupData* DefaultSnapshotBlob(); | 36 static const v8::StartupData* DefaultSnapshotBlob(); |
| 52 | 37 |
| 53 static v8::StartupData CreateSnapshotBlob( | 38 static v8::StartupData CreateSnapshotBlob( |
| 54 const StartupSerializer& startup_ser, | 39 const StartupSerializer& startup_ser, |
| 55 const PartialSerializer& context_ser, Snapshot::Metadata metadata); | 40 const PartialSerializer& context_ser); |
| 56 | 41 |
| 57 #ifdef DEBUG | 42 #ifdef DEBUG |
| 58 static bool SnapshotIsValid(v8::StartupData* snapshot_blob); | 43 static bool SnapshotIsValid(v8::StartupData* snapshot_blob); |
| 59 #endif // DEBUG | 44 #endif // DEBUG |
| 60 | 45 |
| 61 private: | 46 private: |
| 62 static Vector<const byte> ExtractStartupData(const v8::StartupData* data); | 47 static Vector<const byte> ExtractStartupData(const v8::StartupData* data); |
| 63 static Vector<const byte> ExtractContextData(const v8::StartupData* data); | 48 static Vector<const byte> ExtractContextData(const v8::StartupData* data); |
| 64 static Metadata ExtractMetadata(const v8::StartupData* data); | |
| 65 | 49 |
| 66 // Snapshot blob layout: | 50 // Snapshot blob layout: |
| 67 // [0] metadata | 51 // [0 - 5] pre-calculated first page sizes for paged spaces |
| 68 // [1 - 6] pre-calculated first page sizes for paged spaces | 52 // [6] serialized start up data length |
| 69 // [7] serialized start up data length | |
| 70 // ... serialized start up data | 53 // ... serialized start up data |
| 71 // ... serialized context data | 54 // ... serialized context data |
| 72 | 55 |
| 73 static const int kNumPagedSpaces = LAST_PAGED_SPACE - FIRST_PAGED_SPACE + 1; | 56 static const int kNumPagedSpaces = LAST_PAGED_SPACE - FIRST_PAGED_SPACE + 1; |
| 74 | 57 |
| 75 static const int kMetadataOffset = 0; | 58 static const int kFirstPageSizesOffset = 0; |
| 76 static const int kFirstPageSizesOffset = kMetadataOffset + kInt32Size; | |
| 77 static const int kStartupLengthOffset = | 59 static const int kStartupLengthOffset = |
| 78 kFirstPageSizesOffset + kNumPagedSpaces * kInt32Size; | 60 kFirstPageSizesOffset + kNumPagedSpaces * kInt32Size; |
| 79 static const int kStartupDataOffset = kStartupLengthOffset + kInt32Size; | 61 static const int kStartupDataOffset = kStartupLengthOffset + kInt32Size; |
| 80 | 62 |
| 81 static int ContextOffset(int startup_length) { | 63 static int ContextOffset(int startup_length) { |
| 82 return kStartupDataOffset + startup_length; | 64 return kStartupDataOffset + startup_length; |
| 83 } | 65 } |
| 84 | 66 |
| 85 DISALLOW_IMPLICIT_CONSTRUCTORS(Snapshot); | 67 DISALLOW_IMPLICIT_CONSTRUCTORS(Snapshot); |
| 86 }; | 68 }; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 static const int kCheckSumOffset = kMagicNumberOffset + kInt32Size; | 103 static const int kCheckSumOffset = kMagicNumberOffset + kInt32Size; |
| 122 static const int kNumReservationsOffset = kCheckSumOffset + kInt32Size; | 104 static const int kNumReservationsOffset = kCheckSumOffset + kInt32Size; |
| 123 static const int kPayloadLengthOffset = kNumReservationsOffset + kInt32Size; | 105 static const int kPayloadLengthOffset = kNumReservationsOffset + kInt32Size; |
| 124 static const int kHeaderSize = kPayloadLengthOffset + kInt32Size; | 106 static const int kHeaderSize = kPayloadLengthOffset + kInt32Size; |
| 125 }; | 107 }; |
| 126 | 108 |
| 127 } // namespace internal | 109 } // namespace internal |
| 128 } // namespace v8 | 110 } // namespace v8 |
| 129 | 111 |
| 130 #endif // V8_SNAPSHOT_SNAPSHOT_H_ | 112 #endif // V8_SNAPSHOT_SNAPSHOT_H_ |
| OLD | NEW |