Chromium Code Reviews| Index: runtime/vm/snapshot.h |
| diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h |
| index 97918208a30157abb0596215b96384a499a10c86..400a479960d080a5b03945bf0f30e2f1fa2708c0 100644 |
| --- a/runtime/vm/snapshot.h |
| +++ b/runtime/vm/snapshot.h |
| @@ -660,7 +660,10 @@ class BaseWriter : public StackResource { |
| data[Snapshot::kSnapshotFlagIndex] = kind; |
| } |
| - void FreeBuffer() { dealloc_(stream_.buffer()); } |
| + void FreeBuffer() { |
| + dealloc_(stream_.buffer()); |
| + stream_.set_buffer(NULL); |
| + } |
| private: |
| WriteStream stream_; |
| @@ -976,19 +979,47 @@ class ScriptSnapshotWriter : public SnapshotWriter { |
| }; |
| +class SerializedObjectBuffer : public StackResource { |
| + public: |
| + SerializedObjectBuffer() |
| + : StackResource(Thread::Current()), |
| + object_data_(NULL), |
| + object_length_(0) {} |
| + |
| + virtual ~SerializedObjectBuffer() { free(object_data_); } |
| + |
| + void StealBuffer(uint8_t** out_data, intptr_t* out_length) { |
| + *out_data = object_data_; |
| + *out_length = object_length_; |
| + |
| + object_data_ = NULL; |
| + object_length_ = 0; |
| + } |
| + |
| + uint8_t** data_buffer() { return &object_data_; } |
| + intptr_t* data_length() { return &object_length_; } |
| + |
| + private: |
| + uint8_t* object_data_; |
| + intptr_t object_length_; |
| +}; |
| + |
| + |
| class MessageWriter : public SnapshotWriter { |
| public: |
| static const intptr_t kInitialSize = 512; |
| MessageWriter(uint8_t** buffer, |
|
Vyacheslav Egorov (Google)
2017/01/24 10:45:41
Another good refactoring would actually be having
kustermann
2017/01/24 11:03:50
There are many more uses of this class, I'd prefer
|
| ReAlloc alloc, |
| DeAlloc dealloc, |
| - bool can_send_any_object); |
| + bool can_send_any_object, |
| + intptr_t* buffer_len = NULL); |
| ~MessageWriter() {} |
| void WriteMessage(const Object& obj); |
| private: |
| ForwardList forward_list_; |
| + intptr_t* buffer_len_; |
| DISALLOW_COPY_AND_ASSIGN(MessageWriter); |
| }; |