| Index: runtime/vm/snapshot_test.cc
|
| diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
|
| index b1e8af8f0486cf836ce64524afcf828b75db63d6..7a1db91409386969ad3d5dae62b2fda3066f77e6 100644
|
| --- a/runtime/vm/snapshot_test.cc
|
| +++ b/runtime/vm/snapshot_test.cc
|
| @@ -91,12 +91,12 @@ static void CompareDartCObjects(Dart_CObject* first, Dart_CObject* second) {
|
| case Dart_CObject::kString:
|
| EXPECT_STREQ(first->value.as_string, second->value.as_string);
|
| break;
|
| - case Dart_CObject::kUint8Array:
|
| - EXPECT_EQ(first->value.as_byte_array.length,
|
| - second->value.as_byte_array.length);
|
| - for (int i = 0; i < first->value.as_byte_array.length; i++) {
|
| - EXPECT_EQ(first->value.as_byte_array.values[i],
|
| - second->value.as_byte_array.values[i]);
|
| + case Dart_CObject::kTypedData:
|
| + EXPECT_EQ(first->value.as_typed_data.length,
|
| + second->value.as_typed_data.length);
|
| + for (int i = 0; i < first->value.as_typed_data.length; i++) {
|
| + EXPECT_EQ(first->value.as_typed_data.values[i],
|
| + second->value.as_typed_data.values[i]);
|
| }
|
| break;
|
| case Dart_CObject::kArray:
|
| @@ -612,30 +612,30 @@ TEST_CASE(SerializeByteArray) {
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| MessageWriter writer(&buffer, &zone_allocator);
|
| - const int kByteArrayLength = 256;
|
| - TypedData& byte_array = TypedData::Handle(
|
| - TypedData::New(kTypedDataUint8ArrayCid, kByteArrayLength));
|
| - for (int i = 0; i < kByteArrayLength; i++) {
|
| - byte_array.SetUint8(i, i);
|
| + const int kTypedDataLength = 256;
|
| + TypedData& typed_data = TypedData::Handle(
|
| + TypedData::New(kTypedDataUint8ArrayCid, kTypedDataLength));
|
| + for (int i = 0; i < kTypedDataLength; i++) {
|
| + typed_data.SetUint8(i, i);
|
| }
|
| - writer.WriteMessage(byte_array);
|
| + writer.WriteMessage(typed_data);
|
| intptr_t buffer_len = writer.BytesWritten();
|
|
|
| // Read object back from the snapshot.
|
| SnapshotReader reader(buffer, buffer_len,
|
| Snapshot::kMessage, Isolate::Current());
|
| - TypedData& serialized_byte_array = TypedData::Handle();
|
| - serialized_byte_array ^= reader.ReadObject();
|
| - EXPECT(serialized_byte_array.IsTypedData());
|
| + TypedData& serialized_typed_data = TypedData::Handle();
|
| + serialized_typed_data ^= reader.ReadObject();
|
| + EXPECT(serialized_typed_data.IsTypedData());
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| 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++) {
|
| - EXPECT(root->value.as_byte_array.values[i] == i);
|
| + EXPECT_EQ(Dart_CObject::kTypedData, root->type);
|
| + EXPECT_EQ(kTypedDataLength, root->value.as_typed_data.length);
|
| + for (int i = 0; i < kTypedDataLength; i++) {
|
| + EXPECT(root->value.as_typed_data.values[i] == i);
|
| }
|
| CheckEncodeDecodeMessage(root);
|
| }
|
| @@ -724,26 +724,27 @@ TEST_CASE(SerializeEmptyByteArray) {
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| MessageWriter writer(&buffer, &zone_allocator);
|
| - const int kByteArrayLength = 0;
|
| - TypedData& byte_array = TypedData::Handle(
|
| - TypedData::New(kTypedDataUint8ArrayCid, kByteArrayLength));
|
| - writer.WriteMessage(byte_array);
|
| + const int kTypedDataLength = 0;
|
| + TypedData& typed_data = TypedData::Handle(
|
| + TypedData::New(kTypedDataUint8ArrayCid, kTypedDataLength));
|
| + writer.WriteMessage(typed_data);
|
| intptr_t buffer_len = writer.BytesWritten();
|
|
|
| // Read object back from the snapshot.
|
| SnapshotReader reader(buffer, buffer_len,
|
| Snapshot::kMessage, Isolate::Current());
|
| - TypedData& serialized_byte_array = TypedData::Handle();
|
| - serialized_byte_array ^= reader.ReadObject();
|
| - EXPECT(serialized_byte_array.IsTypedData());
|
| + TypedData& serialized_typed_data = TypedData::Handle();
|
| + serialized_typed_data ^= reader.ReadObject();
|
| + EXPECT(serialized_typed_data.IsTypedData());
|
|
|
| // Read object back from the snapshot into a C structure.
|
| ApiNativeScope scope;
|
| 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);
|
| + EXPECT_EQ(Dart_CObject::kTypedData, root->type);
|
| + EXPECT_EQ(Dart_CObject::kUint8Array, root->value.as_typed_data.type);
|
| + EXPECT_EQ(kTypedDataLength, root->value.as_typed_data.length);
|
| + EXPECT(root->value.as_typed_data.values == NULL);
|
| CheckEncodeDecodeMessage(root);
|
| }
|
|
|
| @@ -1908,8 +1909,9 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
|
| for (int i = 0; i < kArrayLength; i++) {
|
| Dart_CObject* element = root->value.as_array.values[i];
|
| EXPECT_EQ(root->value.as_array.values[0], element);
|
| - EXPECT_EQ(Dart_CObject::kUint8Array, element->type);
|
| - EXPECT_EQ(256, element->value.as_byte_array.length);
|
| + EXPECT_EQ(Dart_CObject::kTypedData, element->type);
|
| + EXPECT_EQ(Dart_CObject::kUint8Array, element->value.as_typed_data.type);
|
| + EXPECT_EQ(256, element->value.as_typed_data.length);
|
| }
|
| }
|
| {
|
| @@ -1923,10 +1925,11 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
|
| for (int i = 0; i < kArrayLength; i++) {
|
| Dart_CObject* element = root->value.as_array.values[i];
|
| EXPECT_EQ(root->value.as_array.values[0], element);
|
| - EXPECT_EQ(Dart_CObject::kUint8Array, element->type);
|
| - EXPECT_EQ(128, element->value.as_byte_array.length);
|
| - EXPECT_EQ(1, element->value.as_byte_array.values[0]);
|
| - EXPECT_EQ(0, element->value.as_byte_array.values[1]);
|
| + EXPECT_EQ(Dart_CObject::kTypedData, element->type);
|
| + EXPECT_EQ(Dart_CObject::kUint8Array, element->value.as_typed_data.type);
|
| + EXPECT_EQ(128, element->value.as_typed_data.length);
|
| + EXPECT_EQ(1, element->value.as_typed_data.values[0]);
|
| + EXPECT_EQ(0, element->value.as_typed_data.values[1]);
|
| }
|
| }
|
| {
|
| @@ -2110,8 +2113,9 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) {
|
| for (int i = 0; i < kArrayLength; i++) {
|
| Dart_CObject* element = root->value.as_array.values[i];
|
| EXPECT_EQ(root->value.as_array.values[0], element);
|
| - EXPECT_EQ(Dart_CObject::kUint8Array, element->type);
|
| - EXPECT_EQ(256, element->value.as_byte_array.length);
|
| + EXPECT_EQ(Dart_CObject::kTypedData, element->type);
|
| + EXPECT_EQ(Dart_CObject::kUint8Array, element->value.as_typed_data.type);
|
| + EXPECT_EQ(256, element->value.as_typed_data.length);
|
| }
|
| }
|
| {
|
| @@ -2125,10 +2129,11 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) {
|
| for (int i = 0; i < kArrayLength; i++) {
|
| Dart_CObject* element = root->value.as_array.values[i];
|
| EXPECT_EQ(root->value.as_array.values[0], element);
|
| - EXPECT_EQ(Dart_CObject::kUint8Array, element->type);
|
| - EXPECT_EQ(128, element->value.as_byte_array.length);
|
| - EXPECT_EQ(1, element->value.as_byte_array.values[0]);
|
| - EXPECT_EQ(0, element->value.as_byte_array.values[1]);
|
| + EXPECT_EQ(Dart_CObject::kTypedData, element->type);
|
| + EXPECT_EQ(Dart_CObject::kUint8Array, element->value.as_typed_data.type);
|
| + EXPECT_EQ(128, element->value.as_typed_data.length);
|
| + EXPECT_EQ(1, element->value.as_typed_data.values[0]);
|
| + EXPECT_EQ(0, element->value.as_typed_data.values[1]);
|
| }
|
| }
|
| {
|
| @@ -2170,6 +2175,109 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) {
|
| }
|
|
|
|
|
| +static void CheckTypedData(Dart_CObject* object,
|
| + Dart_CObject::TypedDataType typed_data_type,
|
| + int len) {
|
| + EXPECT_EQ(Dart_CObject::kTypedData, object->type);
|
| + EXPECT_EQ(typed_data_type, object->value.as_typed_data.type);
|
| + EXPECT_EQ(len, object->value.as_typed_data.length);
|
| +}
|
| +
|
| +UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) {
|
| + const int kArrayLength = 10;
|
| + static const char* kScriptChars =
|
| + "import 'dart:typeddata';\n"
|
| + "final int kArrayLength = 10;\n"
|
| + "getTypedDataList() {\n"
|
| + " var list = new List(kArrayLength);\n"
|
| + " list[0] = new Int8List(256);\n"
|
| + " list[1] = new Uint8List(256);\n"
|
| + " list[2] = new Int16List(256);\n"
|
| + " list[3] = new Uint16List(256);\n"
|
| + " return list;\n"
|
| + "}\n"
|
| + "getTypedDataViewList() {\n"
|
| + " var list = new List(kArrayLength);\n"
|
| + " list[0] = new Int8List.view(new Int8List(256));\n"
|
| + " list[1] = new Uint8List.view(new Uint8List(256));\n"
|
| + " list[2] = new Int16List.view(new Int16List(256));\n"
|
| + " list[3] = new Uint16List.view(new Uint16List(256));\n"
|
| + " list[4] = new Int8List.view(new Int16List(256));\n"
|
| + " list[5] = new Uint8List.view(new Uint16List(256));\n"
|
| + " list[6] = new Int16List.view(new Int8List(256));\n"
|
| + " list[7] = new Uint16List.view(new Uint8List(256));\n"
|
| + " return list;\n"
|
| + "}\n";
|
| +
|
| + TestCase::CreateTestIsolate();
|
| + Isolate* isolate = Isolate::Current();
|
| + EXPECT(isolate != NULL);
|
| + Dart_EnterScope();
|
| +
|
| + Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
|
| + EXPECT_VALID(lib);
|
| +
|
| + {
|
| + DARTSCOPE(isolate);
|
| + {
|
| + // Generate a list of Uint8Lists from Dart code.
|
| + ApiNativeScope scope;
|
| + Dart_CObject* root = GetDeserializedDartMessage(lib, "getTypedDataList");
|
| + EXPECT_NOTNULL(root);
|
| + EXPECT_EQ(Dart_CObject::kArray, root->type);
|
| + EXPECT_EQ(kArrayLength, root->value.as_array.length);
|
| + CheckTypedData(root->value.as_array.values[0],
|
| + Dart_CObject::kInt8Array,
|
| + 256);
|
| + CheckTypedData(root->value.as_array.values[1],
|
| + Dart_CObject::kUint8Array,
|
| + 256);
|
| + CheckTypedData(root->value.as_array.values[2],
|
| + Dart_CObject::kInt16Array,
|
| + 512);
|
| + CheckTypedData(root->value.as_array.values[3],
|
| + Dart_CObject::kUint16Array,
|
| + 512);
|
| + }
|
| + {
|
| + // Generate a list of Uint8List views from Dart code.
|
| + ApiNativeScope scope;
|
| + Dart_CObject* root =
|
| + GetDeserializedDartMessage(lib, "getTypedDataViewList");
|
| + EXPECT_NOTNULL(root);
|
| + EXPECT_EQ(Dart_CObject::kArray, root->type);
|
| + EXPECT_EQ(kArrayLength, root->value.as_array.length);
|
| + CheckTypedData(root->value.as_array.values[0],
|
| + Dart_CObject::kInt8Array,
|
| + 256);
|
| + CheckTypedData(root->value.as_array.values[1],
|
| + Dart_CObject::kUint8Array,
|
| + 256);
|
| + CheckTypedData(root->value.as_array.values[2],
|
| + Dart_CObject::kInt16Array,
|
| + 512);
|
| + CheckTypedData(root->value.as_array.values[3],
|
| + Dart_CObject::kUint16Array,
|
| + 512);
|
| + CheckTypedData(root->value.as_array.values[4],
|
| + Dart_CObject::kInt8Array,
|
| + 512);
|
| + CheckTypedData(root->value.as_array.values[5],
|
| + Dart_CObject::kUint8Array,
|
| + 512);
|
| + CheckTypedData(root->value.as_array.values[6],
|
| + Dart_CObject::kInt16Array,
|
| + 256);
|
| + CheckTypedData(root->value.as_array.values[7],
|
| + Dart_CObject::kUint16Array,
|
| + 256);
|
| + }
|
| + }
|
| + Dart_ExitScope();
|
| + Dart_ShutdownIsolate();
|
| +}
|
| +
|
| +
|
| UNIT_TEST_CASE(PostCObject) {
|
| // Create a native port for posting from C to Dart
|
| TestIsolateScope __test_isolate__;
|
|
|