Chromium Code Reviews| Index: src/d8.h |
| diff --git a/src/d8.h b/src/d8.h |
| index 1bb8a8965ba9a94fbfc738b8663d4eb05eaf20ff..d6adf0bff98817373eaf9ec3ff32edb339444d28 100644 |
| --- a/src/d8.h |
| +++ b/src/d8.h |
| @@ -6,6 +6,7 @@ |
| #define V8_D8_H_ |
| #include <string> |
| +#include <unordered_set> |
| #include "src/allocation.h" |
| #include "src/base/hashmap.h" |
| @@ -143,55 +144,34 @@ class SourceGroup { |
| int end_offset_; |
| }; |
| -enum SerializationTag { |
| - kSerializationTagUndefined, |
| - kSerializationTagNull, |
| - kSerializationTagTrue, |
| - kSerializationTagFalse, |
| - kSerializationTagNumber, |
| - kSerializationTagString, |
| - kSerializationTagArray, |
| - kSerializationTagObject, |
| - kSerializationTagArrayBuffer, |
| - kSerializationTagTransferredArrayBuffer, |
| - kSerializationTagTransferredSharedArrayBuffer, |
| -}; |
| - |
| class SerializationData { |
| public: |
| - SerializationData() {} |
| + SerializationData() : data_(nullptr), size_(0) {} |
| ~SerializationData(); |
| - void WriteTag(SerializationTag tag); |
| - void WriteMemory(const void* p, int length); |
| - void WriteArrayBufferContents(const ArrayBuffer::Contents& contents); |
| - void WriteSharedArrayBufferContents( |
| - const SharedArrayBuffer::Contents& contents); |
| - |
| - template <typename T> |
| - void Write(const T& data) { |
| - WriteMemory(&data, sizeof(data)); |
| + uint8_t* data() { return data_; } |
| + size_t size() { return size_; } |
| + const std::vector<ArrayBuffer::Contents>& array_buffer_contents() { |
| + return array_buffer_contents_; |
| } |
| - |
| - SerializationTag ReadTag(int* offset) const; |
| - void ReadMemory(void* p, int length, int* offset) const; |
| - void ReadArrayBufferContents(ArrayBuffer::Contents* contents, |
| - int* offset) const; |
| - void ReadSharedArrayBufferContents(SharedArrayBuffer::Contents* contents, |
| - int* offset) const; |
| - |
| - template <typename T> |
| - T Read(int* offset) const { |
| - T value; |
| - ReadMemory(&value, sizeof(value), offset); |
| - return value; |
| + const std::vector<SharedArrayBuffer::Contents>& |
| + shared_array_buffer_contents() { |
| + return shared_array_buffer_contents_; |
| } |
| + void ClearTransferredArrayBuffers(); |
| + |
| + private: |
| + uint8_t* data_; |
|
jbroman
2017/01/24 18:53:43
This looks like it's leaked. You could use unique_
binji
2017/01/25 00:31:36
Done.
|
| + size_t size_; |
| + std::vector<ArrayBuffer::Contents> array_buffer_contents_; |
| + std::vector<SharedArrayBuffer::Contents> shared_array_buffer_contents_; |
| + |
| private: |
| - i::List<uint8_t> data_; |
| - i::List<ArrayBuffer::Contents> array_buffer_contents_; |
| - i::List<SharedArrayBuffer::Contents> shared_array_buffer_contents_; |
| + friend class Serializer; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(SerializationData); |
| }; |
| @@ -335,16 +315,11 @@ class Shell : public i::AllStatic { |
| static void CollectGarbage(Isolate* isolate); |
| static void EmptyMessageQueues(Isolate* isolate); |
| - // TODO(binji): stupid implementation for now. Is there an easy way to hash an |
| - // object for use in base::HashMap? By pointer? |
| - typedef i::List<Local<Object>> ObjectList; |
| - static bool SerializeValue(Isolate* isolate, Local<Value> value, |
| - const ObjectList& to_transfer, |
| - ObjectList* seen_objects, |
| - SerializationData* out_data); |
| + static Maybe<SerializationData*> SerializeValue(Isolate* isolate, |
| + Local<Value> value, |
| + Local<Value> transfer); |
| static MaybeLocal<Value> DeserializeValue(Isolate* isolate, |
| - const SerializationData& data, |
| - int* offset); |
| + SerializationData* data); |
| static void CleanupWorkers(); |
| static int* LookupCounter(const char* name); |
| static void* CreateHistogram(const char* name, |
| @@ -446,7 +421,8 @@ class Shell : public i::AllStatic { |
| static base::LazyMutex workers_mutex_; |
| static bool allow_new_workers_; |
| static i::List<Worker*> workers_; |
| - static i::List<SharedArrayBuffer::Contents> externalized_shared_contents_; |
| + static std::unordered_set<SharedArrayBuffer::Contents> |
| + externalized_shared_contents_; |
| static void WriteIgnitionDispatchCountersFile(v8::Isolate* isolate); |
| static Counter* GetCounter(const char* name, bool is_histogram); |