| Index: Source/platform/heap/HeapTest.cpp
|
| diff --git a/Source/platform/heap/HeapTest.cpp b/Source/platform/heap/HeapTest.cpp
|
| index 41beeb9f9fd9bcd6e70851161f4fc78808a0a143..297a3c1bf480e0adcb933d32987dedfadd9783b7 100644
|
| --- a/Source/platform/heap/HeapTest.cpp
|
| +++ b/Source/platform/heap/HeapTest.cpp
|
| @@ -48,6 +48,16 @@
|
|
|
| namespace blink {
|
|
|
| +static void preciselyCollectGarbage()
|
| +{
|
| + Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| +}
|
| +
|
| +static void conservativelyCollectGarbage()
|
| +{
|
| + Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| +}
|
| +
|
| class IntWrapper : public GarbageCollectedFinalized<IntWrapper> {
|
| public:
|
| static IntWrapper* create(int x)
|
| @@ -410,7 +420,7 @@ static void clearOutOldGarbage()
|
| {
|
| while (true) {
|
| size_t used = Heap::objectPayloadSizeForTesting();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| if (Heap::objectPayloadSizeForTesting() >= used)
|
| break;
|
| }
|
| @@ -530,7 +540,7 @@ protected:
|
| }
|
|
|
| if (gcCount < gcPerThread) {
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| gcCount++;
|
| atomicIncrement(&m_gcCount);
|
| }
|
| @@ -539,7 +549,7 @@ protected:
|
| // TODO(haraken): This snapshot GC causes crashes, so disable
|
| // it at the moment. Fix the crash and enable it.
|
| // Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::TakeSnapshot, Heap::ForcedGC);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(wrapper->value(), 0x0bbac0de);
|
| EXPECT_EQ((*globalPersistent)->value(), 0x0ed0cabb);
|
| }
|
| @@ -585,7 +595,7 @@ private:
|
| }
|
|
|
| if (gcCount < gcPerThread) {
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| gcCount++;
|
| atomicIncrement(&m_gcCount);
|
| }
|
| @@ -594,7 +604,7 @@ private:
|
| // TODO(haraken): This snapshot GC causes crashes, so disable
|
| // it at the moment. Fix the crash and enable it.
|
| // Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::TakeSnapshot, Heap::ForcedGC);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_TRUE(weakMap->isEmpty());
|
| EXPECT_TRUE(weakMap2.isEmpty());
|
| }
|
| @@ -1406,7 +1416,7 @@ public:
|
| void doStuff(PassRefPtrWillBeRawPtr<SuperClass> targetPass, PointsBack* pointsBack, int superClassCount)
|
| {
|
| RefPtrWillBeRawPtr<SuperClass> target = targetPass;
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_EQ(pointsBack, target->pointsBack());
|
| EXPECT_EQ(superClassCount, SuperClass::s_aliveCount);
|
| }
|
| @@ -1684,10 +1694,10 @@ TEST(HeapTest, Transition)
|
| {
|
| RefPtrWillBePersistent<TransitionRefCounted> refCounted = TransitionRefCounted::create();
|
| EXPECT_EQ(1, TransitionRefCounted::s_aliveCount);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1, TransitionRefCounted::s_aliveCount);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0, TransitionRefCounted::s_aliveCount);
|
|
|
| RefPtrWillBePersistent<PointsBack> pointsBack1 = PointsBack::create();
|
| @@ -1699,7 +1709,7 @@ TEST(HeapTest, Transition)
|
| EXPECT_EQ(1, SubClass::s_aliveCount);
|
| EXPECT_EQ(1, SubData::s_aliveCount);
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0, TransitionRefCounted::s_aliveCount);
|
| EXPECT_EQ(2, PointsBack::s_aliveCount);
|
| EXPECT_EQ(2, SuperClass::s_aliveCount);
|
| @@ -1707,7 +1717,7 @@ TEST(HeapTest, Transition)
|
| EXPECT_EQ(1, SubData::s_aliveCount);
|
|
|
| superClass->doStuff(superClass.release(), pointsBack1.get(), 2);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(2, PointsBack::s_aliveCount);
|
| EXPECT_EQ(1, SuperClass::s_aliveCount);
|
| EXPECT_EQ(1, SubClass::s_aliveCount);
|
| @@ -1715,14 +1725,14 @@ TEST(HeapTest, Transition)
|
| EXPECT_EQ(0, pointsBack1->backPointer());
|
|
|
| pointsBack1.release();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1, PointsBack::s_aliveCount);
|
| EXPECT_EQ(1, SuperClass::s_aliveCount);
|
| EXPECT_EQ(1, SubClass::s_aliveCount);
|
| EXPECT_EQ(1, SubData::s_aliveCount);
|
|
|
| subClass->doStuff(subClass.release(), pointsBack2.get(), 1);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1, PointsBack::s_aliveCount);
|
| EXPECT_EQ(0, SuperClass::s_aliveCount);
|
| EXPECT_EQ(0, SubClass::s_aliveCount);
|
| @@ -1730,7 +1740,7 @@ TEST(HeapTest, Transition)
|
| EXPECT_EQ(0, pointsBack2->backPointer());
|
|
|
| pointsBack2.release();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0, PointsBack::s_aliveCount);
|
| EXPECT_EQ(0, SuperClass::s_aliveCount);
|
| EXPECT_EQ(0, SubClass::s_aliveCount);
|
| @@ -1787,7 +1797,7 @@ TEST(HeapTest, BasicFunctionality)
|
| EXPECT_EQ(alloc64->get(0), 27);
|
| EXPECT_EQ(alloc64->get(63), 27);
|
|
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
|
|
| EXPECT_EQ(alloc32->get(0), 40);
|
| EXPECT_EQ(alloc32->get(31), 40);
|
| @@ -1898,13 +1908,13 @@ TEST(HeapTest, SimplePersistent)
|
| Persistent<TraceCounter> traceCounter = TraceCounter::create();
|
| EXPECT_EQ(0, traceCounter->traceCount());
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1, traceCounter->traceCount());
|
|
|
| Persistent<ClassWithMember> classWithMember = ClassWithMember::create();
|
| EXPECT_EQ(0, classWithMember->traceCount());
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1, classWithMember->traceCount());
|
| EXPECT_EQ(2, traceCounter->traceCount());
|
| }
|
| @@ -1914,11 +1924,11 @@ TEST(HeapTest, SimpleFinalization)
|
| {
|
| Persistent<SimpleFinalizedObject> finalized = SimpleFinalizedObject::create();
|
| EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls);
|
| }
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1, SimpleFinalizedObject::s_destructorCalls);
|
| }
|
|
|
| @@ -1930,7 +1940,7 @@ TEST(HeapTest, FreelistReuse)
|
| for (int i = 0; i < 100; i++)
|
| new IntWrapper(i);
|
| IntWrapper* p1 = new IntWrapper(100);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| // In non-production builds, we delay reusing freed memory for at least
|
| // one GC cycle.
|
| for (int i = 0; i < 100; i++) {
|
| @@ -1938,8 +1948,8 @@ TEST(HeapTest, FreelistReuse)
|
| EXPECT_NE(p1, p2);
|
| }
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| + preciselyCollectGarbage();
|
| // Now the freed memory in the first GC should be reused.
|
| bool reusedMemoryFound = false;
|
| for (int i = 0; i < 10000; i++) {
|
| @@ -1967,7 +1977,7 @@ TEST(HeapTest, LazySweepingPages)
|
| for (int i = 0; i < 10000; i++)
|
| SimpleFinalizedObject::create();
|
| EXPECT_EQ(1000, SimpleFinalizedObject::s_destructorCalls);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(11000, SimpleFinalizedObject::s_destructorCalls);
|
| }
|
|
|
| @@ -1982,8 +1992,8 @@ TEST(HeapTest, LazySweepingLargeObjectPages)
|
| new IntWrapper(i);
|
| }
|
| Persistent<IntWrapper> p2 = new IntWrapper(2);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| + preciselyCollectGarbage();
|
|
|
| LargeHeapObject::s_destructorCalls = 0;
|
| EXPECT_EQ(0, LargeHeapObject::s_destructorCalls);
|
| @@ -2000,7 +2010,7 @@ TEST(HeapTest, LazySweepingLargeObjectPages)
|
| EXPECT_EQ(10, LargeHeapObject::s_destructorCalls);
|
| Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithoutSweep, Heap::ForcedGC);
|
| EXPECT_EQ(10, LargeHeapObject::s_destructorCalls);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(22, LargeHeapObject::s_destructorCalls);
|
| }
|
|
|
| @@ -2093,11 +2103,11 @@ TEST(HeapTest, Finalization)
|
| }
|
| // Nothing is marked so the GC should free everything and call
|
| // the finalizer on all three objects.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(2, HeapTestSubClass::s_destructorCalls);
|
| EXPECT_EQ(3, HeapTestSuperClass::s_destructorCalls);
|
| // Destructors not called again when GCing again.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(2, HeapTestSubClass::s_destructorCalls);
|
| EXPECT_EQ(3, HeapTestSuperClass::s_destructorCalls);
|
| }
|
| @@ -2131,19 +2141,19 @@ TEST(HeapTest, Members)
|
| Persistent<Baz> h2;
|
| {
|
| h1 = Baz::create(Bar::create());
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1u, Bar::s_live);
|
| h2 = Baz::create(Bar::create());
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(2u, Bar::s_live);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(2u, Bar::s_live);
|
| h1->clear();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1u, Bar::s_live);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, Bar::s_live);
|
| }
|
|
|
| @@ -2159,14 +2169,14 @@ TEST(HeapTest, MarkTest)
|
| ASSERT(ThreadState::current()->findPageFromAddress(foo));
|
| EXPECT_EQ(2u, Bar::s_live);
|
| EXPECT_TRUE(reinterpret_cast<Address>(foo) != reinterpret_cast<Address>(bar.get()));
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_TRUE(foo != bar); // To make sure foo is kept alive.
|
| EXPECT_EQ(2u, Bar::s_live);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1u, Bar::s_live);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, Bar::s_live);
|
| }
|
|
|
| @@ -2186,11 +2196,11 @@ TEST(HeapTest, DeepTest)
|
| ASSERT(ThreadState::current()->findPageFromAddress(foo));
|
| }
|
| EXPECT_EQ(depth + 2, Bar::s_live);
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_TRUE(foo != bar); // To make sure foo and bar are kept alive.
|
| EXPECT_EQ(depth + 2, Bar::s_live);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, Bar::s_live);
|
| }
|
|
|
| @@ -2201,14 +2211,14 @@ TEST(HeapTest, WideTest)
|
| Bars* bars = Bars::create();
|
| unsigned width = Bars::width;
|
| EXPECT_EQ(width + 1, Bar::s_live);
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_EQ(width + 1, Bar::s_live);
|
| // Use bars here to make sure that it will be on the stack
|
| // for the conservative stack scan to find.
|
| EXPECT_EQ(width, bars->getWidth());
|
| }
|
| EXPECT_EQ(Bars::width + 1, Bar::s_live);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, Bar::s_live);
|
| }
|
|
|
| @@ -2232,7 +2242,7 @@ TEST(HeapTest, HashMapOfMembers)
|
| size_t afterSetWasCreated = Heap::objectPayloadSizeForTesting();
|
| EXPECT_TRUE(afterSetWasCreated > initialObjectPayloadSize);
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| size_t afterGC = Heap::objectPayloadSizeForTesting();
|
| EXPECT_EQ(afterGC, afterSetWasCreated);
|
|
|
| @@ -2259,13 +2269,13 @@ TEST(HeapTest, HashMapOfMembers)
|
| // backing store. We make sure to not use conservative
|
| // stack scanning as that could find a pointer to the
|
| // old backing.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| size_t afterAddAndGC = Heap::objectPayloadSizeForTesting();
|
| EXPECT_TRUE(afterAddAndGC >= afterOneAdd);
|
|
|
| EXPECT_EQ(map->size(), 2u); // Two different wrappings of '1' are distinct.
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_TRUE(map->contains(one));
|
| EXPECT_TRUE(map->contains(anotherOne));
|
|
|
| @@ -2292,12 +2302,12 @@ TEST(HeapTest, HashMapOfMembers)
|
| EXPECT_EQ(gross->value(), 144);
|
|
|
| // This should clear out any junk backings created by all the adds.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| size_t afterGC3 = Heap::objectPayloadSizeForTesting();
|
| EXPECT_TRUE(afterGC3 <= afterAdding1000);
|
| }
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| // The objects 'one', anotherOne, and the 999 other pairs.
|
| EXPECT_EQ(IntWrapper::s_destructorCalls, 2000);
|
| size_t afterGC4 = Heap::objectPayloadSizeForTesting();
|
| @@ -2369,7 +2379,7 @@ TEST(HeapTest, LargeHeapObjects)
|
| EXPECT_TRUE(initialAllocatedSpace == Heap::allocatedSpace());
|
| EXPECT_EQ(11, IntWrapper::s_destructorCalls);
|
| EXPECT_EQ(11, LargeHeapObject::s_destructorCalls);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| }
|
|
|
| typedef std::pair<Member<IntWrapper>, int> PairWrappedUnwrapped;
|
| @@ -2446,20 +2456,20 @@ TEST(HeapTest, HeapVectorWithInlineCapacity)
|
| HeapVector<Member<IntWrapper>, 2> vector;
|
| vector.append(one);
|
| vector.append(two);
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_TRUE(vector.contains(one));
|
| EXPECT_TRUE(vector.contains(two));
|
|
|
| vector.append(three);
|
| vector.append(four);
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_TRUE(vector.contains(one));
|
| EXPECT_TRUE(vector.contains(two));
|
| EXPECT_TRUE(vector.contains(three));
|
| EXPECT_TRUE(vector.contains(four));
|
|
|
| vector.shrink(1);
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_TRUE(vector.contains(one));
|
| EXPECT_FALSE(vector.contains(two));
|
| EXPECT_FALSE(vector.contains(three));
|
| @@ -2472,7 +2482,7 @@ TEST(HeapTest, HeapVectorWithInlineCapacity)
|
| vector1.append(one);
|
| vector2.append(two);
|
| vector1.swap(vector2);
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_TRUE(vector1.contains(two));
|
| EXPECT_TRUE(vector2.contains(one));
|
| }
|
| @@ -2487,7 +2497,7 @@ TEST(HeapTest, HeapVectorWithInlineCapacity)
|
| vector2.append(five);
|
| vector2.append(six);
|
| vector1.swap(vector2);
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_TRUE(vector1.contains(three));
|
| EXPECT_TRUE(vector1.contains(four));
|
| EXPECT_TRUE(vector1.contains(five));
|
| @@ -2680,7 +2690,7 @@ TEST(HeapTest, HeapCollectionTypes)
|
|
|
| // Collect garbage. This should change nothing since we are keeping
|
| // alive the IntWrapper objects with on-stack pointers.
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
|
|
| EXPECT_TRUE(dequeContains(*deque, oneB));
|
|
|
| @@ -2802,7 +2812,7 @@ TEST(HeapTest, HeapCollectionTypes)
|
| EXPECT_FALSE(dequeContains(*dequeUW2, PairUnwrappedWrapped(103, &*threeF)));
|
| }
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| EXPECT_EQ(4u, memberMember->size());
|
| EXPECT_EQ(0u, memberMember2->size());
|
| @@ -2836,8 +2846,8 @@ TEST(HeapTest, HeapCollectionTypes)
|
| EXPECT_EQ(3, deque->begin()->get()->value());
|
| }
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| + preciselyCollectGarbage();
|
|
|
| EXPECT_EQ(4u, memberMember->size());
|
| EXPECT_EQ(4u, primitiveMember->size());
|
| @@ -2968,7 +2978,7 @@ TEST(HeapTest, HeapWeakCollectionSimple)
|
|
|
| keepNumbersAlive[0] = nullptr;
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| EXPECT_EQ(0u, weakStrong->size());
|
| EXPECT_EQ(0u, strongWeak->size());
|
| @@ -3068,7 +3078,7 @@ void orderedSetHelper(bool strong)
|
|
|
| keepNumbersAlive[0] = nullptr;
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| EXPECT_EQ(2u + (strong ? 1u : 0u), set1->size());
|
|
|
| @@ -3157,8 +3167,8 @@ static void heapMapDestructorHelper(bool clearMaps)
|
| Map stackMap;
|
| RefMap stackRefMap;
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| + preciselyCollectGarbage();
|
|
|
| stackMap.add(IntWrapper::create(42), ThingWithDestructor(1729));
|
| stackMap.add(luck, ThingWithDestructor(8128));
|
| @@ -3175,8 +3185,8 @@ static void heapMapDestructorHelper(bool clearMaps)
|
|
|
| // The RefCountedAndGarbageCollected things need an extra GC to discover
|
| // that they are no longer ref counted.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(baseLine - 2, ThingWithDestructor::s_liveThingsWithDestructor);
|
| EXPECT_EQ(refBaseLine + 2, RefCountedAndGarbageCollected::s_destructorCalls);
|
|
|
| @@ -3198,15 +3208,15 @@ static void heapMapDestructorHelper(bool clearMaps)
|
| } else {
|
| map.clear(); // Clear Persistent handle, not map.
|
| refMap.clear(); // Clear Persistent handle, not map.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| + preciselyCollectGarbage();
|
| }
|
|
|
| EXPECT_EQ(baseLine - 2, ThingWithDestructor::s_liveThingsWithDestructor);
|
|
|
| // Need a GC to make sure that the RefCountedAndGarbageCollected thing
|
| // noticies it's been decremented to zero.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(refBaseLine + 2, RefCountedAndGarbageCollected::s_destructorCalls);
|
| }
|
|
|
| @@ -3325,7 +3335,7 @@ void weakPairsHelper()
|
|
|
| checkPairSets<WSSet, SWSet, WUSet, UWSet>(weakStrong, strongWeak, weakUnwrapped, unwrappedWeak, true, two);
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| checkPairSets<WSSet, SWSet, WUSet, UWSet>(weakStrong, strongWeak, weakUnwrapped, unwrappedWeak, false, two);
|
| }
|
|
|
| @@ -3417,7 +3427,7 @@ TEST(HeapTest, HeapWeakCollectionTypes)
|
|
|
| // Collect garbage. This should change nothing since we are keeping
|
| // alive the IntWrapper objects.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| EXPECT_EQ(64u, weakStrong->size());
|
| EXPECT_EQ(64u, strongWeak->size());
|
| @@ -3457,7 +3467,7 @@ TEST(HeapTest, HeapWeakCollectionTypes)
|
| WeakOrderedSet::iterator it5 = weakOrderedSet->begin();
|
| // Collect garbage. This should change nothing since the
|
| // iterators make the collections strong.
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| if (collectionNumber == weakStrongIndex) {
|
| EXPECT_EQ(64u, weakStrong->size());
|
| MapIteratorCheck(it1, weakStrong->end(), 64);
|
| @@ -3477,7 +3487,7 @@ TEST(HeapTest, HeapWeakCollectionTypes)
|
| } else {
|
| // Collect garbage. This causes weak processing to remove
|
| // things from the collections.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| unsigned count = 0;
|
| for (int i = 0; i < 128; i += 2) {
|
| bool firstAlive = keepNumbersAlive[i];
|
| @@ -3545,7 +3555,7 @@ TEST(HeapTest, HeapWeakCollectionTypes)
|
| }
|
| for (unsigned i = 0; i < 128 + added; i++)
|
| keepNumbersAlive[i] = nullptr;
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, weakStrong->size());
|
| EXPECT_EQ(0u, strongWeak->size());
|
| EXPECT_EQ(0u, weakWeak->size());
|
| @@ -3565,24 +3575,24 @@ TEST(HeapTest, RefCountedGarbageCollected)
|
| {
|
| Persistent<RefCountedAndGarbageCollected> refPtr1 = RefCountedAndGarbageCollected::create();
|
| Persistent<RefCountedAndGarbageCollected> refPtr2 = RefCountedAndGarbageCollected::create();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0, RefCountedAndGarbageCollected::s_destructorCalls);
|
| persistent = refPtr1.get();
|
| }
|
| // Reference count is zero for both objects but one of
|
| // them is kept alive by a persistent handle.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1, RefCountedAndGarbageCollected::s_destructorCalls);
|
| refPtr3 = persistent.get();
|
| }
|
| // The persistent handle is gone but the ref count has been
|
| // increased to 1.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1, RefCountedAndGarbageCollected::s_destructorCalls);
|
| }
|
| // Both persistent handle is gone and ref count is zero so the
|
| // object can be collected.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(2, RefCountedAndGarbageCollected::s_destructorCalls);
|
| }
|
|
|
| @@ -3603,11 +3613,11 @@ TEST(HeapTest, RefCountedGarbageCollectedWithStackPointers)
|
| ThreadState::current()->visitPersistents(&visitor);
|
| EXPECT_TRUE(visitor.validate());
|
|
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_EQ(0, RefCountedAndGarbageCollected::s_destructorCalls);
|
| EXPECT_EQ(0, RefCountedAndGarbageCollected2::s_destructorCalls);
|
| }
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_EQ(0, RefCountedAndGarbageCollected::s_destructorCalls);
|
| EXPECT_EQ(0, RefCountedAndGarbageCollected2::s_destructorCalls);
|
|
|
| @@ -3626,17 +3636,17 @@ TEST(HeapTest, RefCountedGarbageCollectedWithStackPointers)
|
| ThreadState::current()->visitPersistents(&visitor);
|
| EXPECT_TRUE(visitor.validate());
|
|
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_EQ(0, RefCountedAndGarbageCollected::s_destructorCalls);
|
| EXPECT_EQ(0, RefCountedAndGarbageCollected2::s_destructorCalls);
|
| }
|
|
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_EQ(0, RefCountedAndGarbageCollected::s_destructorCalls);
|
| EXPECT_EQ(0, RefCountedAndGarbageCollected2::s_destructorCalls);
|
| }
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1, RefCountedAndGarbageCollected::s_destructorCalls);
|
| EXPECT_EQ(1, RefCountedAndGarbageCollected2::s_destructorCalls);
|
| }
|
| @@ -3648,14 +3658,14 @@ TEST(HeapTest, WeakMembers)
|
| Persistent<Bar> h1 = Bar::create();
|
| Persistent<Weak> h4;
|
| Persistent<WithWeakMember> h5;
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| ASSERT_EQ(1u, Bar::s_live); // h1 is live.
|
| {
|
| Bar* h2 = Bar::create();
|
| Bar* h3 = Bar::create();
|
| h4 = Weak::create(h2, h3);
|
| h5 = WithWeakMember::create(h2, h3);
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_EQ(5u, Bar::s_live); // The on-stack pointer keeps h3 alive.
|
| EXPECT_FALSE(h3->hasBeenFinalized());
|
| EXPECT_TRUE(h4->strongIsThere());
|
| @@ -3664,20 +3674,20 @@ TEST(HeapTest, WeakMembers)
|
| EXPECT_TRUE(h5->weakIsThere());
|
| }
|
| // h3 is collected, weak pointers from h4 and h5 don't keep it alive.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(4u, Bar::s_live);
|
| EXPECT_TRUE(h4->strongIsThere());
|
| EXPECT_FALSE(h4->weakIsThere()); // h3 is gone from weak pointer.
|
| EXPECT_TRUE(h5->strongIsThere());
|
| EXPECT_FALSE(h5->weakIsThere()); // h3 is gone from weak pointer.
|
| h1.release(); // Zero out h1.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(3u, Bar::s_live); // Only h4, h5 and h2 are left.
|
| EXPECT_TRUE(h4->strongIsThere()); // h2 is still pointed to from h4.
|
| EXPECT_TRUE(h5->strongIsThere()); // h2 is still pointed to from h5.
|
| }
|
| // h4 and h5 have gone out of scope now and they were keeping h2 alive.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, Bar::s_live); // All gone.
|
| }
|
|
|
| @@ -3691,7 +3701,7 @@ TEST(HeapTest, FinalizationObserver)
|
| }
|
| // FinalizationObserver doesn't have a strong reference to |foo|. So |foo|
|
| // and its member will be collected.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, Bar::s_live);
|
| EXPECT_TRUE(o->didCallWillFinalize());
|
|
|
| @@ -3702,7 +3712,7 @@ TEST(HeapTest, FinalizationObserver)
|
| foo = 0;
|
| // FinalizationObserverWithHashMap doesn't have a strong reference to
|
| // |foo|. So |foo| and its member will be collected.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, Bar::s_live);
|
| EXPECT_EQ(0u, map.size());
|
| EXPECT_TRUE(FinalizationObserverWithHashMap::s_didCallWillFinalize);
|
| @@ -3717,7 +3727,7 @@ TEST(HeapTest, PreFinalizer)
|
| Observable* foo = Observable::create(Bar::create());
|
| ThreadState::current()->registerPreFinalizer(foo);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_TRUE(Observable::s_willFinalizeWasCalled);
|
| }
|
|
|
| @@ -3729,7 +3739,7 @@ TEST(HeapTest, PreFinalizerIsNotCalledIfUnregistered)
|
| ThreadState::current()->registerPreFinalizer(foo);
|
| ThreadState::current()->unregisterPreFinalizer(foo);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_FALSE(Observable::s_willFinalizeWasCalled);
|
| }
|
|
|
| @@ -3737,7 +3747,7 @@ TEST(HeapTest, PreFinalizerUnregistersItself)
|
| {
|
| ObservableWithPreFinalizer::s_disposeWasCalled = false;
|
| ObservableWithPreFinalizer::create();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_TRUE(ObservableWithPreFinalizer::s_disposeWasCalled);
|
| // Don't crash, and assertions don't fail.
|
| }
|
| @@ -3748,7 +3758,7 @@ TEST(HeapTest, NestedPreFinalizer)
|
| s_disposeWasCalledForPreFinalizerSubClass = false;
|
| s_disposeWasCalledForPreFinalizerMixin = false;
|
| PreFinalizerSubClass::create();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_TRUE(s_disposeWasCalledForPreFinalizerBase);
|
| EXPECT_TRUE(s_disposeWasCalledForPreFinalizerSubClass);
|
| EXPECT_TRUE(s_disposeWasCalledForPreFinalizerMixin);
|
| @@ -3889,7 +3899,7 @@ TEST(HeapTest, PersistentHeapCollectionTypes)
|
|
|
| // Collect |vec| and |one|.
|
| vec = 0;
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1, IntWrapper::s_destructorCalls);
|
|
|
| EXPECT_EQ(2u, pVec.size());
|
| @@ -3918,12 +3928,12 @@ TEST(HeapTest, PersistentHeapCollectionTypes)
|
| EXPECT_EQ(1u, wpMap.size());
|
| EXPECT_EQ(eleven, wpMap.get(ten));
|
| ten.clear();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, wpMap.size());
|
| }
|
|
|
| // Collect previous roots.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(11, IntWrapper::s_destructorCalls);
|
| }
|
|
|
| @@ -3962,14 +3972,14 @@ TEST(HeapTest, CollectionNesting)
|
| map2->add(key + 1 + i, IntDeque());
|
| }
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| EXPECT_EQ(1u, map->get(key).size());
|
| EXPECT_EQ(1u, map2->get(key).size());
|
| EXPECT_EQ(0, IntWrapper::s_destructorCalls);
|
|
|
| keepAlive = nullptr;
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1, IntWrapper::s_destructorCalls);
|
| }
|
|
|
| @@ -3979,17 +3989,17 @@ TEST(HeapTest, GarbageCollectedMixin)
|
|
|
| Persistent<UseMixin> usemixin = UseMixin::create();
|
| EXPECT_EQ(0, UseMixin::s_traceCount);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1, UseMixin::s_traceCount);
|
|
|
| Persistent<Mixin> mixin = usemixin;
|
| usemixin = nullptr;
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(2, UseMixin::s_traceCount);
|
|
|
| PersistentHeapHashSet<WeakMember<Mixin>> weakMap;
|
| weakMap.add(UseMixin::create());
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, weakMap.size());
|
| }
|
|
|
| @@ -4010,7 +4020,7 @@ TEST(HeapTest, CollectionNesting2)
|
| EXPECT_EQ(1u, map->get(key).size());
|
|
|
| Persistent<HeapHashMap<void*, IntSet>> keepAlive(map);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1u, map->get(key).size());
|
| EXPECT_EQ(0, IntWrapper::s_destructorCalls);
|
| }
|
| @@ -4039,7 +4049,7 @@ TEST(HeapTest, CollectionNesting3)
|
|
|
| Persistent<HeapVector<IntVector>> keepAlive(vector);
|
| Persistent<HeapDeque<IntDeque>> keepAlive2(deque);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1u, it->size());
|
| EXPECT_EQ(1u, it2->size());
|
| EXPECT_EQ(0, IntWrapper::s_destructorCalls);
|
| @@ -4065,7 +4075,7 @@ TEST(HeapTest, EmbeddedInVector)
|
| vectorInheritedTrace.append(it1);
|
| vectorInheritedTrace.append(it2);
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls);
|
|
|
| // Since VectorObjectNoTrace has no trace method it will
|
| @@ -4077,10 +4087,10 @@ TEST(HeapTest, EmbeddedInVector)
|
| VectorObjectNoTrace n1, n2;
|
| vectorNoTrace.append(n1);
|
| vectorNoTrace.append(n2);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(2, SimpleFinalizedObject::s_destructorCalls);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(8, SimpleFinalizedObject::s_destructorCalls);
|
| }
|
|
|
| @@ -4104,7 +4114,7 @@ TEST(HeapTest, EmbeddedInDeque)
|
| dequeInheritedTrace.append(it1);
|
| dequeInheritedTrace.append(it2);
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls);
|
|
|
| // Since VectorObjectNoTrace has no trace method it will
|
| @@ -4116,10 +4126,10 @@ TEST(HeapTest, EmbeddedInDeque)
|
| VectorObjectNoTrace n1, n2;
|
| dequeNoTrace.append(n1);
|
| dequeNoTrace.append(n2);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(2, SimpleFinalizedObject::s_destructorCalls);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(8, SimpleFinalizedObject::s_destructorCalls);
|
| }
|
|
|
| @@ -4230,7 +4240,7 @@ TEST(HeapTest, VectorDestructors)
|
| vector.append(i1);
|
| vector.append(i2);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| // This is not EXPECT_EQ but EXPECT_LE because a HeapVectorBacking calls
|
| // destructors for all elements in (not the size but) the capacity of
|
| // the vector. Thus the number of destructors called becomes larger
|
| @@ -4244,7 +4254,7 @@ TEST(HeapTest, VectorDestructors)
|
| vector.append(i1);
|
| vector.append(i2); // This allocates an out-of-line buffer.
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_LE(4, InlinedVectorObject::s_destructorCalls);
|
|
|
| InlinedVectorObject::s_destructorCalls = 0;
|
| @@ -4254,16 +4264,16 @@ TEST(HeapTest, VectorDestructors)
|
| vector.append(i1);
|
| vector.append(i2);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_LE(4, InlinedVectorObject::s_destructorCalls);
|
|
|
| InlinedVectorObject::s_destructorCalls = 0;
|
| {
|
| Persistent<InlinedVectorObjectWrapper> vectorWrapper = new InlinedVectorObjectWrapper();
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_EQ(2, InlinedVectorObject::s_destructorCalls);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_LE(8, InlinedVectorObject::s_destructorCalls);
|
| }
|
|
|
| @@ -4280,7 +4290,7 @@ TEST(HeapTest, VectorDestructorsWithVtable)
|
| vector.append(i1);
|
| vector.append(i2);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(4, InlinedVectorObjectWithVtable::s_destructorCalls);
|
|
|
| InlinedVectorObjectWithVtable::s_destructorCalls = 0;
|
| @@ -4290,7 +4300,7 @@ TEST(HeapTest, VectorDestructorsWithVtable)
|
| vector.append(i1);
|
| vector.append(i2); // This allocates an out-of-line buffer.
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(5, InlinedVectorObjectWithVtable::s_destructorCalls);
|
|
|
| InlinedVectorObjectWithVtable::s_destructorCalls = 0;
|
| @@ -4300,16 +4310,16 @@ TEST(HeapTest, VectorDestructorsWithVtable)
|
| vector.append(i1);
|
| vector.append(i2);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(4, InlinedVectorObjectWithVtable::s_destructorCalls);
|
|
|
| InlinedVectorObjectWithVtable::s_destructorCalls = 0;
|
| {
|
| Persistent<InlinedVectorObjectWithVtableWrapper> vectorWrapper = new InlinedVectorObjectWithVtableWrapper();
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_EQ(3, InlinedVectorObjectWithVtable::s_destructorCalls);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(9, InlinedVectorObjectWithVtable::s_destructorCalls);
|
| }
|
| #endif
|
| @@ -4352,7 +4362,7 @@ TEST(HeapTest, HeapTerminatedArray)
|
| arr = builder.release();
|
| }
|
|
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_EQ(0, IntWrapper::s_destructorCalls);
|
| EXPECT_EQ(prefixSize, arr->size());
|
| for (size_t i = 0; i < prefixSize; i++)
|
| @@ -4366,7 +4376,7 @@ TEST(HeapTest, HeapTerminatedArray)
|
| arr = builder.release();
|
| }
|
|
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_EQ(0, IntWrapper::s_destructorCalls);
|
| EXPECT_EQ(prefixSize + suffixSize, arr->size());
|
| for (size_t i = 0; i < prefixSize + suffixSize; i++)
|
| @@ -4375,7 +4385,7 @@ TEST(HeapTest, HeapTerminatedArray)
|
| {
|
| Persistent<HeapTerminatedArray<TerminatedArrayItem>> persistentArr = arr;
|
| arr = 0;
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| arr = persistentArr.get();
|
| EXPECT_EQ(0, IntWrapper::s_destructorCalls);
|
| EXPECT_EQ(prefixSize + suffixSize, arr->size());
|
| @@ -4384,7 +4394,7 @@ TEST(HeapTest, HeapTerminatedArray)
|
| }
|
|
|
| arr = 0;
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(8, IntWrapper::s_destructorCalls);
|
| }
|
|
|
| @@ -4400,7 +4410,7 @@ TEST(HeapTest, HeapLinkedStack)
|
| for (size_t i = 0; i < stackSize; i++)
|
| stack->push(TerminatedArrayItem(IntWrapper::create(i)));
|
|
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_EQ(0, IntWrapper::s_destructorCalls);
|
| EXPECT_EQ(stackSize, stack->size());
|
| while (!stack->isEmpty()) {
|
| @@ -4410,7 +4420,7 @@ TEST(HeapTest, HeapLinkedStack)
|
|
|
| Persistent<HeapLinkedStack<TerminatedArrayItem>> pStack = stack;
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(stackSize, static_cast<size_t>(IntWrapper::s_destructorCalls));
|
| EXPECT_EQ(0u, pStack->size());
|
| }
|
| @@ -4425,7 +4435,7 @@ TEST(HeapTest, AllocationDuringFinalization)
|
| Persistent<IntWrapper> wrapper;
|
| new FinalizationAllocator(&wrapper);
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0, IntWrapper::s_destructorCalls);
|
| EXPECT_EQ(0, OneKiloByteObject::s_destructorCalls);
|
| EXPECT_EQ(0, LargeHeapObject::s_destructorCalls);
|
| @@ -4434,7 +4444,7 @@ TEST(HeapTest, AllocationDuringFinalization)
|
| EXPECT_EQ(42, wrapper->value());
|
|
|
| wrapper.clear();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| // The 42 IntWrappers were the ones allocated in ~FinalizationAllocator
|
| // and the ones allocated in LargeHeapObject.
|
| EXPECT_EQ(42, IntWrapper::s_destructorCalls);
|
| @@ -4452,7 +4462,7 @@ TEST(HeapTest, AllocationDuringPrefinalizer)
|
| Persistent<IntWrapper> wrapper;
|
| new PreFinalizationAllocator(&wrapper);
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0, IntWrapper::s_destructorCalls);
|
| EXPECT_EQ(0, OneKiloByteObject::s_destructorCalls);
|
| EXPECT_EQ(0, LargeHeapObject::s_destructorCalls);
|
| @@ -4461,7 +4471,7 @@ TEST(HeapTest, AllocationDuringPrefinalizer)
|
| EXPECT_EQ(42, wrapper->value());
|
|
|
| wrapper.clear();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| // The 42 IntWrappers were the ones allocated in the pre-finalizer
|
| // of PreFinalizationAllocator and the ones allocated in LargeHeapObject.
|
| EXPECT_EQ(42, IntWrapper::s_destructorCalls);
|
| @@ -4510,14 +4520,14 @@ void destructorsCalledOnGC(bool addLots)
|
| }
|
|
|
| EXPECT_FALSE(RefCountedWithDestructor::s_wasDestructed);
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_FALSE(RefCountedWithDestructor::s_wasDestructed);
|
| }
|
| // The destructors of the sets don't call the destructors of the elements
|
| // in the heap sets. You have to actually remove the elments, call clear()
|
| // or have a GC to get the destructors called.
|
| EXPECT_FALSE(RefCountedWithDestructor::s_wasDestructed);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_TRUE(RefCountedWithDestructor::s_wasDestructed);
|
| }
|
|
|
| @@ -4611,15 +4621,15 @@ TEST(HeapTest, MultipleMixins)
|
| MultipleMixins* obj = new MultipleMixins();
|
| {
|
| Persistent<MixinA> a = obj;
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0, IntWrapper::s_destructorCalls);
|
| }
|
| {
|
| Persistent<MixinB> b = obj;
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0, IntWrapper::s_destructorCalls);
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(3, IntWrapper::s_destructorCalls);
|
| }
|
|
|
| @@ -4712,7 +4722,7 @@ void setWithCustomWeaknessHandling()
|
| set2.add(PairWithWeakHandling(IntWrapper::create(0), IntWrapper::create(1)));
|
| set3->add(PairWithWeakHandling(IntWrapper::create(2), IntWrapper::create(3)));
|
| set1->add(PairWithWeakHandling(IntWrapper::create(4), IntWrapper::create(5)));
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| // The first set is pointed to from a persistent, so it's referenced, but
|
| // the weak processing may have taken place.
|
| if (set1->size()) {
|
| @@ -4733,7 +4743,7 @@ void setWithCustomWeaknessHandling()
|
| EXPECT_EQ(3, i3->second->value());
|
| }
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, set1->size());
|
| set1->add(PairWithWeakHandling(IntWrapper::create(103), livingInt));
|
| set1->add(PairWithWeakHandling(livingInt, IntWrapper::create(103))); // This one gets zapped at GC time because nothing holds the 103 alive.
|
| @@ -4741,7 +4751,7 @@ void setWithCustomWeaknessHandling()
|
| set1->add(PairWithWeakHandling(livingInt, livingInt));
|
| set1->add(PairWithWeakHandling(livingInt, livingInt)); // This one is identical to the previous and doesn't add anything.
|
| EXPECT_EQ(4u, set1->size());
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(2u, set1->size());
|
| Iterator i1 = set1->begin();
|
| EXPECT_TRUE(i1->first->value() == 103 || i1->first == livingInt);
|
| @@ -4774,7 +4784,7 @@ TEST(HeapTest, MapWithCustomWeaknessHandling)
|
| map1->add(PairWithWeakHandling(IntWrapper::create(4), IntWrapper::create(5)), OffHeapInt::create(1003));
|
| EXPECT_EQ(0, OffHeapInt::s_destructorCalls);
|
|
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| // The first map2 is pointed to from a persistent, so it's referenced, but
|
| // the weak processing may have taken place.
|
| if (map1->size()) {
|
| @@ -4798,7 +4808,7 @@ TEST(HeapTest, MapWithCustomWeaknessHandling)
|
| EXPECT_EQ(1002, i3->value->value());
|
| }
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| EXPECT_EQ(0u, map1->size());
|
| EXPECT_EQ(3, OffHeapInt::s_destructorCalls);
|
| @@ -4815,7 +4825,7 @@ TEST(HeapTest, MapWithCustomWeaknessHandling)
|
|
|
| EXPECT_EQ(0, OffHeapInt::s_destructorCalls);
|
| EXPECT_EQ(4u, map1->size());
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(2, OffHeapInt::s_destructorCalls);
|
| EXPECT_EQ(2u, map1->size());
|
| Iterator i1 = map1->begin();
|
| @@ -4844,7 +4854,7 @@ TEST(HeapTest, MapWithCustomWeaknessHandling2)
|
| map1->add(OffHeapInt::create(1003), PairWithWeakHandling(IntWrapper::create(4), IntWrapper::create(5)));
|
| EXPECT_EQ(0, OffHeapInt::s_destructorCalls);
|
|
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| // The first map2 is pointed to from a persistent, so it's referenced, but
|
| // the weak processing may have taken place.
|
| if (map1->size()) {
|
| @@ -4868,7 +4878,7 @@ TEST(HeapTest, MapWithCustomWeaknessHandling2)
|
| EXPECT_EQ(1002, i3->key->value());
|
| }
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| EXPECT_EQ(0u, map1->size());
|
| EXPECT_EQ(3, OffHeapInt::s_destructorCalls);
|
| @@ -4885,7 +4895,7 @@ TEST(HeapTest, MapWithCustomWeaknessHandling2)
|
|
|
| EXPECT_EQ(0, OffHeapInt::s_destructorCalls);
|
| EXPECT_EQ(4u, map1->size());
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(2, OffHeapInt::s_destructorCalls);
|
| EXPECT_EQ(2u, map1->size());
|
| Iterator i1 = map1->begin();
|
| @@ -4910,19 +4920,19 @@ TEST(HeapTest, RegressNullIsStrongified)
|
| Persistent<HeapHashMap<int, WeakMember<IntWrapper>>> map = new HeapHashMap<int, WeakMember<IntWrapper>>();
|
| addElementsToWeakMap(map);
|
| HeapHashMap<int, WeakMember<IntWrapper>>::AddResult result = map->add(800, nullptr);
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| result.storedValue->value = IntWrapper::create(42);
|
| }
|
|
|
| TEST(HeapTest, Bind)
|
| {
|
| OwnPtr<Closure> closure = bind(static_cast<void (Bar::*)(Visitor*)>(&Bar::trace), Bar::create(), static_cast<Visitor*>(0));
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| // The closure should have a persistent handle to the Bar.
|
| EXPECT_EQ(1u, Bar::s_live);
|
|
|
| OwnPtr<Closure> closure2 = bind(static_cast<void (Bar::*)(Visitor*)>(&Bar::trace), RawPtr<Bar>(Bar::create()), static_cast<Visitor*>(0));
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| // The closure should have a persistent handle to the Bar.
|
| EXPECT_EQ(2u, Bar::s_live);
|
| // RawPtr<OffHeapInt> should not make Persistent.
|
| @@ -4931,7 +4941,7 @@ TEST(HeapTest, Bind)
|
| UseMixin::s_traceCount = 0;
|
| Mixin* mixin = UseMixin::create();
|
| OwnPtr<Closure> mixinClosure = bind(static_cast<void (Mixin::*)(Visitor*)>(&Mixin::trace), mixin, static_cast<Visitor*>(0));
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| // The closure should have a persistent handle to the mixin.
|
| EXPECT_EQ(1, UseMixin::s_traceCount);
|
| }
|
| @@ -4996,7 +5006,7 @@ TEST(HeapTest, RemoveEmptySets)
|
| map->add(OffHeapInt::create(2), WeakSet());
|
| EXPECT_EQ(2u, map->size());
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1u, map->size()); // The one with key 2 was removed.
|
| EXPECT_EQ(1, OffHeapInt::s_destructorCalls);
|
| {
|
| @@ -5005,7 +5015,7 @@ TEST(HeapTest, RemoveEmptySets)
|
| }
|
|
|
| livingInt.clear(); // The weak set can no longer keep the '42' alive now.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, map->size());
|
| }
|
|
|
| @@ -5026,7 +5036,7 @@ TEST(HeapTest, EphemeronsInEphemerons)
|
| one.clear();
|
| if (!keepInnerAlive)
|
| two.clear();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| if (keepOuterAlive) {
|
| const InnerMap& inner = outer->get(one);
|
| if (keepInnerAlive) {
|
| @@ -5052,7 +5062,7 @@ TEST(HeapTest, EphemeronsInEphemerons)
|
| newEntry.storedValue->value.add(composite, home);
|
| }
|
| composite.clear();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(10000u, outer->size());
|
| for (int i = 0; i < 10000; i++) {
|
| IntWrapper* value = keepAlive->at(i);
|
| @@ -5060,7 +5070,7 @@ TEST(HeapTest, EphemeronsInEphemerons)
|
| if (i & 1)
|
| keepAlive->at(i) = nullptr;
|
| }
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(5000u, outer->size());
|
| }
|
| }
|
| @@ -5096,7 +5106,7 @@ TEST(HeapTest, EphemeronsPointToEphemerons)
|
| chain->map().add(IntWrapper::create(103), new EphemeronWrapper());
|
| }
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| EphemeronWrapper* wrapper = chain;
|
| for (int i = 0; i< 100; i++) {
|
| @@ -5109,7 +5119,7 @@ TEST(HeapTest, EphemeronsPointToEphemerons)
|
| EXPECT_EQ(nullptr, wrapper);
|
|
|
| key2.clear();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| wrapper = chain;
|
| for (int i = 0; i < 50; i++) {
|
| @@ -5119,7 +5129,7 @@ TEST(HeapTest, EphemeronsPointToEphemerons)
|
| EXPECT_EQ(nullptr, wrapper);
|
|
|
| key.clear();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, chain->map().size());
|
| }
|
|
|
| @@ -5168,7 +5178,7 @@ TEST(HeapTest, Ephemeron)
|
| set->add(pw1);
|
| set->add(pw2);
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| EXPECT_EQ(2u, weakPairMap->size());
|
| EXPECT_EQ(2u, weakPairMap2->size());
|
| @@ -5184,7 +5194,7 @@ TEST(HeapTest, Ephemeron)
|
| pw2.clear(); // Kills all entries in the pairWeakMaps except the first.
|
|
|
| for (int i = 0; i < 2; i++) {
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| EXPECT_EQ(1u, weakPairMap->size());
|
| EXPECT_EQ(0u, weakPairMap2->size());
|
| @@ -5200,7 +5210,7 @@ TEST(HeapTest, Ephemeron)
|
| wp1.clear();
|
| pw1.clear();
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| EXPECT_EQ(0u, weakPairMap->size());
|
| EXPECT_EQ(0u, pairWeakMap->size());
|
| @@ -5231,16 +5241,16 @@ TEST(HeapTest, IndirectStrongToWeak)
|
| map->add(deadObject, new Link1(deadObject));
|
| map->add(lifeObject, new Link1(lifeObject));
|
| EXPECT_EQ(2u, map->size());
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(2u, map->size());
|
| EXPECT_EQ(deadObject, map->get(deadObject)->link());
|
| EXPECT_EQ(lifeObject, map->get(lifeObject)->link());
|
| deadObject.clear(); // Now it can live up to its name.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(1u, map->size());
|
| EXPECT_EQ(lifeObject, map->get(lifeObject)->link());
|
| lifeObject.clear(); // Despite its name.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, map->size());
|
| }
|
|
|
| @@ -5310,7 +5320,7 @@ public:
|
| // GC will not find it.
|
| // Also at this point the worker is waiting for the main thread
|
| // to be parked and will not do any sweep of its heap.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| // Since the worker thread is not sweeping the worker object should
|
| // not have been finalized.
|
| @@ -5323,7 +5333,7 @@ public:
|
| uintptr_t stackPtrValue = s_workerObjectPointer;
|
| s_workerObjectPointer = 0;
|
| ASSERT_UNUSED(stackPtrValue, stackPtrValue);
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
|
|
| // Since the worker thread is not sweeping the worker object should
|
| // not have been finalized.
|
| @@ -5413,8 +5423,8 @@ public:
|
| // and mark unmarked objects dead. The collection on the worker
|
| // heap is found through the persistent and the backing should
|
| // be marked.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| + preciselyCollectGarbage();
|
|
|
| // Wake up the worker thread so it can continue. It will sweep
|
| // and perform another GC where the backing store of its
|
| @@ -5479,7 +5489,7 @@ private:
|
| {
|
| // Prevent weak processing with an iterator and GC.
|
| WeakCollectionType::iterator it = collection->begin();
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
|
|
| // The backing should be strongified because of the iterator.
|
| EXPECT_EQ(6u, collection->size());
|
| @@ -5488,7 +5498,7 @@ private:
|
|
|
| // Disregarding the iterator but keeping the collection alive
|
| // with a persistent should lead to weak processing.
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(0u, collection->size());
|
| }
|
|
|
| @@ -5506,7 +5516,7 @@ TEST(HeapTest, ThreadedStrongification)
|
|
|
| static bool allocateAndReturnBool()
|
| {
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| return true;
|
| }
|
|
|
| @@ -5616,7 +5626,7 @@ public:
|
| // until the main thread has done its GC.
|
| wakeWorkerThread();
|
|
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| // The worker thread should not have swept yet since it is waiting
|
| // to get the global mutex.
|
| @@ -5801,7 +5811,7 @@ public:
|
|
|
| AllocatesOnAssignment(const AllocatesOnAssignment& other)
|
| {
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| m_value = new IntWrapper(other.m_value->value());
|
| }
|
|
|
| @@ -5941,7 +5951,7 @@ Persistent<IntNode>* NonNodeAllocatingNodeInDestructor::s_node = 0;
|
| TEST(HeapTest, NonNodeAllocatingNodeInDestructor)
|
| {
|
| new NonNodeAllocatingNodeInDestructor();
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_EQ(10, (*NonNodeAllocatingNodeInDestructor::s_node)->value());
|
| delete NonNodeAllocatingNodeInDestructor::s_node;
|
| NonNodeAllocatingNodeInDestructor::s_node = 0;
|
| @@ -6009,7 +6019,7 @@ TEST(HeapTest, TraceDeepEagerly)
|
| obj = new DeepEagerly(obj);
|
|
|
| Persistent<DeepEagerly> persistent(obj);
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
|
|
| // Verify that the DeepEagerly chain isn't completely unravelled
|
| // by performing eager trace() calls, but the explicit mark
|
| @@ -6324,7 +6334,7 @@ private:
|
| , m_traceCounter(TraceCounter::create())
|
| {
|
| ASSERT(!ThreadState::current()->isGCForbidden());
|
| - Heap::collectGarbage(ThreadState::HeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + conservativelyCollectGarbage();
|
| EXPECT_GT(member->traceCount(), 0);
|
| EXPECT_GT(traceCount(), 0);
|
| }
|
| @@ -6354,10 +6364,10 @@ TEST(HeapTest, WeakPersistent)
|
| {
|
| Persistent<IntWrapper> object = new IntWrapper(20);
|
| OwnPtr<WeakPersistentHolder> holder = adoptPtr(new WeakPersistentHolder(object));
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_TRUE(holder->object());
|
| object = nullptr;
|
| - Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC);
|
| + preciselyCollectGarbage();
|
| EXPECT_FALSE(holder->object());
|
| }
|
|
|
|
|