Chromium Code Reviews| Index: Source/platform/heap/HeapTest.cpp |
| diff --git a/Source/platform/heap/HeapTest.cpp b/Source/platform/heap/HeapTest.cpp |
| index 30305a3f7027038edc6712f978a3791a4ba53ba5..1315edd0bead9f053b7800e1e390bb51f488a818 100644 |
| --- a/Source/platform/heap/HeapTest.cpp |
| +++ b/Source/platform/heap/HeapTest.cpp |
| @@ -233,7 +233,14 @@ static size_t objectPayloadSize() |
| if (object) \ |
| m_count++; \ |
| } \ |
| - virtual bool isMarked(const Type*) override { return false; } |
| + virtual bool isMarked(const Type*) override { return false; } \ |
| + virtual bool ensureMarked(const Type* objectPointer) override \ |
| + { \ |
| + if (!objectPointer || isMarked(objectPointer)) \ |
| + return true; \ |
|
haraken
2014/12/02 06:16:04
Shouldn't this be false?
sof
2014/12/02 09:52:15
Good catch; hadn't been updated after ensureMarked
|
| + markNoTracing(objectPointer); \ |
| + return false; \ |
|
haraken
2014/12/02 06:16:04
Shouldn't this be true?
|
| + } |
| class CountingVisitor : public Visitor { |
| public: |
| @@ -268,6 +275,13 @@ public: |
| #endif |
| virtual void registerWeakCell(void**, WeakPointerCallback) override { } |
| virtual bool isMarked(const void*) override { return false; } |
| + virtual bool ensureMarked(const void* objectPointer) override |
| + { |
| + if (!objectPointer || isMarked(objectPointer)) |
| + return true; |
|
haraken
2014/12/02 06:16:04
Ditto.
|
| + markNoTracing(objectPointer); |
| + return false; |
|
haraken
2014/12/02 06:16:05
Ditto.
|
| + } |
| FOR_EACH_TYPED_HEAP(DEFINE_VISITOR_METHODS) |
| @@ -5232,4 +5246,52 @@ TEST(HeapTest, NonNodeAllocatingNodeInDestructor) |
| NonNodeAllocatingNodeInDestructor::s_node = 0; |
| } |
| +class TraceTypeEagerly1 : public GarbageCollected<TraceTypeEagerly1> { }; |
| +WILL_BE_EAGERLY_TRACED(TraceTypeEagerly1); |
| +class TraceTypeEagerly2 : public TraceTypeEagerly1 { }; |
| + |
| +class TraceTypeEagerly3 { }; |
| +WILL_BE_EAGERLY_TRACED(TraceTypeEagerly3); |
| + |
| +class TraceTypeEagerly4 : public TraceTypeEagerly3 { }; |
| + |
| +class TraceTypeEagerly5 { }; |
| +WILL_BE_EAGERLY_TRACED_CLASS(TraceTypeEagerly5); |
| + |
| +class TraceTypeEagerly6 : public TraceTypeEagerly5 { }; |
| + |
| +class TraceTypeEagerly7 { }; |
| + |
| +class TraceTypeNonEagerly1 { }; |
| +WILL_NOT_BE_EAGERLY_TRACED(TraceTypeNonEagerly1); |
| + |
| +TEST(HeapTest, TraceTypesEagerly) |
| +{ |
| + COMPILE_ASSERT(TraceEagerlyTrait<TraceTypeEagerly1>::value, ShouldBeTrue); |
| + COMPILE_ASSERT(TraceEagerlyTrait<Member<TraceTypeEagerly1>>::value, ShouldBeTrue); |
| + COMPILE_ASSERT(TraceEagerlyTrait<WeakMember<TraceTypeEagerly1>>::value, ShouldBeTrue); |
| + COMPILE_ASSERT(!TraceEagerlyTrait<RawPtr<TraceTypeEagerly1>>::value, ShouldBeTrue); |
| + COMPILE_ASSERT(TraceEagerlyTrait<HeapVector<Member<TraceTypeEagerly1>>>::value, ShouldBeTrue); |
| + COMPILE_ASSERT(TraceEagerlyTrait<HeapVector<WeakMember<TraceTypeEagerly1>>>::value, ShouldBeTrue); |
| + COMPILE_ASSERT(TraceEagerlyTrait<HeapHashSet<Member<TraceTypeEagerly1>>>::value, ShouldBeTrue); |
| + COMPILE_ASSERT(TraceEagerlyTrait<HeapHashSet<Member<TraceTypeEagerly1>>>::value, ShouldBeTrue); |
| + using HashMapIntToObj = HeapHashMap<int, Member<TraceTypeEagerly1>>; |
| + COMPILE_ASSERT(TraceEagerlyTrait<HashMapIntToObj>::value, ShouldBeTrue); |
| + using HashMapObjToInt = HeapHashMap<Member<TraceTypeEagerly1>, int>; |
| + COMPILE_ASSERT(TraceEagerlyTrait<HashMapObjToInt>::value, ShouldBeTrue); |
| + |
| + COMPILE_ASSERT(TraceEagerlyTrait<TraceTypeEagerly2>::value, ShouldBeTrue); |
| + COMPILE_ASSERT(TraceEagerlyTrait<TraceTypeEagerly3>::value, ShouldBeTrue); |
| + |
| + COMPILE_ASSERT(TraceEagerlyTrait<TraceTypeEagerly4>::value, ShouldBeTrue); |
| + |
| + COMPILE_ASSERT(TraceEagerlyTrait<TraceTypeEagerly5>::value, ShouldBeTrue); |
| + COMPILE_ASSERT(TraceEagerlyTrait<Member<TraceTypeEagerly5>>::value, ShouldBeTrue); |
| + |
| + COMPILE_ASSERT(!TraceEagerlyTrait<TraceTypeEagerly6>::value, ShouldBeTrue); |
| + COMPILE_ASSERT(!TraceEagerlyTrait<TraceTypeEagerly7>::value, ShouldBeTrue); |
| + |
| + COMPILE_ASSERT(!TraceEagerlyTrait<TraceTypeNonEagerly1>::value, ShouldBeTrue); |
| +} |
| + |
| } // namespace blink |