Chromium Code Reviews| Index: third_party/WebKit/Source/platform/heap/TraceTraits.h |
| diff --git a/third_party/WebKit/Source/platform/heap/TraceTraits.h b/third_party/WebKit/Source/platform/heap/TraceTraits.h |
| index a56ccf1a0f3d4a5cebfea9e0068a3adaed65eb1d..1a28b07e9082965a0e212769133b48cf1865aabe 100644 |
| --- a/third_party/WebKit/Source/platform/heap/TraceTraits.h |
| +++ b/third_party/WebKit/Source/platform/heap/TraceTraits.h |
| @@ -47,12 +47,22 @@ class AdjustAndMarkTrait<T, false> { |
| STATIC_ONLY(AdjustAndMarkTrait); |
| public: |
| - static void markWrapper(const WrapperVisitor* visitor, const T* t) { |
| + static void fullyMarkAndTraceWrapper(const WrapperVisitor* visitor, |
| + const T* t) { |
|
Hannes Payer (out of office)
2016/12/20 15:30:33
DCHECK(!heapObjectHeader(t)->isWrapperHeaderMarked
Michael Lippautz
2016/12/20 15:57:23
This one cannot be done, as it is used when we can
|
| if (visitor->markWrapperHeader(heapObjectHeader(t))) { |
| visitor->markWrappersInAllWorlds(t); |
| visitor->dispatchTraceWrappers(t); |
| } |
| } |
| + static void markWrapperHeaderOnly(const WrapperVisitor* visitor, const T* t) { |
|
Hannes Payer (out of office)
2016/12/20 15:30:33
DCHECK(!heapObjectHeader(t)->isWrapperHeaderMarked
Michael Lippautz
2016/12/20 15:57:23
Done.
|
| + visitor->markWrapperHeader(heapObjectHeader(t)); |
| + } |
| + static void finishMarkAndTraceMarkedWrapper(const WrapperVisitor* visitor, |
| + const T* t) { |
| + CHECK(heapObjectHeader(t)->isWrapperHeaderMarked()); |
|
Hannes Payer (out of office)
2016/12/20 15:30:34
s/CHECK/DCHECK/
Michael Lippautz
2016/12/20 15:57:23
Most of the assertions will be CHECKs until this i
|
| + visitor->markWrappersInAllWorlds(t); |
| + visitor->dispatchTraceWrappers(t); |
| + } |
| static HeapObjectHeader* heapObjectHeader(const T* t) { |
| return HeapObjectHeader::fromPayload(t); |
| } |
| @@ -99,8 +109,16 @@ class AdjustAndMarkTrait<T, true> { |
| STATIC_ONLY(AdjustAndMarkTrait); |
| public: |
| - static void markWrapper(const WrapperVisitor* visitor, const T* t) { |
| - t->adjustAndMarkWrapper(visitor); |
| + static void fullyMarkAndTraceWrapper(const WrapperVisitor* visitor, |
| + const T* t) { |
| + t->adjustAndFullyMarkAndTraceWrapper(visitor); |
| + } |
| + static void markWrapperHeaderOnly(const WrapperVisitor* visitor, const T* t) { |
| + t->adjustAndMarkWrapperHeaderOnly(visitor); |
| + } |
| + static void finishMarkAndTraceMarkedWrapper(const WrapperVisitor* visitor, |
| + const T* t) { |
| + t->adjustAndFinishMarkAndTraceMarkedWrapper(visitor); |
| } |
| static HeapObjectHeader* heapObjectHeader(const T* t) { |
| return t->adjustAndGetHeapObjectHeader(); |
| @@ -205,11 +223,29 @@ class TraceTrait { |
| static void trace(Visitor*, void* self); |
| static void trace(InlinedGlobalMarkingVisitor, void* self); |
| - static void markWrapper(const WrapperVisitor* visitor, const void* t) { |
| + static void fullyMarkAndTraceWrapper(const WrapperVisitor* visitor, |
| + const void* t) { |
| + static_assert(CanTraceWrappers<T>::value, |
| + "T should be able to trace wrappers. See " |
| + "dispatchTraceWrappers in WrapperVisitor.h"); |
| + return AdjustAndMarkTrait<T>::fullyMarkAndTraceWrapper( |
| + visitor, reinterpret_cast<const T*>(t)); |
| + } |
| + static void markWrapperHeaderOnly(const WrapperVisitor* visitor, |
| + const void* t) { |
| + static_assert(CanTraceWrappers<T>::value, |
| + "T should be able to trace wrappers. See " |
| + "dispatchTraceWrappers in WrapperVisitor.h"); |
| + return AdjustAndMarkTrait<T>::markWrapperHeaderOnly( |
| + visitor, reinterpret_cast<const T*>(t)); |
| + } |
| + static void finishMarkAndTraceMarkedWrapper(const WrapperVisitor* visitor, |
| + const void* t) { |
| static_assert(CanTraceWrappers<T>::value, |
| "T should be able to trace wrappers. See " |
| "dispatchTraceWrappers in WrapperVisitor.h"); |
| - AdjustAndMarkTrait<T>::markWrapper(visitor, reinterpret_cast<const T*>(t)); |
| + AdjustAndMarkTrait<T>::finishMarkAndTraceMarkedWrapper( |
| + visitor, reinterpret_cast<const T*>(t)); |
| } |
| static HeapObjectHeader* heapObjectHeader(const void* t) { |
| static_assert(CanTraceWrappers<T>::value, |