| Index: third_party/WebKit/Source/platform/heap/HeapCompactTest.cpp
|
| diff --git a/third_party/WebKit/Source/platform/heap/HeapCompactTest.cpp b/third_party/WebKit/Source/platform/heap/HeapCompactTest.cpp
|
| index b3aa7117a4c8985d0fe63b0ced4d92c92506afeb..bb522d9908b1ed75839ad630d86f54a6466c51d3 100644
|
| --- a/third_party/WebKit/Source/platform/heap/HeapCompactTest.cpp
|
| +++ b/third_party/WebKit/Source/platform/heap/HeapCompactTest.cpp
|
| @@ -16,13 +16,38 @@
|
|
|
| namespace {
|
|
|
| +enum VerifyArenaCompaction {
|
| + NoVerify,
|
| + VectorsAreCompacted,
|
| + HashTablesAreCompacted,
|
| +};
|
| +
|
| class IntWrapper : public blink::GarbageCollectedFinalized<IntWrapper> {
|
| public:
|
| - static IntWrapper* Create(int x) { return new IntWrapper(x); }
|
| + static IntWrapper* Create(int x, VerifyArenaCompaction verify = NoVerify) {
|
| + return new IntWrapper(x, verify);
|
| + }
|
|
|
| virtual ~IntWrapper() {}
|
|
|
| - DEFINE_INLINE_TRACE() {}
|
| + DEFINE_INLINE_TRACE() {
|
| + // Verify if compaction is indeed activated.
|
| + //
|
| + // What arenas end up being compacted is dependent on residency,
|
| + // so approximate the arena checks to fit.
|
| + blink::HeapCompact* compaction = visitor->Heap().Compaction();
|
| + switch (verify_) {
|
| + case NoVerify:
|
| + return;
|
| + case HashTablesAreCompacted:
|
| + CHECK(compaction->IsCompactingArena(
|
| + blink::BlinkGC::kHashTableArenaIndex));
|
| + return;
|
| + case VectorsAreCompacted:
|
| + CHECK(compaction->IsCompactingVectorArenas());
|
| + return;
|
| + }
|
| + }
|
|
|
| int Value() const { return x_; }
|
|
|
| @@ -32,11 +57,13 @@ class IntWrapper : public blink::GarbageCollectedFinalized<IntWrapper> {
|
|
|
| unsigned GetHash() { return IntHash<int>::GetHash(x_); }
|
|
|
| - IntWrapper(int x) : x_(x) {}
|
| + IntWrapper(int x, VerifyArenaCompaction verify) : x_(x), verify_(verify) {}
|
|
|
| private:
|
| IntWrapper();
|
| +
|
| int x_;
|
| + VerifyArenaCompaction verify_;
|
| };
|
| static_assert(WTF::IsTraceable<IntWrapper>::value,
|
| "IsTraceable<> template failed to recognize trace method.");
|
| @@ -217,7 +244,7 @@ static void ClearOutOldGarbage() {
|
| TEST(HeapCompactTest, CompactVector) {
|
| ClearOutOldGarbage();
|
|
|
| - IntWrapper* val = IntWrapper::Create(1);
|
| + IntWrapper* val = IntWrapper::Create(1, VectorsAreCompacted);
|
| Persistent<IntVector> vector = new IntVector(10, val);
|
| EXPECT_EQ(10u, vector->size());
|
|
|
| @@ -235,7 +262,7 @@ TEST(HeapCompactTest, CompactHashMap) {
|
|
|
| Persistent<IntMap> int_map = new IntMap();
|
| for (size_t i = 0; i < 100; ++i) {
|
| - IntWrapper* val = IntWrapper::Create(i);
|
| + IntWrapper* val = IntWrapper::Create(i, HashTablesAreCompacted);
|
| int_map->insert(val, 100 - i);
|
| }
|
|
|
| @@ -258,7 +285,7 @@ TEST(HeapCompactTest, CompactVectorPartHashMap) {
|
| for (size_t i = 0; i < 10; ++i) {
|
| IntMap map;
|
| for (size_t j = 0; j < 10; ++j) {
|
| - IntWrapper* val = IntWrapper::Create(j);
|
| + IntWrapper* val = IntWrapper::Create(j, VectorsAreCompacted);
|
| map.insert(val, 10 - j);
|
| }
|
| int_map_vector->push_back(map);
|
| @@ -292,7 +319,7 @@ TEST(HeapCompactTest, CompactHashPartVector) {
|
| for (size_t i = 0; i < 10; ++i) {
|
| IntVector vector;
|
| for (size_t j = 0; j < 10; ++j) {
|
| - vector.push_back(IntWrapper::Create(j));
|
| + vector.push_back(IntWrapper::Create(j, HashTablesAreCompacted));
|
| }
|
| int_vector_map->insert(1 + i, vector);
|
| }
|
| @@ -319,7 +346,7 @@ TEST(HeapCompactTest, CompactHashPartVector) {
|
| TEST(HeapCompactTest, CompactDeques) {
|
| Persistent<IntDeque> deque = new IntDeque;
|
| for (int i = 0; i < 8; ++i) {
|
| - deque->push_front(IntWrapper::Create(i));
|
| + deque->push_front(IntWrapper::Create(i, VectorsAreCompacted));
|
| }
|
| EXPECT_EQ(8u, deque->size());
|
|
|
| @@ -335,7 +362,7 @@ TEST(HeapCompactTest, CompactDeques) {
|
| TEST(HeapCompactTest, CompactDequeVectors) {
|
| Persistent<HeapDeque<IntVector>> deque = new HeapDeque<IntVector>;
|
| for (int i = 0; i < 8; ++i) {
|
| - IntWrapper* value = IntWrapper::Create(i);
|
| + IntWrapper* value = IntWrapper::Create(i, VectorsAreCompacted);
|
| IntVector vector = IntVector(8, value);
|
| deque->push_front(vector);
|
| }
|
| @@ -354,7 +381,7 @@ TEST(HeapCompactTest, CompactLinkedHashSet) {
|
| using OrderedHashSet = HeapLinkedHashSet<Member<IntWrapper>>;
|
| Persistent<OrderedHashSet> set = new OrderedHashSet;
|
| for (int i = 0; i < 13; ++i) {
|
| - IntWrapper* value = IntWrapper::Create(i);
|
| + IntWrapper* value = IntWrapper::Create(i, HashTablesAreCompacted);
|
| set->insert(value);
|
| }
|
| EXPECT_EQ(13u, set->size());
|
|
|