| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef RUNTIME_VM_SNAPSHOT_H_ | 5 #ifndef RUNTIME_VM_SNAPSHOT_H_ |
| 6 #define RUNTIME_VM_SNAPSHOT_H_ | 6 #define RUNTIME_VM_SNAPSHOT_H_ |
| 7 | 7 |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/allocation.h" | 9 #include "vm/allocation.h" |
| 10 #include "vm/bitfield.h" | 10 #include "vm/bitfield.h" |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 | 147 |
| 148 | 148 |
| 149 // Structure capturing the raw snapshot. | 149 // Structure capturing the raw snapshot. |
| 150 // | 150 // |
| 151 // TODO(turnidge): Remove this class once the snapshot does not have a | 151 // TODO(turnidge): Remove this class once the snapshot does not have a |
| 152 // header anymore. This is pending on making the embedder pass in the | 152 // header anymore. This is pending on making the embedder pass in the |
| 153 // length of their snapshot. | 153 // length of their snapshot. |
| 154 class Snapshot { | 154 class Snapshot { |
| 155 public: | 155 public: |
| 156 enum Kind { | 156 enum Kind { |
| 157 kCore = 0, // Full snapshot of core libraries. No root library, no code. | 157 // N.B. The order of these values must be preserved to give proper error |
| 158 // messages for old snapshots. |
| 159 kFull = 0, // Full snapshot of core libraries or an application. |
| 158 kScript, // A partial snapshot of only the application script. | 160 kScript, // A partial snapshot of only the application script. |
| 159 kMessage, // A partial snapshot used only for isolate messaging. | 161 kMessage, // A partial snapshot used only for isolate messaging. |
| 160 kAppJIT, // Full snapshot of core libraries and application. Has some | 162 kFullJIT, // Full + JIT code |
| 161 // code, but may compile in the future because we haven't | 163 kFullAOT, // Full + AOT code |
| 162 // necessarily included code for every function or to | |
| 163 // (de)optimize. | |
| 164 kAppAOT, // Full snapshot of core libraries and application. Has | |
| 165 // complete code for the application that never deopts. Will | |
| 166 // not compile in the future. | |
| 167 kNone, // dart_bootstrap/gen_snapshot | 164 kNone, // dart_bootstrap/gen_snapshot |
| 168 kInvalid | 165 kInvalid |
| 169 }; | 166 }; |
| 170 static const char* KindToCString(Kind kind); | 167 static const char* KindToCString(Kind kind); |
| 171 | 168 |
| 172 static const int kHeaderSize = 2 * sizeof(int64_t); | 169 static const int kHeaderSize = 2 * sizeof(int64_t); |
| 173 static const int kLengthIndex = 0; | 170 static const int kLengthIndex = 0; |
| 174 static const int kSnapshotFlagIndex = 1; | 171 static const int kSnapshotFlagIndex = 1; |
| 175 | 172 |
| 176 static const Snapshot* SetupFromBuffer(const void* raw_memory); | 173 static const Snapshot* SetupFromBuffer(const void* raw_memory); |
| 177 | 174 |
| 178 // Getters. | 175 // Getters. |
| 179 const uint8_t* content() const { OPEN_ARRAY_START(uint8_t, uint8_t); } | 176 const uint8_t* content() const { OPEN_ARRAY_START(uint8_t, uint8_t); } |
| 180 intptr_t length() const { | 177 intptr_t length() const { |
| 181 return static_cast<intptr_t>(ReadUnaligned(&unaligned_length_)); | 178 return static_cast<intptr_t>(ReadUnaligned(&unaligned_length_)); |
| 182 } | 179 } |
| 183 Kind kind() const { | 180 Kind kind() const { |
| 184 return static_cast<Kind>(ReadUnaligned(&unaligned_kind_)); | 181 return static_cast<Kind>(ReadUnaligned(&unaligned_kind_)); |
| 185 } | 182 } |
| 186 | 183 |
| 187 static bool IsFull(Kind kind) { | 184 static bool IsFull(Kind kind) { |
| 188 return (kind == kCore) || (kind == kAppJIT) || (kind == kAppAOT); | 185 return (kind == kFull) || (kind == kFullJIT) || (kind == kFullAOT); |
| 189 } | 186 } |
| 190 static bool IncludesCode(Kind kind) { | 187 static bool IncludesCode(Kind kind) { |
| 191 return (kind == kAppJIT) || (kind == kAppAOT); | 188 return (kind == kFullJIT) || (kind == kFullAOT); |
| 192 } | 189 } |
| 193 | 190 |
| 194 const uint8_t* Addr() const { return reinterpret_cast<const uint8_t*>(this); } | 191 const uint8_t* Addr() const { return reinterpret_cast<const uint8_t*>(this); } |
| 195 | 192 |
| 196 static intptr_t length_offset() { | 193 static intptr_t length_offset() { |
| 197 return OFFSET_OF(Snapshot, unaligned_length_); | 194 return OFFSET_OF(Snapshot, unaligned_length_); |
| 198 } | 195 } |
| 199 static intptr_t kind_offset() { return OFFSET_OF(Snapshot, unaligned_kind_); } | 196 static intptr_t kind_offset() { return OFFSET_OF(Snapshot, unaligned_kind_); } |
| 200 | 197 |
| 201 private: | 198 private: |
| (...skipping 811 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1013 private: | 1010 private: |
| 1014 SnapshotWriter* writer_; | 1011 SnapshotWriter* writer_; |
| 1015 bool as_references_; | 1012 bool as_references_; |
| 1016 | 1013 |
| 1017 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); | 1014 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); |
| 1018 }; | 1015 }; |
| 1019 | 1016 |
| 1020 } // namespace dart | 1017 } // namespace dart |
| 1021 | 1018 |
| 1022 #endif // RUNTIME_VM_SNAPSHOT_H_ | 1019 #endif // RUNTIME_VM_SNAPSHOT_H_ |
| OLD | NEW |