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 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
653 // Make room for recording snapshot buffer size. | 653 // Make room for recording snapshot buffer size. |
654 stream_.set_current(stream_.buffer() + Snapshot::kHeaderSize); | 654 stream_.set_current(stream_.buffer() + Snapshot::kHeaderSize); |
655 } | 655 } |
656 | 656 |
657 void FillHeader(Snapshot::Kind kind) { | 657 void FillHeader(Snapshot::Kind kind) { |
658 int64_t* data = reinterpret_cast<int64_t*>(stream_.buffer()); | 658 int64_t* data = reinterpret_cast<int64_t*>(stream_.buffer()); |
659 data[Snapshot::kLengthIndex] = stream_.bytes_written(); | 659 data[Snapshot::kLengthIndex] = stream_.bytes_written(); |
660 data[Snapshot::kSnapshotFlagIndex] = kind; | 660 data[Snapshot::kSnapshotFlagIndex] = kind; |
661 } | 661 } |
662 | 662 |
663 void FreeBuffer() { | 663 void FreeBuffer() { dealloc_(stream_.buffer()); } |
664 dealloc_(stream_.buffer()); | |
665 stream_.set_buffer(NULL); | |
666 } | |
667 | 664 |
668 private: | 665 private: |
669 WriteStream stream_; | 666 WriteStream stream_; |
670 DeAlloc dealloc_; | 667 DeAlloc dealloc_; |
671 | 668 |
672 DISALLOW_IMPLICIT_CONSTRUCTORS(BaseWriter); | 669 DISALLOW_IMPLICIT_CONSTRUCTORS(BaseWriter); |
673 }; | 670 }; |
674 | 671 |
675 | 672 |
676 class ForwardList { | 673 class ForwardList { |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
972 // Writes a partial snapshot of the script. | 969 // Writes a partial snapshot of the script. |
973 void WriteScriptSnapshot(const Library& lib); | 970 void WriteScriptSnapshot(const Library& lib); |
974 | 971 |
975 private: | 972 private: |
976 ForwardList forward_list_; | 973 ForwardList forward_list_; |
977 | 974 |
978 DISALLOW_COPY_AND_ASSIGN(ScriptSnapshotWriter); | 975 DISALLOW_COPY_AND_ASSIGN(ScriptSnapshotWriter); |
979 }; | 976 }; |
980 | 977 |
981 | 978 |
982 class SerializedObjectBuffer : public StackResource { | |
983 public: | |
984 SerializedObjectBuffer() | |
985 : StackResource(Thread::Current()), | |
986 object_data_(NULL), | |
987 object_length_(0) {} | |
988 | |
989 virtual ~SerializedObjectBuffer() { free(object_data_); } | |
990 | |
991 void StealBuffer(uint8_t** out_data, intptr_t* out_length) { | |
992 *out_data = object_data_; | |
993 *out_length = object_length_; | |
994 | |
995 object_data_ = NULL; | |
996 object_length_ = 0; | |
997 } | |
998 | |
999 uint8_t** data_buffer() { return &object_data_; } | |
1000 intptr_t* data_length() { return &object_length_; } | |
1001 | |
1002 private: | |
1003 uint8_t* object_data_; | |
1004 intptr_t object_length_; | |
1005 }; | |
1006 | |
1007 | |
1008 class MessageWriter : public SnapshotWriter { | 979 class MessageWriter : public SnapshotWriter { |
1009 public: | 980 public: |
1010 static const intptr_t kInitialSize = 512; | 981 static const intptr_t kInitialSize = 512; |
1011 MessageWriter(uint8_t** buffer, | 982 MessageWriter(uint8_t** buffer, |
1012 ReAlloc alloc, | 983 ReAlloc alloc, |
1013 DeAlloc dealloc, | 984 DeAlloc dealloc, |
1014 bool can_send_any_object, | 985 bool can_send_any_object); |
1015 intptr_t* buffer_len = NULL); | |
1016 ~MessageWriter() {} | 986 ~MessageWriter() {} |
1017 | 987 |
1018 void WriteMessage(const Object& obj); | 988 void WriteMessage(const Object& obj); |
1019 | 989 |
1020 private: | 990 private: |
1021 ForwardList forward_list_; | 991 ForwardList forward_list_; |
1022 intptr_t* buffer_len_; | |
1023 | 992 |
1024 DISALLOW_COPY_AND_ASSIGN(MessageWriter); | 993 DISALLOW_COPY_AND_ASSIGN(MessageWriter); |
1025 }; | 994 }; |
1026 | 995 |
1027 | 996 |
1028 // An object pointer visitor implementation which writes out | 997 // An object pointer visitor implementation which writes out |
1029 // objects to a snap shot. | 998 // objects to a snap shot. |
1030 class SnapshotWriterVisitor : public ObjectPointerVisitor { | 999 class SnapshotWriterVisitor : public ObjectPointerVisitor { |
1031 public: | 1000 public: |
1032 SnapshotWriterVisitor(SnapshotWriter* writer, bool as_references) | 1001 SnapshotWriterVisitor(SnapshotWriter* writer, bool as_references) |
1033 : ObjectPointerVisitor(Isolate::Current()), | 1002 : ObjectPointerVisitor(Isolate::Current()), |
1034 writer_(writer), | 1003 writer_(writer), |
1035 as_references_(as_references) {} | 1004 as_references_(as_references) {} |
1036 | 1005 |
1037 virtual void VisitPointers(RawObject** first, RawObject** last); | 1006 virtual void VisitPointers(RawObject** first, RawObject** last); |
1038 | 1007 |
1039 private: | 1008 private: |
1040 SnapshotWriter* writer_; | 1009 SnapshotWriter* writer_; |
1041 bool as_references_; | 1010 bool as_references_; |
1042 | 1011 |
1043 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); | 1012 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); |
1044 }; | 1013 }; |
1045 | 1014 |
1046 } // namespace dart | 1015 } // namespace dart |
1047 | 1016 |
1048 #endif // RUNTIME_VM_SNAPSHOT_H_ | 1017 #endif // RUNTIME_VM_SNAPSHOT_H_ |
OLD | NEW |