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

Unified Diff: src/d8.h

Issue 2643723010: [d8] Use ValueSerializer for postMessage (instead of ad-hoc serializer) (Closed)
Patch Set: starting to work on switching to value serializer 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 | « no previous file | src/d8.cc » ('j') | src/d8.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « no previous file | src/d8.cc » ('j') | src/d8.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698