Index: runtime/vm/snapshot_test.cc |
=================================================================== |
--- runtime/vm/snapshot_test.cc (revision 10993) |
+++ 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); |
@@ -491,52 +455,144 @@ |
TEST_CASE(SerializeSingletons) { |
- // Write snapshot with object content. |
uint8_t* buffer; |
- SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
- writer.WriteObject(Object::class_class()); |
- writer.WriteObject(Object::null_class()); |
- writer.WriteObject(Object::type_class()); |
- writer.WriteObject(Object::type_parameter_class()); |
- writer.WriteObject(Object::type_arguments_class()); |
- writer.WriteObject(Object::instantiated_type_arguments_class()); |
- writer.WriteObject(Object::function_class()); |
- writer.WriteObject(Object::field_class()); |
- writer.WriteObject(Object::token_stream_class()); |
- writer.WriteObject(Object::script_class()); |
- writer.WriteObject(Object::library_class()); |
- writer.WriteObject(Object::code_class()); |
- writer.WriteObject(Object::instructions_class()); |
- writer.WriteObject(Object::pc_descriptors_class()); |
- writer.WriteObject(Object::exception_handlers_class()); |
- writer.WriteObject(Object::context_class()); |
- writer.WriteObject(Object::context_scope_class()); |
- 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(Object::class_class() == reader.ReadObject()); |
- EXPECT(Object::null_class() == reader.ReadObject()); |
- EXPECT(Object::type_class() == reader.ReadObject()); |
- EXPECT(Object::type_parameter_class() == reader.ReadObject()); |
- EXPECT(Object::type_arguments_class() == reader.ReadObject()); |
- EXPECT(Object::instantiated_type_arguments_class() == reader.ReadObject()); |
- EXPECT(Object::function_class() == reader.ReadObject()); |
- EXPECT(Object::field_class() == reader.ReadObject()); |
- EXPECT(Object::token_stream_class() == reader.ReadObject()); |
- EXPECT(Object::script_class() == reader.ReadObject()); |
- EXPECT(Object::library_class() == reader.ReadObject()); |
- EXPECT(Object::code_class() == reader.ReadObject()); |
- EXPECT(Object::instructions_class() == reader.ReadObject()); |
- EXPECT(Object::pc_descriptors_class() == reader.ReadObject()); |
- EXPECT(Object::exception_handlers_class() == reader.ReadObject()); |
- EXPECT(Object::context_class() == reader.ReadObject()); |
- EXPECT(Object::context_scope_class() == reader.ReadObject()); |
- |
- free(buffer); |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::class_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::class_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::null_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::null_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::type_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::type_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::type_parameter_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::type_parameter_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::type_arguments_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::type_arguments_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage( |
+ Object::Handle(Object::instantiated_type_arguments_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::instantiated_type_arguments_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::function_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::function_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::field_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::field_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::token_stream_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::token_stream_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::script_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::script_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::library_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::library_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::code_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::code_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::instructions_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::instructions_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::pc_descriptors_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::pc_descriptors_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::exception_handlers_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::exception_handlers_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::context_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::context_class() == reader.ReadObject()); |
+ } |
+ { |
+ Zone zone(Isolate::Current()); |
+ MessageWriter writer(&buffer, &zone_allocator); |
+ writer.WriteMessage(Object::Handle(Object::context_scope_class())); |
+ SnapshotReader reader(buffer, writer.BytesWritten(), |
+ Snapshot::kMessage, Isolate::Current()); |
+ EXPECT(Object::context_scope_class() == reader.ReadObject()); |
+ } |
siva
2012/08/27 16:31:17
This has changed the model of the test itself. It
turnidge
2012/08/27 17:43:05
Yes, it has. I didn't think that putting them in
siva
2012/08/27 18:41:03
This test was trying to test both the singleton as
turnidge
2012/08/27 20:09:16
Ok, I've revert it to its original form.
On 2012/
|
} |
@@ -545,26 +601,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 +629,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 +637,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 +667,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 +696,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 +731,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 +756,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 +797,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 +901,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 +955,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 +1122,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 +1145,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 +1196,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 +1214,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 +1233,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); |