| 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();
|
| - }
|
| }
|
|
|
|
|
|
|