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 VM_SNAPSHOT_H_ | 5 #ifndef VM_SNAPSHOT_H_ |
6 #define VM_SNAPSHOT_H_ | 6 #define 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 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 InstructionsReader(const uint8_t* instructions_buffer, | 363 InstructionsReader(const uint8_t* instructions_buffer, |
364 const uint8_t* data_buffer) | 364 const uint8_t* data_buffer) |
365 : instructions_buffer_(instructions_buffer), | 365 : instructions_buffer_(instructions_buffer), |
366 data_buffer_(data_buffer) { | 366 data_buffer_(data_buffer) { |
367 ASSERT(instructions_buffer != NULL); | 367 ASSERT(instructions_buffer != NULL); |
368 ASSERT(data_buffer != NULL); | 368 ASSERT(data_buffer != NULL); |
369 ASSERT(Utils::IsAligned(reinterpret_cast<uword>(instructions_buffer), | 369 ASSERT(Utils::IsAligned(reinterpret_cast<uword>(instructions_buffer), |
370 OS::PreferredCodeAlignment())); | 370 OS::PreferredCodeAlignment())); |
371 } | 371 } |
372 | 372 |
373 RawInstructions* GetInstructionsAt(int32_t offset, uword expected_tags); | 373 uword GetInstructionsAt(int32_t offset); |
374 RawObject* GetObjectAt(int32_t offset); | 374 RawObject* GetObjectAt(int32_t offset); |
375 | 375 |
376 private: | 376 private: |
377 const uint8_t* instructions_buffer_; | 377 const uint8_t* instructions_buffer_; |
378 const uint8_t* data_buffer_; | 378 const uint8_t* data_buffer_; |
379 | 379 |
380 DISALLOW_COPY_AND_ASSIGN(InstructionsReader); | 380 DISALLOW_COPY_AND_ASSIGN(InstructionsReader); |
381 }; | 381 }; |
382 | 382 |
383 | 383 |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 RawInt32x4* NewInt32x4(uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3); | 476 RawInt32x4* NewInt32x4(uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3); |
477 RawFloat64x2* NewFloat64x2(double v0, double v1); | 477 RawFloat64x2* NewFloat64x2(double v0, double v1); |
478 RawApiError* NewApiError(); | 478 RawApiError* NewApiError(); |
479 RawLanguageError* NewLanguageError(); | 479 RawLanguageError* NewLanguageError(); |
480 RawUnhandledException* NewUnhandledException(); | 480 RawUnhandledException* NewUnhandledException(); |
481 RawObject* NewInteger(int64_t value); | 481 RawObject* NewInteger(int64_t value); |
482 RawStacktrace* NewStacktrace(); | 482 RawStacktrace* NewStacktrace(); |
483 RawWeakProperty* NewWeakProperty(); | 483 RawWeakProperty* NewWeakProperty(); |
484 RawRegExp* NewRegExp(); | 484 RawRegExp* NewRegExp(); |
485 | 485 |
486 RawInstructions* GetInstructionsAt(int32_t offset, uword expected_tags) { | 486 uword GetInstructionsAt(int32_t offset) { |
487 return instructions_reader_->GetInstructionsAt(offset, expected_tags); | 487 return instructions_reader_->GetInstructionsAt(offset); |
488 } | 488 } |
489 | 489 |
490 RawObject* GetObjectAt(int32_t offset) { | 490 RawObject* GetObjectAt(int32_t offset) { |
491 return instructions_reader_->GetObjectAt(offset); | 491 return instructions_reader_->GetObjectAt(offset); |
492 } | 492 } |
493 | 493 |
494 const uint8_t* instructions_buffer_; | 494 const uint8_t* instructions_buffer_; |
495 const uint8_t* data_buffer_; | 495 const uint8_t* data_buffer_; |
496 | 496 |
497 protected: | 497 protected: |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
855 objects_() { | 855 objects_() { |
856 ASSERT(buffer != NULL); | 856 ASSERT(buffer != NULL); |
857 ASSERT(alloc != NULL); | 857 ASSERT(alloc != NULL); |
858 } | 858 } |
859 | 859 |
860 // Size of the snapshot (assembly code). | 860 // Size of the snapshot (assembly code). |
861 intptr_t BytesWritten() const { return stream_.bytes_written(); } | 861 intptr_t BytesWritten() const { return stream_.bytes_written(); } |
862 | 862 |
863 intptr_t binary_size() { return binary_size_; } | 863 intptr_t binary_size() { return binary_size_; } |
864 | 864 |
865 int32_t GetOffsetFor(RawInstructions* instructions); | 865 int32_t GetOffsetFor(RawInstructions* instructions, RawCode* code); |
866 | 866 |
867 int32_t GetObjectOffsetFor(RawObject* raw_object); | 867 int32_t GetObjectOffsetFor(RawObject* raw_object); |
868 | 868 |
869 void SetInstructionsCode(RawInstructions* insns, RawCode* code) { | |
870 for (intptr_t i = 0; i < instructions_.length(); i++) { | |
871 if (instructions_[i].raw_insns_ == insns) { | |
872 instructions_[i].raw_code_ = code; | |
873 return; | |
874 } | |
875 } | |
876 UNREACHABLE(); | |
877 } | |
878 | |
879 void WriteAssembly(); | 869 void WriteAssembly(); |
880 | 870 |
881 private: | 871 private: |
882 struct InstructionsData { | 872 struct InstructionsData { |
883 explicit InstructionsData(RawInstructions* insns) | 873 explicit InstructionsData(RawInstructions* insns, |
884 : raw_insns_(insns), raw_code_(NULL) { } | 874 RawCode* code, |
| 875 intptr_t offset) |
| 876 : raw_insns_(insns), raw_code_(code), offset_(offset) { } |
885 | 877 |
886 union { | 878 union { |
887 RawInstructions* raw_insns_; | 879 RawInstructions* raw_insns_; |
888 const Instructions* insns_; | 880 const Instructions* insns_; |
889 }; | 881 }; |
890 union { | 882 union { |
891 RawCode* raw_code_; | 883 RawCode* raw_code_; |
892 const Code* code_; | 884 const Code* code_; |
893 }; | 885 }; |
| 886 intptr_t offset_; |
894 }; | 887 }; |
895 | 888 |
896 struct ObjectData { | 889 struct ObjectData { |
897 explicit ObjectData(RawObject* raw_obj) | 890 explicit ObjectData(RawObject* raw_obj) |
898 : raw_obj_(raw_obj) { } | 891 : raw_obj_(raw_obj) { } |
899 | 892 |
900 union { | 893 union { |
901 RawObject* raw_obj_; | 894 RawObject* raw_obj_; |
902 const Object* obj_; | 895 const Object* obj_; |
903 }; | 896 }; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
963 bool can_send_any_object() const { return can_send_any_object_; } | 956 bool can_send_any_object() const { return can_send_any_object_; } |
964 bool snapshot_code() const { return snapshot_code_; } | 957 bool snapshot_code() const { return snapshot_code_; } |
965 bool vm_isolate_is_symbolic() const { return vm_isolate_is_symbolic_; } | 958 bool vm_isolate_is_symbolic() const { return vm_isolate_is_symbolic_; } |
966 void ThrowException(Exceptions::ExceptionType type, const char* msg); | 959 void ThrowException(Exceptions::ExceptionType type, const char* msg); |
967 | 960 |
968 // Write a version string for the snapshot. | 961 // Write a version string for the snapshot. |
969 void WriteVersion(); | 962 void WriteVersion(); |
970 | 963 |
971 static intptr_t FirstObjectId(); | 964 static intptr_t FirstObjectId(); |
972 | 965 |
973 int32_t GetInstructionsId(RawInstructions* instructions) { | 966 int32_t GetInstructionsId(RawInstructions* instructions, RawCode* code) { |
974 return instructions_writer_->GetOffsetFor(instructions); | 967 return instructions_writer_->GetOffsetFor(instructions, code); |
975 } | 968 } |
976 | 969 |
977 int32_t GetObjectId(RawObject* raw) { | 970 int32_t GetObjectId(RawObject* raw) { |
978 return instructions_writer_->GetObjectOffsetFor(raw); | 971 return instructions_writer_->GetObjectOffsetFor(raw); |
979 } | 972 } |
980 | 973 |
981 void SetInstructionsCode(RawInstructions* instructions, RawCode* code) { | |
982 return instructions_writer_->SetInstructionsCode(instructions, code); | |
983 } | |
984 | |
985 void WriteFunctionId(RawFunction* func, bool owner_is_class); | 974 void WriteFunctionId(RawFunction* func, bool owner_is_class); |
986 | 975 |
987 RawFunction* IsSerializableClosure(RawClosure* closure); | 976 RawFunction* IsSerializableClosure(RawClosure* closure); |
988 | 977 |
989 void WriteStaticImplicitClosure(intptr_t object_id, | 978 void WriteStaticImplicitClosure(intptr_t object_id, |
990 RawFunction* func, | 979 RawFunction* func, |
991 intptr_t tags); | 980 intptr_t tags); |
992 | 981 |
993 protected: | 982 protected: |
994 bool CheckAndWritePredefinedObject(RawObject* raw); | 983 bool CheckAndWritePredefinedObject(RawObject* raw); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1041 const char* exception_msg_; // Message associated with exception. | 1030 const char* exception_msg_; // Message associated with exception. |
1042 bool unmarked_objects_; // True if marked objects have been unmarked. | 1031 bool unmarked_objects_; // True if marked objects have been unmarked. |
1043 bool can_send_any_object_; // True if any Dart instance can be sent. | 1032 bool can_send_any_object_; // True if any Dart instance can be sent. |
1044 bool snapshot_code_; | 1033 bool snapshot_code_; |
1045 bool vm_isolate_is_symbolic_; | 1034 bool vm_isolate_is_symbolic_; |
1046 | 1035 |
1047 friend class FullSnapshotWriter; | 1036 friend class FullSnapshotWriter; |
1048 friend class RawArray; | 1037 friend class RawArray; |
1049 friend class RawClass; | 1038 friend class RawClass; |
1050 friend class RawClosureData; | 1039 friend class RawClosureData; |
| 1040 friend class RawCode; |
1051 friend class RawContextScope; | 1041 friend class RawContextScope; |
1052 friend class RawExceptionHandlers; | 1042 friend class RawExceptionHandlers; |
1053 friend class RawField; | 1043 friend class RawField; |
1054 friend class RawFunction; | 1044 friend class RawFunction; |
1055 friend class RawGrowableObjectArray; | 1045 friend class RawGrowableObjectArray; |
1056 friend class RawImmutableArray; | 1046 friend class RawImmutableArray; |
1057 friend class RawInstructions; | 1047 friend class RawInstructions; |
1058 friend class RawRegExp; | 1048 friend class RawRegExp; |
1059 friend class RawLibrary; | 1049 friend class RawLibrary; |
1060 friend class RawLinkedHashMap; | 1050 friend class RawLinkedHashMap; |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1193 private: | 1183 private: |
1194 SnapshotWriter* writer_; | 1184 SnapshotWriter* writer_; |
1195 bool as_references_; | 1185 bool as_references_; |
1196 | 1186 |
1197 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); | 1187 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); |
1198 }; | 1188 }; |
1199 | 1189 |
1200 } // namespace dart | 1190 } // namespace dart |
1201 | 1191 |
1202 #endif // VM_SNAPSHOT_H_ | 1192 #endif // VM_SNAPSHOT_H_ |
OLD | NEW |