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 7d35c325acb544a1860b0aaa922bef272802666e..75ecd1690be4b4bdb18c9b6785cbee3278e729bd 100644 |
--- a/third_party/WebKit/Source/platform/heap/TraceTraits.h |
+++ b/third_party/WebKit/Source/platform/heap/TraceTraits.h |
@@ -9,6 +9,7 @@ |
#include "platform/heap/Heap.h" |
#include "platform/heap/InlinedGlobalMarkingVisitor.h" |
#include "platform/heap/Visitor.h" |
+#include "wtf/Allocator.h" |
#include "wtf/Assertions.h" |
#include "wtf/Deque.h" |
#include "wtf/HashCountedSet.h" |
@@ -33,6 +34,7 @@ template<typename T, bool = NeedsAdjustAndMark<T>::value> class AdjustAndMarkTra |
template<typename T> |
class AdjustAndMarkTrait<T, false> { |
+ STATIC_ONLY(AdjustAndMarkTrait); |
public: |
template<typename VisitorDispatcher> |
static void mark(VisitorDispatcher visitor, const T* t) |
@@ -74,6 +76,7 @@ public: |
template<typename T> |
class AdjustAndMarkTrait<T, true> { |
+ STATIC_ONLY(AdjustAndMarkTrait); |
public: |
template<typename VisitorDispatcher> |
static void mark(VisitorDispatcher visitor, const T* self) |
@@ -98,6 +101,7 @@ struct TraceIfEnabled; |
template<typename T> |
struct TraceIfEnabled<T, false> { |
+ STATIC_ONLY(TraceIfEnabled); |
template<typename VisitorDispatcher> |
static void trace(VisitorDispatcher, T&) |
{ |
@@ -107,6 +111,7 @@ struct TraceIfEnabled<T, false> { |
template<typename T> |
struct TraceIfEnabled<T, true> { |
+ STATIC_ONLY(TraceIfEnabled); |
template<typename VisitorDispatcher> |
static void trace(VisitorDispatcher visitor, T& t) |
{ |
@@ -119,6 +124,7 @@ template<bool needsTracing, WTF::WeakHandlingFlag weakHandlingFlag, WTF::ShouldW |
template<WTF::ShouldWeakPointersBeMarkedStrongly strongify, typename T, typename Traits> |
struct TraceCollectionIfEnabled<false, WTF::NoWeakHandlingInCollections, strongify, T, Traits> { |
+ STATIC_ONLY(TraceCollectionIfEnabled); |
template<typename VisitorDispatcher> |
static bool trace(VisitorDispatcher, T&) |
{ |
@@ -129,6 +135,7 @@ struct TraceCollectionIfEnabled<false, WTF::NoWeakHandlingInCollections, strongi |
template<bool needsTracing, WTF::WeakHandlingFlag weakHandlingFlag, WTF::ShouldWeakPointersBeMarkedStrongly strongify, typename T, typename Traits> |
struct TraceCollectionIfEnabled { |
+ STATIC_ONLY(TraceCollectionIfEnabled); |
template<typename VisitorDispatcher> |
static bool trace(VisitorDispatcher visitor, T& t) |
{ |
@@ -150,6 +157,7 @@ struct TraceCollectionIfEnabled { |
// that case the pointer has to be adjusted before marking. |
template<typename T> |
class TraceTrait { |
+ STATIC_ONLY(TraceTrait); |
public: |
static void trace(Visitor*, void* self); |
static void trace(InlinedGlobalMarkingVisitor, void* self); |
@@ -184,6 +192,7 @@ void TraceTrait<T>::trace(InlinedGlobalMarkingVisitor visitor, void* self) |
template<typename T, typename Traits> |
struct TraceTrait<HeapVectorBacking<T, Traits>> { |
+ STATIC_ONLY(TraceTrait); |
using Backing = HeapVectorBacking<T, Traits>; |
template<typename VisitorDispatcher> |
@@ -209,6 +218,7 @@ struct TraceTrait<HeapVectorBacking<T, Traits>> { |
// processing. |
template<typename Table> |
struct TraceTrait<HeapHashTableBacking<Table>> { |
+ STATIC_ONLY(TraceTrait); |
using Backing = HeapHashTableBacking<Table>; |
using Traits = typename Table::ValueTraits; |
@@ -231,6 +241,7 @@ struct TraceTrait<HeapHashTableBacking<Table>> { |
// entries from the collection that contain nulled weak members. |
template<typename T, typename U> |
class TraceTrait<std::pair<T, U>> { |
+ STATIC_ONLY(TraceTrait); |
public: |
static const bool firstNeedsTracing = WTF::NeedsTracing<T>::value || WTF::IsWeak<T>::value; |
static const bool secondNeedsTracing = WTF::NeedsTracing<U>::value || WTF::IsWeak<U>::value; |
@@ -266,6 +277,7 @@ public: |
// |
template<typename T> |
class TraceEagerlyTrait { |
+ STATIC_ONLY(TraceEagerlyTrait); |
public: |
static const bool value = true; |
}; |
@@ -274,42 +286,49 @@ public: |
#define WILL_NOT_BE_EAGERLY_TRACED_CLASS(TYPE) \ |
template<> \ |
class TraceEagerlyTrait<TYPE> { \ |
+ STATIC_ONLY(TraceEagerlyTrait); \ |
public: \ |
static const bool value = false; \ |
} |
template<typename T> |
class TraceEagerlyTrait<Member<T>> { |
+ STATIC_ONLY(TraceEagerlyTrait); |
public: |
static const bool value = TraceEagerlyTrait<T>::value; |
}; |
template<typename T> |
class TraceEagerlyTrait<WeakMember<T>> { |
+ STATIC_ONLY(TraceEagerlyTrait); |
public: |
static const bool value = TraceEagerlyTrait<T>::value; |
}; |
template<typename T> |
class TraceEagerlyTrait<Persistent<T>> { |
+ STATIC_ONLY(TraceEagerlyTrait); |
public: |
static const bool value = TraceEagerlyTrait<T>::value; |
}; |
template<typename T> |
class TraceEagerlyTrait<WeakPersistent<T>> { |
+ STATIC_ONLY(TraceEagerlyTrait); |
public: |
static const bool value = TraceEagerlyTrait<T>::value; |
}; |
template<typename T> |
class TraceEagerlyTrait<CrossThreadPersistent<T>> { |
+ STATIC_ONLY(TraceEagerlyTrait); |
public: |
static const bool value = TraceEagerlyTrait<T>::value; |
}; |
template<typename T> |
class TraceEagerlyTrait<CrossThreadWeakPersistent<T>> { |
+ STATIC_ONLY(TraceEagerlyTrait); |
public: |
static const bool value = TraceEagerlyTrait<T>::value; |
}; |
@@ -317,11 +336,13 @@ public: |
template<typename ValueArg, size_t inlineCapacity> class HeapListHashSetAllocator; |
template<typename T, size_t inlineCapacity> |
class TraceEagerlyTrait<WTF::ListHashSetNode<T, HeapListHashSetAllocator<T, inlineCapacity>>> { |
+ STATIC_ONLY(TraceEagerlyTrait); |
public: |
static const bool value = false; |
}; |
template <typename T> struct RemoveHeapPointerWrapperTypes { |
+ STATIC_ONLY(RemoveHeapPointerWrapperTypes); |
using Type = typename WTF::RemoveTemplate<typename WTF::RemoveTemplate<typename WTF::RemoveTemplate<T, Member>::Type, WeakMember>::Type, RawPtr>::Type; |
}; |
@@ -330,7 +351,9 @@ template <typename T> struct RemoveHeapPointerWrapperTypes { |
// raw pointer types. To remove these tests, we may need support for |
// instantiating a template with a RawPtrOrMember'ish template. |
template<typename T> |
-struct TraceIfNeeded : public TraceIfEnabled<T, WTF::NeedsTracing<T>::value || IsGarbageCollectedType<typename RemoveHeapPointerWrapperTypes<typename std::remove_pointer<T>::type>::Type>::value> { }; |
+struct TraceIfNeeded : public TraceIfEnabled<T, WTF::NeedsTracing<T>::value || IsGarbageCollectedType<typename RemoveHeapPointerWrapperTypes<typename std::remove_pointer<T>::type>::Type>::value> { |
+ STATIC_ONLY(TraceIfNeeded); |
+}; |
} // namespace blink |