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

Unified Diff: runtime/vm/dart_api_impl_test.cc

Issue 1459173004: Remove support for object grouping during Garbage Collection (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: code-review Created 5 years, 1 month 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/dart_api_impl.cc ('k') | runtime/vm/dart_api_state.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/dart_api_impl_test.cc
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 6e22c617e8d77f4cc238b477977424de30af2159..6f4d1587f623cfc9c2f040498801015cdd1e3bc5 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -2753,7 +2753,6 @@ TEST_CASE(WeakPersistentHandleExternalAllocationSize) {
kWeak1ExternalSize,
NopCallback);
EXPECT_VALID(AsHandle(weak1));
- EXPECT(!Dart_IsPrologueWeakPersistentHandle(weak1));
Dart_ExitScope();
}
Dart_PersistentHandle strong_ref = NULL;
@@ -2788,33 +2787,6 @@ TEST_CASE(WeakPersistentHandleExternalAllocationSize) {
}
-TEST_CASE(PrologueWeakPersistentHandleExternalAllocationSize) {
- Heap* heap = Isolate::Current()->heap();
- EXPECT(heap->ExternalInWords(Heap::kNew) == 0);
- EXPECT(heap->ExternalInWords(Heap::kOld) == 0);
- Dart_WeakPersistentHandle pwph = NULL;
- static const intptr_t kWeakExternalSize = 1 * KB;
- {
- Dart_EnterScope();
- Dart_Handle obj = NewString("a string");
- EXPECT_VALID(obj);
- pwph = Dart_NewPrologueWeakPersistentHandle(
- obj, NULL, kWeakExternalSize, NopCallback);
- EXPECT_VALID(AsHandle(pwph));
- Dart_ExitScope();
- }
- EXPECT(heap->ExternalInWords(Heap::kNew) == kWeakExternalSize / kWordSize);
- EXPECT(heap->ExternalInWords(Heap::kOld) == 0);
- // Promoting the string should transfer the external size to old.
- GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks);
- GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks);
- EXPECT(heap->ExternalInWords(Heap::kNew) == 0);
- EXPECT(heap->ExternalInWords(Heap::kOld) == kWeakExternalSize / kWordSize);
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- EXPECT(heap->ExternalInWords(Heap::kOld) == 0);
-}
-
-
TEST_CASE(WeakPersistentHandleExternalAllocationSizeNewspaceGC) {
Dart_Isolate isolate = reinterpret_cast<Dart_Isolate>(Isolate::Current());
Heap* heap = Isolate::Current()->heap();
@@ -2927,402 +2899,6 @@ TEST_CASE(WeakPersistentHandleExternalAllocationSizeOddReferents) {
static Dart_WeakPersistentHandle weak1 = NULL;
static Dart_WeakPersistentHandle weak2 = NULL;
static Dart_WeakPersistentHandle weak3 = NULL;
-static Dart_WeakPersistentHandle weak4 = NULL;
-
-
-static void ObjectGroupsCallback(void* isolate_callback_data,
- Dart_WeakPersistentHandle handle,
- void* peer) {
- if (handle == weak1) {
- weak1 = NULL;
- } else if (handle == weak2) {
- weak2 = NULL;
- } else if (handle == weak3) {
- weak3 = NULL;
- } else if (handle == weak4) {
- weak4 = NULL;
- }
-}
-
-
-TEST_CASE(ObjectGroups) {
- Dart_PersistentHandle strong = NULL;
- Dart_WeakPersistentHandle strong_weak = NULL;
-
- Dart_EnterScope();
- {
- Isolate* isolate = Isolate::Current();
- DARTSCOPE(Thread::Current());
-
- Dart_Handle local = Api::NewHandle(
- isolate, String::New("strongly reachable", Heap::kOld));
- strong = Dart_NewPersistentHandle(local);
- strong_weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NopCallback);
- EXPECT_VALID(AsHandle(strong));
- EXPECT(!Dart_IsNull(AsHandle(strong)));
-
- weak1 = Dart_NewWeakPersistentHandle(
- Api::NewHandle(isolate, String::New("weakly reachable 1", Heap::kOld)),
- NULL, 0, ObjectGroupsCallback);
- EXPECT_VALID(AsHandle(weak1));
- EXPECT(!Dart_IsNull(AsHandle(weak1)));
-
- weak2 = Dart_NewWeakPersistentHandle(
- Api::NewHandle(isolate, String::New("weakly reachable 2", Heap::kOld)),
- NULL, 0, ObjectGroupsCallback);
- EXPECT_VALID(AsHandle(weak2));
- EXPECT(!Dart_IsNull(AsHandle(weak2)));
-
- weak3 = Dart_NewWeakPersistentHandle(
- Api::NewHandle(isolate, String::New("weakly reachable 3", Heap::kOld)),
- NULL, 0, ObjectGroupsCallback);
- EXPECT_VALID(AsHandle(weak3));
- EXPECT(!Dart_IsNull(AsHandle(weak3)));
-
- weak4 = Dart_NewWeakPersistentHandle(
- Api::NewHandle(isolate, String::New("weakly reachable 4", Heap::kOld)),
- NULL, 0, ObjectGroupsCallback);
- EXPECT_VALID(AsHandle(weak4));
- EXPECT(!Dart_IsNull(AsHandle(weak4)));
- }
- Dart_ExitScope();
-
- {
- Dart_EnterScope();
- EXPECT_VALID(AsHandle(strong));
- EXPECT_VALID(AsHandle(weak1));
- EXPECT_VALID(AsHandle(weak2));
- EXPECT_VALID(AsHandle(weak3));
- EXPECT_VALID(AsHandle(weak4));
- Dart_ExitScope();
- }
-
- GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks);
-
- {
- Dart_EnterScope();
- // New space collection should not affect old space objects
- EXPECT(!Dart_IsNull(AsHandle(weak1)));
- EXPECT(!Dart_IsNull(AsHandle(weak2)));
- EXPECT(!Dart_IsNull(AsHandle(weak3)));
- EXPECT(!Dart_IsNull(AsHandle(weak4)));
- Dart_ExitScope();
- }
-
- {
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder();
- EXPECT_NOTNULL(builder);
-
- Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak));
-
- set = Dart_NewWeakReferenceSet(builder, weak2, weak2);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak1, weak1));
-
- set = Dart_NewWeakReferenceSet(builder, weak3, weak3);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak2, weak2));
-
- set = Dart_NewWeakReferenceSet(builder, weak4, weak4);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak3));
-
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- }
-
- {
- Dart_EnterScope();
- // All weak references should be preserved.
- EXPECT(!Dart_IsNull(AsHandle(strong_weak)));
- EXPECT(!Dart_IsNull(AsHandle(weak1)));
- EXPECT(!Dart_IsNull(AsHandle(weak2)));
- EXPECT(!Dart_IsNull(AsHandle(weak3)));
- EXPECT(!Dart_IsNull(AsHandle(weak4)));
- Dart_ExitScope();
- }
-
- {
- Dart_EnterScope();
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder();
- EXPECT_NOTNULL(builder);
-
- Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak));
-
- set = Dart_NewWeakReferenceSet(builder, weak2, weak2);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak1, weak1));
-
- set = Dart_NewWeakReferenceSet(builder, weak2, weak2);
- EXPECT_NOTNULL(set);
-
- // Strong reference to weak3 to retain weak3 and weak4.
- Dart_PersistentHandle weak3_strong_ref =
- Dart_NewPersistentHandle(AsHandle(weak3));
- EXPECT_VALID(AsHandle(weak3_strong_ref));
-
- set = Dart_NewWeakReferenceSet(builder, weak4, weak4);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak3));
-
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
-
- // Delete strong reference to weak3.
- Dart_DeletePersistentHandle(weak3_strong_ref);
- Dart_ExitScope();
- }
-
- {
- Dart_EnterScope();
- // All weak references should be preserved.
- EXPECT(!Dart_IsNull(AsHandle(strong_weak)));
- EXPECT(!Dart_IsNull(AsHandle(weak1)));
- EXPECT(!Dart_IsNull(AsHandle(weak2)));
- EXPECT(!Dart_IsNull(AsHandle(weak3)));
- EXPECT(!Dart_IsNull(AsHandle(weak4)));
- Dart_ExitScope();
- }
-
- {
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder();
- EXPECT_NOTNULL(builder);
-
- Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak));
-
- set = Dart_NewWeakReferenceSet(builder, weak2, weak2);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak1, weak1));
-
- set = Dart_NewWeakReferenceSet(builder, weak2, weak2);
- EXPECT_NOTNULL(set);
-
- set = Dart_NewWeakReferenceSet(builder, weak4, weak4);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak3));
-
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- }
-
- {
- Dart_EnterScope();
- // Only weak1 and weak2 should be preserved.
- EXPECT(!Dart_IsNull(AsHandle(strong_weak)));
- EXPECT(!Dart_IsNull(AsHandle(weak1)));
- EXPECT(!Dart_IsNull(AsHandle(weak2)));
- EXPECT(weak3 == NULL);
- EXPECT(weak4 == NULL);
- Dart_ExitScope();
- }
-
- {
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder();
- EXPECT_NOTNULL(builder);
-
- Dart_WeakPersistentHandle lweak3 = Dart_NewWeakPersistentHandle(
- Dart_Null(), NULL, 0, NopCallback);
-
- Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak1, weak1);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, strong_weak, strong_weak));
-
- // lweak3 is unreferenced so weak2 is unreferenced and should be cleared
- set = Dart_NewWeakReferenceSet(builder, weak2, weak2);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak3, lweak3));
-
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- }
-
- {
- Dart_EnterScope();
- // Only weak1 should be preserved, weak3 should not preserve weak2.
- EXPECT(!Dart_IsNull(AsHandle(strong_weak)));
- EXPECT(!Dart_IsNull(AsHandle(weak1)));
- EXPECT(weak2 == NULL);
- EXPECT(weak3 == NULL); // was cleared, should remain cleared
- EXPECT(weak4 == NULL); // was cleared, should remain cleared
- Dart_ExitScope();
- }
-
- {
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder();
- EXPECT_NOTNULL(builder);
-
- Dart_WeakPersistentHandle lweak2 = Dart_NewWeakPersistentHandle(
- Dart_Null(), NULL, 0, NopCallback);
- Dart_WeakPersistentHandle lweak3 = Dart_NewWeakPersistentHandle(
- Dart_Null(), NULL, 0, NopCallback);
- Dart_WeakPersistentHandle lweak4 = Dart_NewWeakPersistentHandle(
- Dart_Null(), NULL, 0, NopCallback);
- // lweak{2,3,4} are cleared and should have no effect on weak1
- Dart_WeakReferenceSet set =
- Dart_NewWeakReferenceSet(builder, strong_weak, strong_weak);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak2, lweak2));
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak3, lweak3));
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, lweak4, lweak4));
-
- // weak1 is weakly reachable and should be cleared
- set = Dart_NewWeakReferenceSet(builder, weak1, weak1);
- EXPECT_NOTNULL(set);
-
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- }
-
- {
- Dart_EnterScope();
- // All weak references should now be cleared.
- EXPECT(!Dart_IsNull(AsHandle(strong_weak)));
- EXPECT(weak1 == NULL);
- EXPECT(weak2 == NULL);
- EXPECT(weak3 == NULL);
- EXPECT(weak4 == NULL);
- Dart_ExitScope();
- }
-}
-
-
-TEST_CASE(DuplicateWeakReferenceSetEntries) {
- Isolate* isolate = Isolate::Current();
- Dart_PersistentHandle strong = NULL;
- Dart_WeakPersistentHandle weak = NULL; // A weak handle to strong.
-
- Dart_EnterScope();
- {
- DARTSCOPE(Thread::Current());
-
- // Strong handle to keep the reference set alive.
- Dart_Handle local = Api::NewHandle(isolate, String::New("string"));
- strong = Dart_NewPersistentHandle(local);
- EXPECT_VALID(AsHandle(strong));
- EXPECT(!Dart_IsNull(AsHandle(strong)));
- // Corresponding weak handle to use as key and duplicated value.
- weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NopCallback);
- EXPECT_VALID(AsHandle(weak));
- EXPECT(!Dart_IsNull(AsHandle(weak)));
- }
- Dart_ExitScope();
-
- {
- Dart_EnterScope();
- // Create the weak reference set.
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder();
- EXPECT_NOTNULL(builder);
- // Register the key and the first copy of the value.
- Dart_WeakReferenceSet set = Dart_NewWeakReferenceSet(builder, weak, weak);
- EXPECT_NOTNULL(set);
- // Add the second copy of the value.
- Dart_Handle result = Dart_AppendValueToWeakReferenceSet(set, weak);
- EXPECT_VALID(result);
-
- // Trigger GC to ensure that we can visit duplicate entries in weak
- // reference sets.
- isolate->heap()->CollectGarbage(Heap::kNew);
- Dart_ExitScope();
- }
-}
-
-
-static Dart_WeakPersistentHandle old_pwph = NULL;
-static Dart_WeakPersistentHandle new_pwph = NULL;
-
-
-static void PrologueWeakHandleCallback(void* isolate_callback_data,
- Dart_WeakPersistentHandle handle,
- void* peer) {
- if (handle == old_pwph) {
- old_pwph = NULL;
- } else if (handle == new_pwph) {
- new_pwph = NULL;
- }
-}
-
-
-TEST_CASE(PrologueWeakPersistentHandles) {
- Dart_EnterScope();
- {
- Isolate* isolate = Isolate::Current();
- DARTSCOPE(Thread::Current());
- new_pwph = Dart_NewPrologueWeakPersistentHandle(
- Api::NewHandle(isolate,
- String::New("new space prologue weak", Heap::kNew)),
- NULL, 0, PrologueWeakHandleCallback);
- EXPECT_VALID(AsHandle(new_pwph));
- EXPECT(!Dart_IsNull(AsHandle(new_pwph)));
- old_pwph = Dart_NewPrologueWeakPersistentHandle(
- Api::NewHandle(isolate,
- String::New("old space prologue weak", Heap::kOld)),
- NULL, 0, PrologueWeakHandleCallback);
- EXPECT_VALID(AsHandle(old_pwph));
- EXPECT(!Dart_IsNull(AsHandle(old_pwph)));
- }
- Dart_ExitScope();
-
- {
- Dart_EnterScope();
- EXPECT_VALID(AsHandle(new_pwph));
- EXPECT(!Dart_IsNull(AsHandle(new_pwph)));
- EXPECT(Dart_IsPrologueWeakPersistentHandle(new_pwph));
- EXPECT_VALID(AsHandle(old_pwph));
- EXPECT(!Dart_IsNull(AsHandle(old_pwph)));
- EXPECT(Dart_IsPrologueWeakPersistentHandle(old_pwph));
- Dart_ExitScope();
- }
-
- // Garbage collect new space without invoking API callbacks.
- GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks);
-
- {
- Dart_EnterScope();
- // Both prologue weak handles should be preserved.
- EXPECT(!Dart_IsNull(AsHandle(new_pwph)));
- EXPECT(!Dart_IsNull(AsHandle(old_pwph)));
- Dart_ExitScope();
- }
-
- // Garbage collect old space without invoking API callbacks.
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld,
- Heap::kIgnoreApiCallbacks,
- Heap::kGCTestCase);
-
- {
- Dart_EnterScope();
- // Both prologue weak handles should be preserved.
- EXPECT(!Dart_IsNull(AsHandle(new_pwph)));
- EXPECT(!Dart_IsNull(AsHandle(old_pwph)));
- Dart_ExitScope();
- }
-
- // Garbage collect new space invoking API callbacks.
- GCTestHelper::CollectNewSpace(Heap::kInvokeApiCallbacks);
-
- {
- Dart_EnterScope();
- // The prologue weak handle with a new space referent should now be
- // cleared. The old space referent should be preserved.
- EXPECT(new_pwph == NULL);
- EXPECT(!Dart_IsNull(AsHandle(old_pwph)));
- Dart_ExitScope();
- }
-
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld,
- Heap::kInvokeApiCallbacks,
- Heap::kGCTestCase);
-
- {
- Dart_EnterScope();
- // The prologue weak handle with an old space referent should now be
- // cleared. The new space referent should remain cleared.
- EXPECT(new_pwph == NULL);
- EXPECT(old_pwph == NULL);
- Dart_ExitScope();
- }
-}
static void ImplicitReferencesCallback(void* isolate_callback_data,
@@ -3398,53 +2974,6 @@ TEST_CASE(ImplicitReferencesOldSpace) {
EXPECT(!Dart_IsNull(AsHandle(weak3)));
Dart_ExitScope();
}
-
- // A strongly referenced key should preserve all the values.
- {
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder();
- EXPECT_NOTNULL(builder);
-
- Dart_WeakReferenceSet set =
- Dart_NewWeakReferenceSet(builder, strong_weak, 0);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak1));
- EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak2));
- EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak3));
-
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- }
-
- {
- Dart_EnterScope();
- // All weak references should be preserved.
- EXPECT_VALID(AsHandle(strong_weak));
- EXPECT(!Dart_IsNull(AsHandle(weak1)));
- EXPECT(!Dart_IsNull(AsHandle(weak2)));
- EXPECT(!Dart_IsNull(AsHandle(weak3)));
- Dart_ExitScope();
- }
-
- // Key membership does not imply a strong reference.
- {
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder();
- EXPECT_NOTNULL(builder);
-
- Dart_WeakReferenceSet set =
- Dart_NewWeakReferenceSet(builder, strong_weak, weak1);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendToWeakReferenceSet(set, weak3, weak2));
-
- Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
- }
-
- {
- Dart_EnterScope();
- // All weak references except weak3 should be preserved.
- EXPECT(!Dart_IsNull(AsHandle(weak1)));
- EXPECT(!Dart_IsNull(AsHandle(weak2)));
- EXPECT(weak3 == NULL);
- Dart_ExitScope();
- }
}
@@ -3508,41 +3037,6 @@ TEST_CASE(ImplicitReferencesNewSpace) {
EXPECT(!Dart_IsNull(AsHandle(weak3)));
Dart_ExitScope();
}
-
- // A strongly referenced key should preserve all the values.
- {
- Dart_WeakReferenceSetBuilder builder = Dart_NewWeakReferenceSetBuilder();
- EXPECT_NOTNULL(builder);
-
- Dart_WeakReferenceSet set =
- Dart_NewWeakReferenceSet(builder, strong_weak, 0);
- EXPECT_NOTNULL(set);
- EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak1));
- EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak2));
- EXPECT_VALID(Dart_AppendValueToWeakReferenceSet(set, weak3));
-
- GCTestHelper::CollectNewSpace(Heap::kInvokeApiCallbacks);
- }
-
- {
- Dart_EnterScope();
- // All weak references should be preserved.
- EXPECT(!Dart_IsNull(AsHandle(weak1)));
- EXPECT(!Dart_IsNull(AsHandle(weak2)));
- EXPECT(!Dart_IsNull(AsHandle(weak3)));
- Dart_ExitScope();
- }
-
- GCTestHelper::CollectNewSpace(Heap::kIgnoreApiCallbacks);
-
- {
- Dart_EnterScope();
- // No weak references should be preserved.
- EXPECT(weak1 == NULL);
- EXPECT(weak2 == NULL);
- EXPECT(weak3 == NULL);
- Dart_ExitScope();
- }
}
« no previous file with comments | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/dart_api_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698