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

Unified Diff: runtime/vm/snapshot_test.cc

Issue 1191443008: Assert no VM handles are created in the zone that belongs to a ApiNativeScopes. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Descrease scopes, ASSERT on handle allocation Created 5 years, 6 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 | « runtime/vm/handles.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/snapshot_test.cc
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index 58ec2950b9ae348973d385223aaa271d09c1eb21..3933f3dc526c486ee24e71d9f97b597e0c6c30cd 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -241,13 +241,17 @@ Dart_CObject* SerializeAndDeserializeMint(const Mint& mint) {
writer.WriteMessage(mint);
intptr_t buffer_len = writer.BytesWritten();
- // Read object back from the snapshot.
- MessageSnapshotReader reader(buffer,
- buffer_len,
- Isolate::Current(),
- Thread::Current()->zone());
- const Object& serialized_object = Object::Handle(reader.ReadObject());
- EXPECT(serialized_object.IsMint());
+ {
+ // Switch to a regular zone, where VM handle allocation is allowed.
+ StackZone zone(Isolate::Current());
+ // Read object back from the snapshot.
+ MessageSnapshotReader reader(buffer,
+ buffer_len,
+ Isolate::Current(),
+ Thread::Current()->zone());
+ const Object& serialized_object = Object::Handle(reader.ReadObject());
+ EXPECT(serialized_object.IsMint());
+ }
// Read object back from the snapshot into a C structure.
ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
@@ -441,18 +445,22 @@ Dart_CObject* SerializeAndDeserializeBigint(const Bigint& bigint) {
writer.WriteMessage(bigint);
intptr_t buffer_len = writer.BytesWritten();
- // Read object back from the snapshot.
- MessageSnapshotReader reader(buffer,
- buffer_len,
- Isolate::Current(),
- Thread::Current()->zone());
- Bigint& serialized_bigint = Bigint::Handle();
- serialized_bigint ^= reader.ReadObject();
- const char* str1 = bigint.ToHexCString(allocator);
- const char* str2 = serialized_bigint.ToHexCString(allocator);
- EXPECT_STREQ(str1, str2);
- free(const_cast<char*>(str1));
- free(const_cast<char*>(str2));
+ {
+ // Switch to a regular zone, where VM handle allocation is allowed.
+ StackZone zone(Isolate::Current());
+ // Read object back from the snapshot.
+ MessageSnapshotReader reader(buffer,
+ buffer_len,
+ Isolate::Current(),
+ Thread::Current()->zone());
+ Bigint& serialized_bigint = Bigint::Handle();
+ serialized_bigint ^= reader.ReadObject();
+ const char* str1 = bigint.ToHexCString(allocator);
+ const char* str2 = serialized_bigint.ToHexCString(allocator);
+ EXPECT_STREQ(str1, str2);
+ free(const_cast<char*>(str1));
+ free(const_cast<char*>(str2));
+ }
// Read object back from the snapshot into a C structure.
ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
@@ -466,10 +474,9 @@ Dart_CObject* SerializeAndDeserializeBigint(const Bigint& bigint) {
void CheckBigint(const char* bigint_value) {
StackZone zone(Isolate::Current());
- ApiNativeScope scope;
-
Bigint& bigint = Bigint::Handle();
bigint ^= Bigint::NewFromCString(bigint_value);
+ ApiNativeScope scope;
Dart_CObject* bigint_cobject = SerializeAndDeserializeBigint(bigint);
EXPECT_EQ(Dart_CObject_kBigint, bigint_cobject->type);
char* hex_value = TestCase::BigintToHexValue(bigint_cobject);
@@ -1589,21 +1596,26 @@ TEST_CASE(IntArrayMessage) {
}
-// Helper function to call a top level Dart function, serialize the
-// result and deserialize the result into a Dart_CObject structure.
-static Dart_CObject* GetDeserializedDartMessage(Dart_Handle lib,
- const char* dart_function) {
+// Helper function to call a top level Dart function and serialize the result.
+static uint8_t* GetSerialized(Dart_Handle lib,
+ const char* dart_function,
+ intptr_t* buffer_len) {
Dart_Handle result;
result = Dart_Invoke(lib, NewString(dart_function), 0, NULL);
EXPECT_VALID(result);
+ Object& obj = Object::Handle(Api::UnwrapHandle(result));
- // Serialize the list into a message.
- const Object& list = Object::Handle(Api::UnwrapHandle(result));
+ // Serialize the object into a message.
uint8_t* buffer;
MessageWriter writer(&buffer, &zone_allocator, false);
- writer.WriteMessage(list);
- intptr_t buffer_len = writer.BytesWritten();
+ writer.WriteMessage(obj);
+ *buffer_len = writer.BytesWritten();
+ return buffer;
+}
+
+// Helper function to deserialize the result into a Dart_CObject structure.
+static Dart_CObject* GetDeserialized(uint8_t* buffer, intptr_t buffer_len) {
// Read object back from the snapshot into a C structure.
ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator);
return api_reader.ReadMessage();
@@ -1831,10 +1843,13 @@ UNIT_TEST_CASE(DartGeneratedListMessages) {
{
DARTSCOPE(isolate);
+ StackZone zone(isolate);
+ intptr_t buf_len = 0;
{
// Generate a list of nulls from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -1845,8 +1860,9 @@ UNIT_TEST_CASE(DartGeneratedListMessages) {
}
{
// Generate a list of ints from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getIntList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getIntList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -1858,8 +1874,9 @@ UNIT_TEST_CASE(DartGeneratedListMessages) {
}
{
// Generate a list of strings from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getStringList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getStringList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -1872,8 +1889,9 @@ UNIT_TEST_CASE(DartGeneratedListMessages) {
}
{
// Generate a list of objects of different types from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getMixedList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -1949,10 +1967,13 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessages) {
{
DARTSCOPE(isolate);
+ StackZone zone(isolate);
+ intptr_t buf_len = 0;
{
// Generate a list of nulls from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -1963,8 +1984,9 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessages) {
}
{
// Generate a list of ints from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getIntList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getIntList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -1976,8 +1998,9 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessages) {
}
{
// Generate a list of strings from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getStringList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getStringList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -1990,8 +2013,9 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessages) {
}
{
// Generate a list of lists from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getListList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getListList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2008,8 +2032,9 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessages) {
}
{
// Generate a list of objects of different types from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getMixedList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2181,11 +2206,13 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
{
DARTSCOPE(isolate);
-
+ StackZone zone(isolate);
+ intptr_t buf_len = 0;
{
// Generate a list of strings from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getStringList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getStringList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2198,8 +2225,9 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
}
{
// Generate a list of medium ints from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getMintList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getMintList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2212,8 +2240,9 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
}
{
// Generate a list of bigints from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getBigintList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getBigintList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2228,8 +2257,9 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
}
{
// Generate a list of doubles from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getDoubleList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getDoubleList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2246,8 +2276,9 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
}
{
// Generate a list of Uint8Lists from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getTypedDataList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getTypedDataList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2261,9 +2292,9 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
}
{
// Generate a list of Uint8List views from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getTypedDataViewList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root =
- GetDeserializedDartMessage(lib, "getTypedDataViewList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2279,8 +2310,9 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
}
{
// Generate a list of objects of different types from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getMixedList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2306,8 +2338,9 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
}
{
// Generate a list of objects of different types from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getSelfRefList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getSelfRefList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2398,10 +2431,13 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) {
{
DARTSCOPE(isolate);
+ StackZone zone(isolate);
+ intptr_t buf_len = 0;
{
// Generate a list of strings from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getStringList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getStringList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2414,8 +2450,9 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) {
}
{
// Generate a list of medium ints from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getMintList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getMintList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2428,8 +2465,9 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) {
}
{
// Generate a list of bigints from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getBigintList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getBigintList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2444,8 +2482,9 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) {
}
{
// Generate a list of doubles from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getDoubleList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getDoubleList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2463,8 +2502,9 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) {
}
{
// Generate a list of Uint8Lists from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getTypedDataList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getTypedDataList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2478,9 +2518,9 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) {
}
{
// Generate a list of Uint8List views from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getTypedDataViewList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root =
- GetDeserializedDartMessage(lib, "getTypedDataViewList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2496,8 +2536,9 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) {
}
{
// Generate a list of objects of different types from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getMixedList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2523,8 +2564,9 @@ UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) {
}
{
// Generate a list of objects of different types from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getSelfRefList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getSelfRefList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
EXPECT_EQ(kArrayLength, root->value.as_array.length);
@@ -2630,10 +2672,13 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) {
{
DARTSCOPE(isolate);
+ StackZone zone(isolate);
+ intptr_t buf_len = 0;
{
// Generate a list of Uint8Lists from Dart code.
+ uint8_t* buf = GetSerialized(lib, "getTypedDataList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root = GetDeserializedDartMessage(lib, "getTypedDataList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
struct {
@@ -2664,10 +2709,9 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) {
}
{
// Generate a list of Uint8List views from Dart code.
-
+ uint8_t* buf = GetSerialized(lib, "getTypedDataViewList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root =
- GetDeserializedDartMessage(lib, "getTypedDataViewList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
struct {
@@ -2721,9 +2765,10 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) {
}
{
// Generate a list of Uint8Lists from Dart code.
+ uint8_t* buf =
+ GetSerialized(lib, "getMultipleTypedDataViewList", &buf_len);
ApiNativeScope scope;
- Dart_CObject* root =
- GetDeserializedDartMessage(lib, "getMultipleTypedDataViewList");
+ Dart_CObject* root = GetDeserialized(buf, buf_len);
EXPECT_NOTNULL(root);
EXPECT_EQ(Dart_CObject_kArray, root->type);
struct {
« no previous file with comments | « runtime/vm/handles.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698