| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef ThreadingTraits_h | 5 #ifndef ThreadingTraits_h |
| 6 #define ThreadingTraits_h | 6 #define ThreadingTraits_h |
| 7 | 7 |
| 8 #include "wtf/Allocator.h" |
| 8 #include "wtf/Deque.h" | 9 #include "wtf/Deque.h" |
| 9 #include "wtf/HashCountedSet.h" | 10 #include "wtf/HashCountedSet.h" |
| 10 #include "wtf/HashMap.h" | 11 #include "wtf/HashMap.h" |
| 11 #include "wtf/HashSet.h" | 12 #include "wtf/HashSet.h" |
| 12 #include "wtf/HashTable.h" | 13 #include "wtf/HashTable.h" |
| 13 #include "wtf/LinkedHashSet.h" | 14 #include "wtf/LinkedHashSet.h" |
| 14 #include "wtf/ListHashSet.h" | 15 #include "wtf/ListHashSet.h" |
| 15 #include "wtf/TypeTraits.h" | 16 #include "wtf/TypeTraits.h" |
| 16 #include "wtf/Vector.h" | 17 #include "wtf/Vector.h" |
| 17 | 18 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 33 // Remove them. | 34 // Remove them. |
| 34 class Node; | 35 class Node; |
| 35 class NodeList; | 36 class NodeList; |
| 36 | 37 |
| 37 template<typename T, | 38 template<typename T, |
| 38 bool mainThreadOnly = WTF::IsSubclass<typename std::remove_const<T>::type, N
ode>::value | 39 bool mainThreadOnly = WTF::IsSubclass<typename std::remove_const<T>::type, N
ode>::value |
| 39 || WTF::IsSubclass<typename std::remove_const<T>::type, NodeList>::value
> struct DefaultThreadingTrait; | 40 || WTF::IsSubclass<typename std::remove_const<T>::type, NodeList>::value
> struct DefaultThreadingTrait; |
| 40 | 41 |
| 41 template<typename T> | 42 template<typename T> |
| 42 struct DefaultThreadingTrait<T, false> { | 43 struct DefaultThreadingTrait<T, false> { |
| 44 STATIC_ONLY(DefaultThreadingTrait); |
| 43 static const ThreadAffinity Affinity = AnyThread; | 45 static const ThreadAffinity Affinity = AnyThread; |
| 44 }; | 46 }; |
| 45 | 47 |
| 46 template<typename T> | 48 template<typename T> |
| 47 struct DefaultThreadingTrait<T, true> { | 49 struct DefaultThreadingTrait<T, true> { |
| 50 STATIC_ONLY(DefaultThreadingTrait); |
| 48 static const ThreadAffinity Affinity = MainThreadOnly; | 51 static const ThreadAffinity Affinity = MainThreadOnly; |
| 49 }; | 52 }; |
| 50 | 53 |
| 51 class HeapAllocator; | 54 class HeapAllocator; |
| 52 template<typename Table> class HeapHashTableBacking; | 55 template<typename Table> class HeapHashTableBacking; |
| 53 template<typename T, typename Traits> class HeapVectorBacking; | 56 template<typename T, typename Traits> class HeapVectorBacking; |
| 54 template<typename T> class Member; | 57 template<typename T> class Member; |
| 55 template<typename T> class WeakMember; | 58 template<typename T> class WeakMember; |
| 56 | 59 |
| 57 template<typename T> | 60 template<typename T> |
| 58 struct ThreadingTrait { | 61 struct ThreadingTrait { |
| 62 STATIC_ONLY(ThreadingTrait); |
| 59 static const ThreadAffinity Affinity = DefaultThreadingTrait<T>::Affinity; | 63 static const ThreadAffinity Affinity = DefaultThreadingTrait<T>::Affinity; |
| 60 }; | 64 }; |
| 61 | 65 |
| 62 template<typename U> class ThreadingTrait<const U> : public ThreadingTrait<U> {
}; | 66 template<typename U> class ThreadingTrait<const U> : public ThreadingTrait<U> {
}; |
| 63 | 67 |
| 64 template<typename T> | 68 template<typename T> |
| 65 struct ThreadingTrait<Member<T>> { | 69 struct ThreadingTrait<Member<T>> { |
| 70 STATIC_ONLY(ThreadingTrait); |
| 66 static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity; | 71 static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity; |
| 67 }; | 72 }; |
| 68 | 73 |
| 69 template<typename T> | 74 template<typename T> |
| 70 struct ThreadingTrait<WeakMember<T>> { | 75 struct ThreadingTrait<WeakMember<T>> { |
| 76 STATIC_ONLY(ThreadingTrait); |
| 71 static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity; | 77 static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity; |
| 72 }; | 78 }; |
| 73 | 79 |
| 74 template<typename Key, typename Value, typename T, typename U, typename V> | 80 template<typename Key, typename Value, typename T, typename U, typename V> |
| 75 struct ThreadingTrait<HashMap<Key, Value, T, U, V, HeapAllocator>> { | 81 struct ThreadingTrait<HashMap<Key, Value, T, U, V, HeapAllocator>> { |
| 82 STATIC_ONLY(ThreadingTrait); |
| 76 static const ThreadAffinity Affinity = | 83 static const ThreadAffinity Affinity = |
| 77 (ThreadingTrait<Key>::Affinity == MainThreadOnly) | 84 (ThreadingTrait<Key>::Affinity == MainThreadOnly) |
| 78 && (ThreadingTrait<Value>::Affinity == MainThreadOnly) ? MainThreadOnly
: AnyThread; | 85 && (ThreadingTrait<Value>::Affinity == MainThreadOnly) ? MainThreadOnly
: AnyThread; |
| 79 }; | 86 }; |
| 80 | 87 |
| 81 template<typename First, typename Second> | 88 template<typename First, typename Second> |
| 82 struct ThreadingTrait<WTF::KeyValuePair<First, Second>> { | 89 struct ThreadingTrait<WTF::KeyValuePair<First, Second>> { |
| 90 STATIC_ONLY(ThreadingTrait); |
| 83 static const ThreadAffinity Affinity = | 91 static const ThreadAffinity Affinity = |
| 84 (ThreadingTrait<First>::Affinity == MainThreadOnly) | 92 (ThreadingTrait<First>::Affinity == MainThreadOnly) |
| 85 && (ThreadingTrait<Second>::Affinity == MainThreadOnly) ? MainThreadOnly
: AnyThread; | 93 && (ThreadingTrait<Second>::Affinity == MainThreadOnly) ? MainThreadOnly
: AnyThread; |
| 86 }; | 94 }; |
| 87 | 95 |
| 88 template<typename T, typename U, typename V> | 96 template<typename T, typename U, typename V> |
| 89 struct ThreadingTrait<HashSet<T, U, V, HeapAllocator>> { | 97 struct ThreadingTrait<HashSet<T, U, V, HeapAllocator>> { |
| 98 STATIC_ONLY(ThreadingTrait); |
| 90 static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity; | 99 static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity; |
| 91 }; | 100 }; |
| 92 | 101 |
| 93 template<typename T, size_t inlineCapacity> | 102 template<typename T, size_t inlineCapacity> |
| 94 struct ThreadingTrait<Vector<T, inlineCapacity, HeapAllocator>> { | 103 struct ThreadingTrait<Vector<T, inlineCapacity, HeapAllocator>> { |
| 104 STATIC_ONLY(ThreadingTrait); |
| 95 static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity; | 105 static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity; |
| 96 }; | 106 }; |
| 97 | 107 |
| 98 template<typename T, typename Traits> | 108 template<typename T, typename Traits> |
| 99 struct ThreadingTrait<HeapVectorBacking<T, Traits>> { | 109 struct ThreadingTrait<HeapVectorBacking<T, Traits>> { |
| 110 STATIC_ONLY(ThreadingTrait); |
| 100 static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity; | 111 static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity; |
| 101 }; | 112 }; |
| 102 | 113 |
| 103 template<typename T, size_t inlineCapacity> | 114 template<typename T, size_t inlineCapacity> |
| 104 struct ThreadingTrait<Deque<T, inlineCapacity, HeapAllocator>> { | 115 struct ThreadingTrait<Deque<T, inlineCapacity, HeapAllocator>> { |
| 116 STATIC_ONLY(ThreadingTrait); |
| 105 static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity; | 117 static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity; |
| 106 }; | 118 }; |
| 107 | 119 |
| 108 template<typename T, typename U, typename V> | 120 template<typename T, typename U, typename V> |
| 109 struct ThreadingTrait<HashCountedSet<T, U, V, HeapAllocator>> { | 121 struct ThreadingTrait<HashCountedSet<T, U, V, HeapAllocator>> { |
| 122 STATIC_ONLY(ThreadingTrait); |
| 110 static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity; | 123 static const ThreadAffinity Affinity = ThreadingTrait<T>::Affinity; |
| 111 }; | 124 }; |
| 112 | 125 |
| 113 template<typename Table> | 126 template<typename Table> |
| 114 struct ThreadingTrait<HeapHashTableBacking<Table>> { | 127 struct ThreadingTrait<HeapHashTableBacking<Table>> { |
| 128 STATIC_ONLY(ThreadingTrait); |
| 115 using Key = typename Table::KeyType; | 129 using Key = typename Table::KeyType; |
| 116 using Value = typename Table::ValueType; | 130 using Value = typename Table::ValueType; |
| 117 static const ThreadAffinity Affinity = | 131 static const ThreadAffinity Affinity = |
| 118 (ThreadingTrait<Key>::Affinity == MainThreadOnly) | 132 (ThreadingTrait<Key>::Affinity == MainThreadOnly) |
| 119 && (ThreadingTrait<Value>::Affinity == MainThreadOnly) ? MainThreadOnly
: AnyThread; | 133 && (ThreadingTrait<Value>::Affinity == MainThreadOnly) ? MainThreadOnly
: AnyThread; |
| 120 }; | 134 }; |
| 121 | 135 |
| 122 template<typename T, typename U, typename V, typename W, typename X> class HeapH
ashMap; | 136 template<typename T, typename U, typename V, typename W, typename X> class HeapH
ashMap; |
| 123 template<typename T, typename U, typename V> class HeapHashSet; | 137 template<typename T, typename U, typename V> class HeapHashSet; |
| 124 template<typename T, size_t inlineCapacity> class HeapVector; | 138 template<typename T, size_t inlineCapacity> class HeapVector; |
| 125 template<typename T, size_t inlineCapacity> class HeapDeque; | 139 template<typename T, size_t inlineCapacity> class HeapDeque; |
| 126 template<typename T, typename U, typename V> class HeapHashCountedSet; | 140 template<typename T, typename U, typename V> class HeapHashCountedSet; |
| 127 | 141 |
| 128 template<typename T, typename U, typename V, typename W, typename X> | 142 template<typename T, typename U, typename V, typename W, typename X> |
| 129 struct ThreadingTrait<HeapHashMap<T, U, V, W, X>> : public ThreadingTrait<HashMa
p<T, U, V, W, X, HeapAllocator>> { }; | 143 struct ThreadingTrait<HeapHashMap<T, U, V, W, X>> : public ThreadingTrait<HashMa
p<T, U, V, W, X, HeapAllocator>> { |
| 144 STATIC_ONLY(ThreadingTrait); |
| 145 }; |
| 130 template<typename T, typename U, typename V> | 146 template<typename T, typename U, typename V> |
| 131 struct ThreadingTrait<HeapHashSet<T, U, V>> : public ThreadingTrait<HashSet<T, U
, V, HeapAllocator>> { }; | 147 struct ThreadingTrait<HeapHashSet<T, U, V>> : public ThreadingTrait<HashSet<T, U
, V, HeapAllocator>> { |
| 148 STATIC_ONLY(ThreadingTrait); |
| 149 }; |
| 132 template<typename T, size_t inlineCapacity> | 150 template<typename T, size_t inlineCapacity> |
| 133 struct ThreadingTrait<HeapVector<T, inlineCapacity>> : public ThreadingTrait<Vec
tor<T, inlineCapacity, HeapAllocator>> { }; | 151 struct ThreadingTrait<HeapVector<T, inlineCapacity>> : public ThreadingTrait<Vec
tor<T, inlineCapacity, HeapAllocator>> { |
| 152 STATIC_ONLY(ThreadingTrait); |
| 153 }; |
| 134 template<typename T, size_t inlineCapacity> | 154 template<typename T, size_t inlineCapacity> |
| 135 struct ThreadingTrait<HeapDeque<T, inlineCapacity>> : public ThreadingTrait<Dequ
e<T, inlineCapacity, HeapAllocator>> { }; | 155 struct ThreadingTrait<HeapDeque<T, inlineCapacity>> : public ThreadingTrait<Dequ
e<T, inlineCapacity, HeapAllocator>> { |
| 156 STATIC_ONLY(ThreadingTrait); |
| 157 }; |
| 136 template<typename T, typename U, typename V> | 158 template<typename T, typename U, typename V> |
| 137 struct ThreadingTrait<HeapHashCountedSet<T, U, V>> : public ThreadingTrait<HashC
ountedSet<T, U, V, HeapAllocator>> { }; | 159 struct ThreadingTrait<HeapHashCountedSet<T, U, V>> : public ThreadingTrait<HashC
ountedSet<T, U, V, HeapAllocator>> { |
| 160 STATIC_ONLY(ThreadingTrait); |
| 161 }; |
| 138 | 162 |
| 139 } // namespace blink | 163 } // namespace blink |
| 140 | 164 |
| 141 #endif | 165 #endif |
| OLD | NEW |