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

Unified Diff: runtime/vm/snapshot.h

Issue 2622053002: Refactor snapshots pieces to include a section for loading instructions into the heap of a regular … (Closed)
Patch Set: . Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/raw_object.h ('k') | runtime/vm/snapshot.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/snapshot.h
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h
index 03ad684235ebca4089520a950afd95134022f1c1..97918208a30157abb0596215b96384a499a10c86 100644
--- a/runtime/vm/snapshot.h
+++ b/runtime/vm/snapshot.h
@@ -190,7 +190,7 @@ class Snapshot {
return (kind == kAppJIT) || (kind == kAppAOT);
}
- uint8_t* Addr() { return reinterpret_cast<uint8_t*>(this); }
+ const uint8_t* Addr() const { return reinterpret_cast<const uint8_t*>(this); }
static intptr_t length_offset() {
return OFFSET_OF(Snapshot, unaligned_length_);
@@ -375,7 +375,7 @@ class InstructionsReader : public ZoneAllocated {
OS::PreferredCodeAlignment()));
}
- uword GetInstructionsAt(int32_t offset);
+ RawInstructions* GetInstructionsAt(int32_t offset);
RawObject* GetObjectAt(int32_t offset);
private:
@@ -728,24 +728,28 @@ class ForwardList {
class InstructionsWriter : public ZoneAllocated {
public:
InstructionsWriter()
- : next_offset_(InstructionsSnapshot::kHeaderSize),
- next_object_offset_(DataSnapshot::kHeaderSize),
- instructions_(),
- objects_() {}
+ : next_offset_(0), next_object_offset_(0), instructions_(), objects_() {
+ ResetOffsets();
+ }
virtual ~InstructionsWriter() {}
+ void ResetOffsets() {
+ next_offset_ = InstructionsSnapshot::kHeaderSize;
+ next_object_offset_ = DataSnapshot::kHeaderSize;
+ instructions_.Clear();
+ objects_.Clear();
+ }
int32_t GetOffsetFor(RawInstructions* instructions, RawCode* code);
-
int32_t GetObjectOffsetFor(RawObject* raw_object);
- virtual void Write(uint8_t* vmisolate_buffer,
- intptr_t vmisolate_length,
- uint8_t* isolate_buffer,
- intptr_t isolate_length) = 0;
+ void Write(WriteStream* clustered_stream, bool vm);
virtual intptr_t text_size() = 0;
- virtual intptr_t data_size() = 0;
+ intptr_t data_size() { return next_object_offset_; }
protected:
+ void WriteROData(WriteStream* stream);
+ virtual void WriteText(WriteStream* clustered_stream, bool vm) = 0;
+
struct InstructionsData {
explicit InstructionsData(RawInstructions* insns,
RawCode* code,
@@ -789,15 +793,10 @@ class AssemblyInstructionsWriter : public InstructionsWriter {
intptr_t initial_size)
: InstructionsWriter(),
assembly_stream_(assembly_buffer, alloc, initial_size),
- text_size_(0),
- data_size_(0) {}
+ text_size_(0) {}
- virtual void Write(uint8_t* vmisolate_buffer,
- intptr_t vmisolate_length,
- uint8_t* isolate_buffer,
- intptr_t isolate_length);
+ virtual void WriteText(WriteStream* clustered_stream, bool vm);
virtual intptr_t text_size() { return text_size_; }
- virtual intptr_t data_size() { return data_size_; }
intptr_t AssemblySize() const { return assembly_stream_.bytes_written(); }
@@ -812,19 +811,8 @@ class AssemblyInstructionsWriter : public InstructionsWriter {
text_size_ += sizeof(value);
}
- void WriteWordLiteralData(uword value) {
-// Padding is helpful for comparing the .S with --disassemble.
-#if defined(ARCH_IS_64_BIT)
- assembly_stream_.Print(".quad 0x%0.16" Px "\n", value);
-#else
- assembly_stream_.Print(".long 0x%0.8" Px "\n", value);
-#endif
- data_size_ += sizeof(value);
- }
-
WriteStream assembly_stream_;
intptr_t text_size_;
- intptr_t data_size_;
DISALLOW_COPY_AND_ASSIGN(AssemblyInstructionsWriter);
};
@@ -833,32 +821,22 @@ class AssemblyInstructionsWriter : public InstructionsWriter {
class BlobInstructionsWriter : public InstructionsWriter {
public:
BlobInstructionsWriter(uint8_t** instructions_blob_buffer,
- uint8_t** rodata_blob_buffer,
ReAlloc alloc,
intptr_t initial_size)
: InstructionsWriter(),
instructions_blob_stream_(instructions_blob_buffer,
alloc,
- initial_size),
- rodata_blob_stream_(rodata_blob_buffer, alloc, initial_size) {}
+ initial_size) {}
- virtual void Write(uint8_t* vmisolate_buffer,
- intptr_t vmisolate_length,
- uint8_t* isolate_buffer,
- intptr_t isolate_length);
+ virtual void WriteText(WriteStream* clustered_stream, bool vm);
virtual intptr_t text_size() { return InstructionsBlobSize(); }
- virtual intptr_t data_size() { return RodataBlobSize(); }
intptr_t InstructionsBlobSize() const {
return instructions_blob_stream_.bytes_written();
}
- intptr_t RodataBlobSize() const {
- return rodata_blob_stream_.bytes_written();
- }
private:
WriteStream instructions_blob_stream_;
- WriteStream rodata_blob_stream_;
DISALLOW_COPY_AND_ASSIGN(BlobInstructionsWriter);
};
« no previous file with comments | « runtime/vm/raw_object.h ('k') | runtime/vm/snapshot.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698