Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(97)

Side by Side Diff: runtime/vm/snapshot.h

Issue 1309563006: Emit assembly instead of a blob for the instructions snapshot, and provide labels for the entry poi… (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/raw_object_snapshot.cc ('k') | runtime/vm/snapshot.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
11 #include "vm/datastream.h" 11 #include "vm/datastream.h"
12 #include "vm/exceptions.h" 12 #include "vm/exceptions.h"
13 #include "vm/globals.h" 13 #include "vm/globals.h"
14 #include "vm/growable_array.h" 14 #include "vm/growable_array.h"
15 #include "vm/isolate.h" 15 #include "vm/isolate.h"
16 #include "vm/visitor.h" 16 #include "vm/visitor.h"
17 17
18 namespace dart { 18 namespace dart {
19 19
20 // Forward declarations. 20 // Forward declarations.
21 class AbstractType; 21 class AbstractType;
22 class Array; 22 class Array;
23 class Class; 23 class Class;
24 class ClassTable; 24 class ClassTable;
25 class Code;
25 class ExternalTypedData; 26 class ExternalTypedData;
26 class GrowableObjectArray; 27 class GrowableObjectArray;
27 class Heap; 28 class Heap;
29 class Instructions;
28 class LanguageError; 30 class LanguageError;
29 class Library; 31 class Library;
30 class Object; 32 class Object;
31 class PassiveObject; 33 class PassiveObject;
32 class ObjectStore; 34 class ObjectStore;
33 class PageSpace; 35 class PageSpace;
34 class RawApiError; 36 class RawApiError;
35 class RawArray; 37 class RawArray;
36 class RawBigint; 38 class RawBigint;
37 class RawBoundedType; 39 class RawBoundedType;
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 friend class FullSnapshotWriter; 772 friend class FullSnapshotWriter;
771 DISALLOW_COPY_AND_ASSIGN(ForwardList); 773 DISALLOW_COPY_AND_ASSIGN(ForwardList);
772 }; 774 };
773 775
774 776
775 class InstructionsWriter : public ZoneAllocated { 777 class InstructionsWriter : public ZoneAllocated {
776 public: 778 public:
777 InstructionsWriter(uint8_t** buffer, 779 InstructionsWriter(uint8_t** buffer,
778 ReAlloc alloc, 780 ReAlloc alloc,
779 intptr_t initial_size) 781 intptr_t initial_size)
780 : stream_(buffer, alloc, initial_size) { 782 : stream_(buffer, alloc, initial_size),
783 next_offset_(0),
784 instructions_() {
781 ASSERT(buffer != NULL); 785 ASSERT(buffer != NULL);
782 ASSERT(alloc != NULL); 786 ASSERT(alloc != NULL);
783 } 787 }
784 788
785 // Size of the snapshot. 789 // Size of the snapshot.
786 intptr_t BytesWritten() const { return stream_.bytes_written(); } 790 intptr_t BytesWritten() const { return stream_.bytes_written(); }
787 791
788 int32_t GetOffsetFor(RawInstructions* instructions); 792 int32_t GetOffsetFor(RawInstructions* instructions);
789 793
794 void SetInstructionsCode(RawInstructions* insns, RawCode* code) {
795 for (intptr_t i = 0; i < instructions_.length(); i++) {
796 if (instructions_[i].raw_insns_ == insns) {
797 instructions_[i].raw_code_ = code;
798 return;
799 }
800 }
801 UNREACHABLE();
802 }
803
804 void WriteAssembly();
805
790 private: 806 private:
807 struct InstructionsData {
808 explicit InstructionsData(RawInstructions* insns)
809 : raw_insns_(insns), raw_code_(NULL) { }
810
811 union {
812 RawInstructions* raw_insns_;
813 const Instructions* insns_;
814 };
815 union {
816 RawCode* raw_code_;
817 const Code* code_;
818 };
819 };
820
821
791 WriteStream stream_; 822 WriteStream stream_;
823 intptr_t next_offset_;
824 GrowableArray<InstructionsData> instructions_;
792 825
793 DISALLOW_COPY_AND_ASSIGN(InstructionsWriter); 826 DISALLOW_COPY_AND_ASSIGN(InstructionsWriter);
794 }; 827 };
795 828
796 829
797 class SnapshotWriter : public BaseWriter { 830 class SnapshotWriter : public BaseWriter {
798 protected: 831 protected:
799 SnapshotWriter(Snapshot::Kind kind, 832 SnapshotWriter(Snapshot::Kind kind,
800 uint8_t** buffer, 833 uint8_t** buffer,
801 ReAlloc alloc, 834 ReAlloc alloc,
(...skipping 30 matching lines...) Expand all
832 865
833 // Write a version string for the snapshot. 866 // Write a version string for the snapshot.
834 void WriteVersion(); 867 void WriteVersion();
835 868
836 static intptr_t FirstObjectId(); 869 static intptr_t FirstObjectId();
837 870
838 int32_t GetInstructionsId(RawInstructions* instructions) { 871 int32_t GetInstructionsId(RawInstructions* instructions) {
839 return instructions_writer_->GetOffsetFor(instructions); 872 return instructions_writer_->GetOffsetFor(instructions);
840 } 873 }
841 874
875 void SetInstructionsCode(RawInstructions* instructions, RawCode* code) {
876 return instructions_writer_->SetInstructionsCode(instructions, code);
877 }
878
842 protected: 879 protected:
843 void UnmarkAll() { 880 void UnmarkAll() {
844 if (!unmarked_objects_ && forward_list_ != NULL) { 881 if (!unmarked_objects_ && forward_list_ != NULL) {
845 forward_list_->UnmarkAll(); 882 forward_list_->UnmarkAll();
846 unmarked_objects_ = true; 883 unmarked_objects_ = true;
847 } 884 }
848 } 885 }
849 886
850 bool CheckAndWritePredefinedObject(RawObject* raw); 887 bool CheckAndWritePredefinedObject(RawObject* raw);
851 bool HandleVMIsolateObject(RawObject* raw); 888 bool HandleVMIsolateObject(RawObject* raw);
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
1051 private: 1088 private:
1052 SnapshotWriter* writer_; 1089 SnapshotWriter* writer_;
1053 bool as_references_; 1090 bool as_references_;
1054 1091
1055 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); 1092 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor);
1056 }; 1093 };
1057 1094
1058 } // namespace dart 1095 } // namespace dart
1059 1096
1060 #endif // VM_SNAPSHOT_H_ 1097 #endif // VM_SNAPSHOT_H_
OLDNEW
« no previous file with comments | « runtime/vm/raw_object_snapshot.cc ('k') | runtime/vm/snapshot.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698