| Index: third_party/WebKit/Source/platform/heap/HeapTest.cpp
|
| diff --git a/third_party/WebKit/Source/platform/heap/HeapTest.cpp b/third_party/WebKit/Source/platform/heap/HeapTest.cpp
|
| index b85821351ad4395d839078e29b4ba6f28e86be1d..27a498edce9cdc4dfa94d15e165dd3f81ff74d5a 100644
|
| --- a/third_party/WebKit/Source/platform/heap/HeapTest.cpp
|
| +++ b/third_party/WebKit/Source/platform/heap/HeapTest.cpp
|
| @@ -2897,6 +2897,192 @@ TEST(HeapTest, HeapCollectionTypes)
|
| EXPECT_EQ(1u, dequeUW2->size());
|
| }
|
|
|
| +TEST(HeapTest, PersistentVector)
|
| +{
|
| + IntWrapper::s_destructorCalls = 0;
|
| +
|
| + typedef Vector<Persistent<IntWrapper>> PersistentVector;
|
| +
|
| + Persistent<IntWrapper> one(IntWrapper::create(1));
|
| + Persistent<IntWrapper> two(IntWrapper::create(2));
|
| + Persistent<IntWrapper> three(IntWrapper::create(3));
|
| + Persistent<IntWrapper> four(IntWrapper::create(4));
|
| + Persistent<IntWrapper> five(IntWrapper::create(5));
|
| + Persistent<IntWrapper> six(IntWrapper::create(6));
|
| + {
|
| + PersistentVector vector;
|
| + vector.append(one);
|
| + vector.append(two);
|
| + conservativelyCollectGarbage();
|
| + EXPECT_TRUE(vector.contains(one));
|
| + EXPECT_TRUE(vector.contains(two));
|
| +
|
| + vector.append(three);
|
| + vector.append(four);
|
| + conservativelyCollectGarbage();
|
| + EXPECT_TRUE(vector.contains(one));
|
| + EXPECT_TRUE(vector.contains(two));
|
| + EXPECT_TRUE(vector.contains(three));
|
| + EXPECT_TRUE(vector.contains(four));
|
| +
|
| + vector.shrink(1);
|
| + conservativelyCollectGarbage();
|
| + EXPECT_TRUE(vector.contains(one));
|
| + EXPECT_FALSE(vector.contains(two));
|
| + EXPECT_FALSE(vector.contains(three));
|
| + EXPECT_FALSE(vector.contains(four));
|
| + }
|
| + {
|
| + PersistentVector vector1;
|
| + PersistentVector vector2;
|
| +
|
| + vector1.append(one);
|
| + vector2.append(two);
|
| + vector1.swap(vector2);
|
| + conservativelyCollectGarbage();
|
| + EXPECT_TRUE(vector1.contains(two));
|
| + EXPECT_TRUE(vector2.contains(one));
|
| + }
|
| + {
|
| + PersistentVector vector1;
|
| + PersistentVector vector2;
|
| +
|
| + vector1.append(one);
|
| + vector1.append(two);
|
| + vector2.append(three);
|
| + vector2.append(four);
|
| + vector2.append(five);
|
| + vector2.append(six);
|
| + vector1.swap(vector2);
|
| + conservativelyCollectGarbage();
|
| + EXPECT_TRUE(vector1.contains(three));
|
| + EXPECT_TRUE(vector1.contains(four));
|
| + EXPECT_TRUE(vector1.contains(five));
|
| + EXPECT_TRUE(vector1.contains(six));
|
| + EXPECT_TRUE(vector2.contains(one));
|
| + EXPECT_TRUE(vector2.contains(two));
|
| + }
|
| +}
|
| +
|
| +TEST(HeapTest, CrossThreadPersistentVector)
|
| +{
|
| + IntWrapper::s_destructorCalls = 0;
|
| +
|
| + typedef Vector<CrossThreadPersistent<IntWrapper>> CrossThreadPersistentVector;
|
| +
|
| + CrossThreadPersistent<IntWrapper> one(IntWrapper::create(1));
|
| + CrossThreadPersistent<IntWrapper> two(IntWrapper::create(2));
|
| + CrossThreadPersistent<IntWrapper> three(IntWrapper::create(3));
|
| + CrossThreadPersistent<IntWrapper> four(IntWrapper::create(4));
|
| + CrossThreadPersistent<IntWrapper> five(IntWrapper::create(5));
|
| + CrossThreadPersistent<IntWrapper> six(IntWrapper::create(6));
|
| + {
|
| + CrossThreadPersistentVector vector;
|
| + vector.append(one);
|
| + vector.append(two);
|
| + conservativelyCollectGarbage();
|
| + EXPECT_TRUE(vector.contains(one));
|
| + EXPECT_TRUE(vector.contains(two));
|
| +
|
| + vector.append(three);
|
| + vector.append(four);
|
| + conservativelyCollectGarbage();
|
| + EXPECT_TRUE(vector.contains(one));
|
| + EXPECT_TRUE(vector.contains(two));
|
| + EXPECT_TRUE(vector.contains(three));
|
| + EXPECT_TRUE(vector.contains(four));
|
| +
|
| + vector.shrink(1);
|
| + conservativelyCollectGarbage();
|
| + EXPECT_TRUE(vector.contains(one));
|
| + EXPECT_FALSE(vector.contains(two));
|
| + EXPECT_FALSE(vector.contains(three));
|
| + EXPECT_FALSE(vector.contains(four));
|
| + }
|
| + {
|
| + CrossThreadPersistentVector vector1;
|
| + CrossThreadPersistentVector vector2;
|
| +
|
| + vector1.append(one);
|
| + vector2.append(two);
|
| + vector1.swap(vector2);
|
| + conservativelyCollectGarbage();
|
| + EXPECT_TRUE(vector1.contains(two));
|
| + EXPECT_TRUE(vector2.contains(one));
|
| + }
|
| + {
|
| + CrossThreadPersistentVector vector1;
|
| + CrossThreadPersistentVector vector2;
|
| +
|
| + vector1.append(one);
|
| + vector1.append(two);
|
| + vector2.append(three);
|
| + vector2.append(four);
|
| + vector2.append(five);
|
| + vector2.append(six);
|
| + vector1.swap(vector2);
|
| + conservativelyCollectGarbage();
|
| + EXPECT_TRUE(vector1.contains(three));
|
| + EXPECT_TRUE(vector1.contains(four));
|
| + EXPECT_TRUE(vector1.contains(five));
|
| + EXPECT_TRUE(vector1.contains(six));
|
| + EXPECT_TRUE(vector2.contains(one));
|
| + EXPECT_TRUE(vector2.contains(two));
|
| + }
|
| +}
|
| +
|
| +TEST(HeapTest, CrossThreadPersistentSet)
|
| +{
|
| + IntWrapper::s_destructorCalls = 0;
|
| +
|
| + typedef HashSet<CrossThreadPersistent<IntWrapper>> CrossThreadPersistentSet;
|
| +
|
| + IntWrapper* oneRaw = IntWrapper::create(1);
|
| + CrossThreadPersistent<IntWrapper> one(oneRaw);
|
| + CrossThreadPersistent<IntWrapper> one2(oneRaw);
|
| + CrossThreadPersistent<IntWrapper> two(IntWrapper::create(2));
|
| + CrossThreadPersistent<IntWrapper> three(IntWrapper::create(3));
|
| + CrossThreadPersistent<IntWrapper> four(IntWrapper::create(4));
|
| + CrossThreadPersistent<IntWrapper> five(IntWrapper::create(5));
|
| + CrossThreadPersistent<IntWrapper> six(IntWrapper::create(6));
|
| + {
|
| + CrossThreadPersistentSet set;
|
| + set.add(one);
|
| + set.add(two);
|
| + conservativelyCollectGarbage();
|
| + EXPECT_TRUE(set.contains(one));
|
| + EXPECT_TRUE(set.contains(one2));
|
| + EXPECT_TRUE(set.contains(two));
|
| +
|
| + set.add(three);
|
| + set.add(four);
|
| + conservativelyCollectGarbage();
|
| + EXPECT_TRUE(set.contains(one));
|
| + EXPECT_TRUE(set.contains(two));
|
| + EXPECT_TRUE(set.contains(three));
|
| + EXPECT_TRUE(set.contains(four));
|
| +
|
| + set.clear();
|
| + conservativelyCollectGarbage();
|
| + EXPECT_FALSE(set.contains(one));
|
| + EXPECT_FALSE(set.contains(two));
|
| + EXPECT_FALSE(set.contains(three));
|
| + EXPECT_FALSE(set.contains(four));
|
| + }
|
| + {
|
| + CrossThreadPersistentSet set1;
|
| + CrossThreadPersistentSet set2;
|
| +
|
| + set1.add(one);
|
| + set2.add(two);
|
| + set1.swap(set2);
|
| + conservativelyCollectGarbage();
|
| + EXPECT_TRUE(set1.contains(two));
|
| + EXPECT_TRUE(set2.contains(one));
|
| + EXPECT_TRUE(set2.contains(one2));
|
| + }
|
| +}
|
| +
|
| class NonTrivialObject final {
|
| DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
|
| public:
|
|
|