| Index: runtime/vm/snapshot_test.cc
|
| ===================================================================
|
| --- runtime/vm/snapshot_test.cc (revision 11409)
|
| +++ runtime/vm/snapshot_test.cc (working copy)
|
| @@ -36,6 +36,16 @@
|
| }
|
| return false;
|
| }
|
| + if (expected.IsBool()) {
|
| + if (actual.IsBool()) {
|
| + Bool& bl1 = Bool::Handle();
|
| + Bool& bl2 = Bool::Handle();
|
| + bl1 ^= expected.raw();
|
| + bl2 ^= actual.raw();
|
| + return bl1.value() == bl2.value();
|
| + }
|
| + return false;
|
| + }
|
| return false;
|
| }
|
|
|
| @@ -53,14 +63,6 @@
|
| }
|
|
|
|
|
| -static Dart_CObject* DecodeMessage(uint8_t* message,
|
| - intptr_t length,
|
| - ReAlloc allocator) {
|
| - ApiMessageReader message_reader(message, length, allocator);
|
| - return message_reader.ReadMessage();
|
| -}
|
| -
|
| -
|
| // Compare two Dart_CObject object graphs rooted in first and
|
| // second. The second graph will be destroyed by this operation no matter
|
| // whether the graphs are equal or not.
|
| @@ -122,9 +124,8 @@
|
| ApiMessageWriter writer(&buffer, &malloc_allocator);
|
| writer.WriteCMessage(root);
|
|
|
| - Dart_CObject* new_root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, writer.BytesWritten(), &zone_allocator);
|
| + Dart_CObject* new_root = api_reader.ReadMessage();
|
|
|
| // Check that the two messages are the same.
|
| CompareDartCObjects(root, new_root);
|
| @@ -135,24 +136,21 @@
|
|
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| const Object& null_object = Object::Handle();
|
| - writer.WriteObject(null_object.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(null_object);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| + SnapshotReader reader(buffer, buffer_len,
|
| + Snapshot::kMessage, Isolate::Current());
|
| const Object& serialized_object = Object::Handle(reader.ReadObject());
|
| EXPECT(Equals(null_object, serialized_object));
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_NOTNULL(root);
|
| EXPECT_EQ(Dart_CObject::kNull, root->type);
|
| CheckEncodeDecodeMessage(root);
|
| @@ -164,24 +162,21 @@
|
|
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| const Smi& smi = Smi::Handle(Smi::New(124));
|
| - writer.WriteObject(smi.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(smi);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| + SnapshotReader reader(buffer, buffer_len,
|
| + Snapshot::kMessage, Isolate::Current());
|
| const Object& serialized_object = Object::Handle(reader.ReadObject());
|
| EXPECT(Equals(smi, serialized_object));
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_NOTNULL(root);
|
| EXPECT_EQ(Dart_CObject::kInt32, root->type);
|
| EXPECT_EQ(smi.Value(), root->value.as_int32);
|
| @@ -194,24 +189,21 @@
|
|
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| const Smi& smi = Smi::Handle(Smi::New(-1));
|
| - writer.WriteObject(smi.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(smi);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| + SnapshotReader reader(buffer, buffer_len,
|
| + Snapshot::kMessage, Isolate::Current());
|
| const Object& serialized_object = Object::Handle(reader.ReadObject());
|
| EXPECT(Equals(smi, serialized_object));
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_NOTNULL(root);
|
| EXPECT_EQ(Dart_CObject::kInt32, root->type);
|
| EXPECT_EQ(smi.Value(), root->value.as_int32);
|
| @@ -222,22 +214,19 @@
|
| Dart_CObject* SerializeAndDeserializeMint(const Mint& mint) {
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| - writer.WriteObject(mint.raw());
|
| - writer.FinalizeBuffer();
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| + writer.WriteMessage(mint);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| + SnapshotReader reader(buffer, buffer_len,
|
| + Snapshot::kMessage, Isolate::Current());
|
| const Object& serialized_object = Object::Handle(reader.ReadObject());
|
| EXPECT(serialized_object.IsMint());
|
|
|
| // Read object back from the snapshot into a C structure.
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_NOTNULL(root);
|
| CheckEncodeDecodeMessage(root);
|
| return root;
|
| @@ -294,24 +283,21 @@
|
|
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| const Double& dbl = Double::Handle(Double::New(101.29));
|
| - writer.WriteObject(dbl.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(dbl);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| + SnapshotReader reader(buffer, buffer_len,
|
| + Snapshot::kMessage, Isolate::Current());
|
| const Object& serialized_object = Object::Handle(reader.ReadObject());
|
| EXPECT(Equals(dbl, serialized_object));
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_NOTNULL(root);
|
| EXPECT_EQ(Dart_CObject::kDouble, root->type);
|
| EXPECT_EQ(dbl.value(), root->value.as_double);
|
| @@ -319,46 +305,28 @@
|
| }
|
|
|
|
|
| -TEST_CASE(SerializeBool) {
|
| - Zone zone(Isolate::Current());
|
| -
|
| - // Write snapshot with object content.
|
| - uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| - const Bool& bool1 = Bool::Handle(Bool::True());
|
| - const Bool& bool2 = Bool::Handle(Bool::False());
|
| - writer.WriteObject(bool1.raw());
|
| - writer.WriteObject(bool2.raw());
|
| - writer.FinalizeBuffer();
|
| -
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| - // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| - EXPECT(Bool::True() == reader.ReadObject());
|
| - EXPECT(Bool::False() == reader.ReadObject());
|
| -}
|
| -
|
| -
|
| TEST_CASE(SerializeTrue) {
|
| Zone zone(Isolate::Current());
|
|
|
| // Write snapshot with true object.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| const Bool& bl = Bool::Handle(Bool::True());
|
| - writer.WriteObject(bl.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(bl);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - Snapshot::SetupFromBuffer(buffer);
|
| + // Read object back from the snapshot.
|
| + SnapshotReader reader(buffer, buffer_len,
|
| + Snapshot::kMessage, Isolate::Current());
|
| + const Object& serialized_object = Object::Handle(reader.ReadObject());
|
| + fprintf(stderr, "%s / %s\n", bl.ToCString(), serialized_object.ToCString());
|
|
|
| + EXPECT(Equals(bl, serialized_object));
|
| +
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_NOTNULL(root);
|
| EXPECT_EQ(Dart_CObject::kBool, root->type);
|
| EXPECT_EQ(true, root->value.as_bool);
|
| @@ -371,19 +339,21 @@
|
|
|
| // Write snapshot with false object.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| const Bool& bl = Bool::Handle(Bool::False());
|
| - writer.WriteObject(bl.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(bl);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - Snapshot::SetupFromBuffer(buffer);
|
| + // Read object back from the snapshot.
|
| + SnapshotReader reader(buffer, buffer_len,
|
| + Snapshot::kMessage, Isolate::Current());
|
| + const Object& serialized_object = Object::Handle(reader.ReadObject());
|
| + EXPECT(Equals(bl, serialized_object));
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_NOTNULL(root);
|
| EXPECT_EQ(Dart_CObject::kBool, root->type);
|
| EXPECT_EQ(false, root->value.as_bool);
|
| @@ -401,16 +371,14 @@
|
|
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| const Bigint& bigint = Bigint::Handle(Bigint::New(DART_INT64_C(0xfffffffff)));
|
| - writer.WriteObject(bigint.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(bigint);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| + SnapshotReader reader(buffer, buffer_len,
|
| + Snapshot::kMessage, Isolate::Current());
|
| Bigint& obj = Bigint::Handle();
|
| obj ^= reader.ReadObject();
|
|
|
| @@ -418,9 +386,8 @@
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| // Bigint not supported.
|
| EXPECT_NOTNULL(root);
|
| EXPECT_EQ(Dart_CObject::kBigint, root->type);
|
| @@ -432,15 +399,13 @@
|
| Dart_CObject* SerializeAndDeserializeBigint(const Bigint& bigint) {
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| - writer.WriteObject(bigint.raw());
|
| - writer.FinalizeBuffer();
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| + writer.WriteMessage(bigint);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| + SnapshotReader reader(buffer, buffer_len,
|
| + Snapshot::kMessage, Isolate::Current());
|
| Bigint& serialized_bigint = Bigint::Handle();
|
| serialized_bigint ^= reader.ReadObject();
|
| const char *str1 = BigintOperations::ToHexCString(bigint, allocator);
|
| @@ -452,9 +417,8 @@
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| // Bigint not supported.
|
| EXPECT_NOTNULL(root);
|
| CheckEncodeDecodeMessage(root);
|
| @@ -489,11 +453,10 @@
|
| CheckBigint("-0x9876543210987654321098765432109876543210");
|
| }
|
|
|
| -
|
| TEST_CASE(SerializeSingletons) {
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator);
|
| + MessageWriter writer(&buffer, &malloc_allocator);
|
| writer.WriteObject(Object::class_class());
|
| writer.WriteObject(Object::null_class());
|
| writer.WriteObject(Object::type_class());
|
| @@ -511,13 +474,11 @@
|
| writer.WriteObject(Object::exception_handlers_class());
|
| writer.WriteObject(Object::context_class());
|
| writer.WriteObject(Object::context_scope_class());
|
| - writer.FinalizeBuffer();
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| + SnapshotReader reader(buffer, buffer_len, Snapshot::kMessage,
|
| + Isolate::Current());
|
| EXPECT(Object::class_class() == reader.ReadObject());
|
| EXPECT(Object::null_class() == reader.ReadObject());
|
| EXPECT(Object::type_class() == reader.ReadObject());
|
| @@ -545,26 +506,23 @@
|
|
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| static const char* cstr = "This string shall be serialized";
|
| String& str = String::Handle(String::New(cstr));
|
| - writer.WriteObject(str.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(str);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| + SnapshotReader reader(buffer, buffer_len,
|
| + Snapshot::kMessage, Isolate::Current());
|
| String& serialized_str = String::Handle();
|
| serialized_str ^= reader.ReadObject();
|
| EXPECT(str.Equals(serialized_str));
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_EQ(Dart_CObject::kString, root->type);
|
| EXPECT_STREQ(cstr, root->value.as_string);
|
| CheckEncodeDecodeMessage(root);
|
| @@ -576,7 +534,7 @@
|
|
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| const int kArrayLength = 10;
|
| Array& array = Array::Handle(Array::New(kArrayLength));
|
| Smi& smi = Smi::Handle();
|
| @@ -584,23 +542,20 @@
|
| smi ^= Smi::New(i);
|
| array.SetAt(i, smi);
|
| }
|
| - writer.WriteObject(array.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(array);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| + SnapshotReader reader(buffer, buffer_len,
|
| + Snapshot::kMessage, Isolate::Current());
|
| Array& serialized_array = Array::Handle();
|
| serialized_array ^= reader.ReadObject();
|
| EXPECT(array.Equals(serialized_array));
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_EQ(Dart_CObject::kArray, root->type);
|
| EXPECT_EQ(kArrayLength, root->value.as_array.length);
|
| for (int i = 0; i < kArrayLength; i++) {
|
| @@ -617,26 +572,23 @@
|
|
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| const int kArrayLength = 0;
|
| Array& array = Array::Handle(Array::New(kArrayLength));
|
| - writer.WriteObject(array.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(array);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| + SnapshotReader reader(buffer, buffer_len,
|
| + Snapshot::kMessage, Isolate::Current());
|
| Array& serialized_array = Array::Handle();
|
| serialized_array ^= reader.ReadObject();
|
| EXPECT(array.Equals(serialized_array));
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_EQ(Dart_CObject::kArray, root->type);
|
| EXPECT_EQ(kArrayLength, root->value.as_array.length);
|
| EXPECT(root->value.as_array.values == NULL);
|
| @@ -649,30 +601,27 @@
|
|
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| const int kByteArrayLength = 256;
|
| Uint8Array& byte_array =
|
| Uint8Array::Handle(Uint8Array::New(kByteArrayLength));
|
| for (int i = 0; i < kByteArrayLength; i++) {
|
| byte_array.SetAt(i, i);
|
| }
|
| - writer.WriteObject(byte_array.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(byte_array);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| + SnapshotReader reader(buffer, buffer_len,
|
| + Snapshot::kMessage, Isolate::Current());
|
| ByteArray& serialized_byte_array = ByteArray::Handle();
|
| serialized_byte_array ^= reader.ReadObject();
|
| EXPECT(serialized_byte_array.IsByteArray());
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_EQ(Dart_CObject::kUint8Array, root->type);
|
| EXPECT_EQ(kByteArrayLength, root->value.as_byte_array.length);
|
| for (int i = 0; i < kByteArrayLength; i++) {
|
| @@ -687,27 +636,24 @@
|
|
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| const int kByteArrayLength = 0;
|
| Uint8Array& byte_array =
|
| Uint8Array::Handle(Uint8Array::New(kByteArrayLength));
|
| - writer.WriteObject(byte_array.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(byte_array);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| + SnapshotReader reader(buffer, buffer_len,
|
| + Snapshot::kMessage, Isolate::Current());
|
| ByteArray& serialized_byte_array = ByteArray::Handle();
|
| serialized_byte_array ^= reader.ReadObject();
|
| EXPECT(serialized_byte_array.IsByteArray());
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_EQ(Dart_CObject::kUint8Array, root->type);
|
| EXPECT_EQ(kByteArrayLength, root->value.as_byte_array.length);
|
| EXPECT(root->value.as_byte_array.values == NULL);
|
| @@ -715,6 +661,26 @@
|
| }
|
|
|
|
|
| +class TestSnapshotWriter : public SnapshotWriter {
|
| + public:
|
| + TestSnapshotWriter(uint8_t** buffer, ReAlloc alloc)
|
| + : SnapshotWriter(Snapshot::kScript, buffer, alloc) {
|
| + ASSERT(buffer != NULL);
|
| + ASSERT(alloc != NULL);
|
| + }
|
| + ~TestSnapshotWriter() { }
|
| +
|
| + // Writes just a script object
|
| + void WriteScript(const Script& script) {
|
| + WriteObject(script.raw());
|
| + UnmarkAll();
|
| + }
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(TestSnapshotWriter);
|
| +};
|
| +
|
| +
|
| TEST_CASE(SerializeScript) {
|
| const char* kScriptChars =
|
| "class A {\n"
|
| @@ -736,17 +702,14 @@
|
| lib.Register();
|
| EXPECT(CompilerTest::TestCompileScript(lib, script));
|
|
|
| - // Write snapshot with object content.
|
| + // Write snapshot with script content.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kScript, &buffer, &malloc_allocator);
|
| - writer.WriteObject(script.raw());
|
| - writer.FinalizeBuffer();
|
| + TestSnapshotWriter writer(&buffer, &malloc_allocator);
|
| + writer.WriteScript(script);
|
|
|
| - // Create a snapshot object using the buffer.
|
| - const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
|
| -
|
| // Read object back from the snapshot.
|
| - SnapshotReader reader(snapshot, Isolate::Current());
|
| + SnapshotReader reader(buffer, writer.BytesWritten(),
|
| + Snapshot::kScript, Isolate::Current());
|
| Script& serialized_script = Script::Handle();
|
| serialized_script ^= reader.ReadObject();
|
|
|
| @@ -843,7 +806,7 @@
|
| Isolate* isolate = Isolate::Current();
|
| Zone zone(isolate);
|
| HandleScope scope(isolate);
|
| - SnapshotWriter writer(Snapshot::kFull, &buffer, &malloc_allocator);
|
| + FullSnapshotWriter writer(&buffer, &malloc_allocator);
|
| writer.WriteFullSnapshot();
|
| }
|
|
|
| @@ -897,7 +860,7 @@
|
| OS::PrintErr("Without Snapshot: %dus\n", timer1.TotalElapsedTime());
|
|
|
| // Write snapshot with object content.
|
| - SnapshotWriter writer(Snapshot::kFull, &buffer, &malloc_allocator);
|
| + FullSnapshotWriter writer(&buffer, &malloc_allocator);
|
| writer.WriteFullSnapshot();
|
|
|
| // Invoke a function which returns an object.
|
| @@ -1064,9 +1027,8 @@
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, writer.BytesWritten(), &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_EQ(Dart_CObject::kArray, root->type);
|
| EXPECT_EQ(kArrayLength, root->value.as_array.length);
|
| for (int i = 0; i < kArrayLength; i++) {
|
| @@ -1088,15 +1050,14 @@
|
|
|
| // Serialize the list into a message.
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| const Object& list = Object::Handle(Api::UnwrapHandle(result));
|
| - writer.WriteObject(list.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(list);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| // Read object back from the snapshot into a C structure.
|
| - return DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + return api_reader.ReadMessage();
|
| }
|
|
|
|
|
| @@ -1140,17 +1101,16 @@
|
| {
|
| Zone zone(Isolate::Current());
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| Smi& smi = Smi::Handle();
|
| smi ^= Api::UnwrapHandle(smi_result);
|
| - writer.WriteObject(smi.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(smi);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_NOTNULL(root);
|
| EXPECT_EQ(Dart_CObject::kInt32, root->type);
|
| EXPECT_EQ(42, root->value.as_int32);
|
| @@ -1159,17 +1119,16 @@
|
| {
|
| Zone zone(Isolate::Current());
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| Bigint& bigint = Bigint::Handle();
|
| bigint ^= Api::UnwrapHandle(bigint_result);
|
| - writer.WriteObject(bigint.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(bigint);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_NOTNULL(root);
|
| EXPECT_EQ(Dart_CObject::kBigint, root->type);
|
| EXPECT_STREQ("-424242424242424242424242424242424242",
|
| @@ -1179,17 +1138,16 @@
|
| {
|
| Zone zone(Isolate::Current());
|
| uint8_t* buffer;
|
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator);
|
| + MessageWriter writer(&buffer, &zone_allocator);
|
| String& str = String::Handle();
|
| str ^= Api::UnwrapHandle(string_result);
|
| - writer.WriteObject(str.raw());
|
| - writer.FinalizeBuffer();
|
| + writer.WriteMessage(str);
|
| + intptr_t buffer_len = writer.BytesWritten();
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| - Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize,
|
| - writer.BytesWritten(),
|
| - &zone_allocator);
|
| + ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
|
| + Dart_CObject* root = api_reader.ReadMessage();
|
| EXPECT_NOTNULL(root);
|
| EXPECT_EQ(Dart_CObject::kString, root->type);
|
| EXPECT_STREQ("Hello, world!", root->value.as_string);
|
|
|