Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(125)

Side by Side Diff: third_party/WebKit/Source/platform/heap/HeapAllocator.h

Issue 2065443002: Rename and improve "traceable" templates. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comment rewording Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 HeapAllocator_h 5 #ifndef HeapAllocator_h
6 #define HeapAllocator_h 6 #define HeapAllocator_h
7 7
8 #include "platform/heap/Heap.h" 8 #include "platform/heap/Heap.h"
9 #include "platform/heap/Persistent.h" 9 #include "platform/heap/Persistent.h"
10 #include "platform/heap/TraceTraits.h" 10 #include "platform/heap/TraceTraits.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 { 142 {
143 return ThreadHeap::isHeapObjectAlive(object); 143 return ThreadHeap::isHeapObjectAlive(object);
144 } 144 }
145 145
146 template<typename VisitorDispatcher> 146 template<typename VisitorDispatcher>
147 static void markNoTracing(VisitorDispatcher visitor, const void* t) { visito r->markNoTracing(t); } 147 static void markNoTracing(VisitorDispatcher visitor, const void* t) { visito r->markNoTracing(t); }
148 148
149 template<typename VisitorDispatcher, typename T, typename Traits> 149 template<typename VisitorDispatcher, typename T, typename Traits>
150 static void trace(VisitorDispatcher visitor, T& t) 150 static void trace(VisitorDispatcher visitor, T& t)
151 { 151 {
152 TraceCollectionIfEnabled<WTF::NeedsTracingTrait<Traits>::value, Traits:: weakHandlingFlag, WTF::WeakPointersActWeak, T, Traits>::trace(visitor, t); 152 TraceCollectionIfEnabled<WTF::IsTraceableInCollectionTrait<Traits>::valu e, Traits::weakHandlingFlag, WTF::WeakPointersActWeak, T, Traits>::trace(visitor , t);
153 } 153 }
154 154
155 template<typename VisitorDispatcher> 155 template<typename VisitorDispatcher>
156 static void registerDelayedMarkNoTracing(VisitorDispatcher visitor, const vo id* object) 156 static void registerDelayedMarkNoTracing(VisitorDispatcher visitor, const vo id* object)
157 { 157 {
158 visitor->registerDelayedMarkNoTracing(object); 158 visitor->registerDelayedMarkNoTracing(object);
159 } 159 }
160 160
161 template<typename VisitorDispatcher> 161 template<typename VisitorDispatcher>
162 static void registerWeakMembers(VisitorDispatcher visitor, const void* closu re, const void* object, WeakCallback callback) 162 static void registerWeakMembers(VisitorDispatcher visitor, const void* closu re, const void* object, WeakCallback callback)
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 200
201 template<typename VisitorDispatcher, typename Value> 201 template<typename VisitorDispatcher, typename Value>
202 static void traceListHashSetValue(VisitorDispatcher visitor, Value& value) 202 static void traceListHashSetValue(VisitorDispatcher visitor, Value& value)
203 { 203 {
204 // We use the default hash traits for the value in the node, because 204 // We use the default hash traits for the value in the node, because
205 // ListHashSet does not let you specify any specific ones. 205 // ListHashSet does not let you specify any specific ones.
206 // We don't allow ListHashSet of WeakMember, so we set that one false 206 // We don't allow ListHashSet of WeakMember, so we set that one false
207 // (there's an assert elsewhere), but we have to specify some value for the 207 // (there's an assert elsewhere), but we have to specify some value for the
208 // strongify template argument, so we specify WTF::WeakPointersActWeak, 208 // strongify template argument, so we specify WTF::WeakPointersActWeak,
209 // arbitrarily. 209 // arbitrarily.
210 TraceCollectionIfEnabled<WTF::NeedsTracingTrait<WTF::HashTraits<Value>>::val ue, WTF::NoWeakHandlingInCollections, WTF::WeakPointersActWeak, Value, WTF::Hash Traits<Value>>::trace(visitor, value); 210 TraceCollectionIfEnabled<WTF::IsTraceableInCollectionTrait<WTF::HashTraits<V alue>>::value, WTF::NoWeakHandlingInCollections, WTF::WeakPointersActWeak, Value , WTF::HashTraits<Value>>::trace(visitor, value);
211 } 211 }
212 212
213 // The inline capacity is just a dummy template argument to match the off-heap 213 // The inline capacity is just a dummy template argument to match the off-heap
214 // allocator. 214 // allocator.
215 // This inherits from the static-only HeapAllocator trait class, but we do 215 // This inherits from the static-only HeapAllocator trait class, but we do
216 // declare pointers to instances. These pointers are always null, and no 216 // declare pointers to instances. These pointers are always null, and no
217 // objects are instantiated. 217 // objects are instantiated.
218 template<typename ValueArg, size_t inlineCapacity> 218 template<typename ValueArg, size_t inlineCapacity>
219 class HeapListHashSetAllocator : public HeapAllocator { 219 class HeapListHashSetAllocator : public HeapAllocator {
220 DISALLOW_NEW(); 220 DISALLOW_NEW();
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 } 307 }
308 308
309 template< 309 template<
310 typename KeyArg, 310 typename KeyArg,
311 typename MappedArg, 311 typename MappedArg,
312 typename HashArg = typename DefaultHash<KeyArg>::Hash, 312 typename HashArg = typename DefaultHash<KeyArg>::Hash,
313 typename KeyTraitsArg = HashTraits<KeyArg>, 313 typename KeyTraitsArg = HashTraits<KeyArg>,
314 typename MappedTraitsArg = HashTraits<MappedArg>> 314 typename MappedTraitsArg = HashTraits<MappedArg>>
315 class HeapHashMap : public HashMap<KeyArg, MappedArg, HashArg, KeyTraitsArg, Map pedTraitsArg, HeapAllocator> { 315 class HeapHashMap : public HashMap<KeyArg, MappedArg, HashArg, KeyTraitsArg, Map pedTraitsArg, HeapAllocator> {
316 IS_GARBAGE_COLLECTED_TYPE(); 316 IS_GARBAGE_COLLECTED_TYPE();
317 static_assert(WTF::IsWeak<KeyArg>::value || WTF::IsWeak<MappedArg>::value || WTF::NeedsTracing<KeyArg>::value || WTF::NeedsTracing<MappedArg>::value, "For h ash maps without traceable elements, use HashMap<> instead of HeapHashMap<>"); 317 static_assert(WTF::IsTraceable<KeyArg>::value || WTF::IsTraceable<MappedArg> ::value, "For hash maps without traceable elements, use HashMap<> instead of Hea pHashMap<>");
318 }; 318 };
319 319
320 template< 320 template<
321 typename ValueArg, 321 typename ValueArg,
322 typename HashArg = typename DefaultHash<ValueArg>::Hash, 322 typename HashArg = typename DefaultHash<ValueArg>::Hash,
323 typename TraitsArg = HashTraits<ValueArg>> 323 typename TraitsArg = HashTraits<ValueArg>>
324 class HeapHashSet : public HashSet<ValueArg, HashArg, TraitsArg, HeapAllocator> { 324 class HeapHashSet : public HashSet<ValueArg, HashArg, TraitsArg, HeapAllocator> {
325 IS_GARBAGE_COLLECTED_TYPE(); 325 IS_GARBAGE_COLLECTED_TYPE();
326 static_assert(WTF::IsWeak<ValueArg>::value || WTF::NeedsTracing<ValueArg>::v alue, "For hash sets without traceable elements, use HashSet<> instead of HeapHa shSet<>"); 326 static_assert(WTF::IsTraceable<ValueArg>::value, "For hash sets without trac eable elements, use HashSet<> instead of HeapHashSet<>");
327 }; 327 };
328 328
329 template< 329 template<
330 typename ValueArg, 330 typename ValueArg,
331 typename HashArg = typename DefaultHash<ValueArg>::Hash, 331 typename HashArg = typename DefaultHash<ValueArg>::Hash,
332 typename TraitsArg = HashTraits<ValueArg>> 332 typename TraitsArg = HashTraits<ValueArg>>
333 class HeapLinkedHashSet : public LinkedHashSet<ValueArg, HashArg, TraitsArg, Hea pAllocator> { 333 class HeapLinkedHashSet : public LinkedHashSet<ValueArg, HashArg, TraitsArg, Hea pAllocator> {
334 IS_GARBAGE_COLLECTED_TYPE(); 334 IS_GARBAGE_COLLECTED_TYPE();
335 static_assert(WTF::IsWeak<ValueArg>::value || WTF::NeedsTracing<ValueArg>::v alue, "For sets without traceable elements, use LinkedHashSet<> instead of HeapL inkedHashSet<>"); 335 static_assert(WTF::IsTraceable<ValueArg>::value, "For sets without traceable elements, use LinkedHashSet<> instead of HeapLinkedHashSet<>");
336 }; 336 };
337 337
338 template< 338 template<
339 typename ValueArg, 339 typename ValueArg,
340 size_t inlineCapacity = 0, // The inlineCapacity is just a dummy to match Li stHashSet (off-heap). 340 size_t inlineCapacity = 0, // The inlineCapacity is just a dummy to match Li stHashSet (off-heap).
341 typename HashArg = typename DefaultHash<ValueArg>::Hash> 341 typename HashArg = typename DefaultHash<ValueArg>::Hash>
342 class HeapListHashSet : public ListHashSet<ValueArg, inlineCapacity, HashArg, He apListHashSetAllocator<ValueArg, inlineCapacity>> { 342 class HeapListHashSet : public ListHashSet<ValueArg, inlineCapacity, HashArg, He apListHashSetAllocator<ValueArg, inlineCapacity>> {
343 IS_GARBAGE_COLLECTED_TYPE(); 343 IS_GARBAGE_COLLECTED_TYPE();
344 static_assert(WTF::IsWeak<ValueArg>::value || WTF::NeedsTracing<ValueArg>::v alue, "For sets without traceable elements, use ListHashSet<> instead of HeapLis tHashSet<>"); 344 static_assert(WTF::IsTraceable<ValueArg>::value, "For sets without traceable elements, use ListHashSet<> instead of HeapListHashSet<>");
345 }; 345 };
346 346
347 template< 347 template<
348 typename Value, 348 typename Value,
349 typename HashFunctions = typename DefaultHash<Value>::Hash, 349 typename HashFunctions = typename DefaultHash<Value>::Hash,
350 typename Traits = HashTraits<Value>> 350 typename Traits = HashTraits<Value>>
351 class HeapHashCountedSet : public HashCountedSet<Value, HashFunctions, Traits, H eapAllocator> { 351 class HeapHashCountedSet : public HashCountedSet<Value, HashFunctions, Traits, H eapAllocator> {
352 IS_GARBAGE_COLLECTED_TYPE(); 352 IS_GARBAGE_COLLECTED_TYPE();
353 static_assert(WTF::IsWeak<Value>::value || WTF::NeedsTracing<Value>::value, "For counted sets without traceable elements, use HashCountedSet<> instead of He apHashCountedSet<>"); 353 static_assert(WTF::IsTraceable<Value>::value, "For counted sets without trac eable elements, use HashCountedSet<> instead of HeapHashCountedSet<>");
354 }; 354 };
355 355
356 template<typename T, size_t inlineCapacity = 0> 356 template<typename T, size_t inlineCapacity = 0>
357 class HeapVector : public Vector<T, inlineCapacity, HeapAllocator> { 357 class HeapVector : public Vector<T, inlineCapacity, HeapAllocator> {
358 IS_GARBAGE_COLLECTED_TYPE(); 358 IS_GARBAGE_COLLECTED_TYPE();
359 public: 359 public:
360 HeapVector() 360 HeapVector()
361 { 361 {
362 static_assert(WTF::NeedsTracing<T>::value, "For vectors without traceabl e elements, use Vector<> instead of HeapVector<>"); 362 static_assert(WTF::IsTraceable<T>::value, "For vectors without traceable elements, use Vector<> instead of HeapVector<>");
363 } 363 }
364 364
365 explicit HeapVector(size_t size) : Vector<T, inlineCapacity, HeapAllocator>( size) 365 explicit HeapVector(size_t size) : Vector<T, inlineCapacity, HeapAllocator>( size)
366 { 366 {
367 } 367 }
368 368
369 HeapVector(size_t size, const T& val) : Vector<T, inlineCapacity, HeapAlloca tor>(size, val) 369 HeapVector(size_t size, const T& val) : Vector<T, inlineCapacity, HeapAlloca tor>(size, val)
370 { 370 {
371 } 371 }
372 372
373 template<size_t otherCapacity> 373 template<size_t otherCapacity>
374 HeapVector(const HeapVector<T, otherCapacity>& other) 374 HeapVector(const HeapVector<T, otherCapacity>& other)
375 : Vector<T, inlineCapacity, HeapAllocator>(other) 375 : Vector<T, inlineCapacity, HeapAllocator>(other)
376 { 376 {
377 } 377 }
378 }; 378 };
379 379
380 template<typename T, size_t inlineCapacity = 0> 380 template<typename T, size_t inlineCapacity = 0>
381 class HeapDeque : public Deque<T, inlineCapacity, HeapAllocator> { 381 class HeapDeque : public Deque<T, inlineCapacity, HeapAllocator> {
382 IS_GARBAGE_COLLECTED_TYPE(); 382 IS_GARBAGE_COLLECTED_TYPE();
383 public: 383 public:
384 HeapDeque() 384 HeapDeque()
385 { 385 {
386 static_assert(WTF::NeedsTracing<T>::value, "For vectors without traceabl e elements, use Deque<> instead of HeapDeque<>"); 386 static_assert(WTF::IsTraceable<T>::value, "For vectors without traceable elements, use Deque<> instead of HeapDeque<>");
387 } 387 }
388 388
389 explicit HeapDeque(size_t size) : Deque<T, inlineCapacity, HeapAllocator>(si ze) 389 explicit HeapDeque(size_t size) : Deque<T, inlineCapacity, HeapAllocator>(si ze)
390 { 390 {
391 } 391 }
392 392
393 HeapDeque(size_t size, const T& val) : Deque<T, inlineCapacity, HeapAllocato r>(size, val) 393 HeapDeque(size_t size, const T& val) : Deque<T, inlineCapacity, HeapAllocato r>(size, val)
394 { 394 {
395 } 395 }
396 396
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 static IteratorConstReferenceType getToReferenceConstConversion(IteratorCons tGetType x) { return *x; } 554 static IteratorConstReferenceType getToReferenceConstConversion(IteratorCons tGetType x) { return *x; }
555 using PeekOutType = T*; 555 using PeekOutType = T*;
556 556
557 template<typename U> 557 template<typename U>
558 static void store(const U& value, blink::UntracedMember<T>& storage) { stora ge = value; } 558 static void store(const U& value, blink::UntracedMember<T>& storage) { stora ge = value; }
559 559
560 static PeekOutType peek(const blink::UntracedMember<T>& value) { return valu e; } 560 static PeekOutType peek(const blink::UntracedMember<T>& value) { return valu e; }
561 }; 561 };
562 562
563 template<typename T, size_t inlineCapacity> 563 template<typename T, size_t inlineCapacity>
564 struct NeedsTracing<ListHashSetNode<T, blink::HeapListHashSetAllocator<T, inline Capacity>> *> { 564 struct IsTraceable<ListHashSetNode<T, blink::HeapListHashSetAllocator<T, inlineC apacity>> *> {
565 STATIC_ONLY(NeedsTracing); 565 STATIC_ONLY(IsTraceable);
566 static_assert(sizeof(T), "T must be fully defined"); 566 static_assert(sizeof(T), "T must be fully defined");
567 // All heap allocated node pointers need visiting to keep the nodes alive, 567 // All heap allocated node pointers need visiting to keep the nodes alive,
568 // regardless of whether they contain pointers to other heap allocated 568 // regardless of whether they contain pointers to other heap allocated
569 // objects. 569 // objects.
570 static const bool value = true; 570 static const bool value = true;
571 }; 571 };
572 572
573 template<typename T, size_t inlineCapacity> 573 template<typename T, size_t inlineCapacity>
574 struct IsGarbageCollectedType<ListHashSetNode<T, blink::HeapListHashSetAllocator <T, inlineCapacity>>> { 574 struct IsGarbageCollectedType<ListHashSetNode<T, blink::HeapListHashSetAllocator <T, inlineCapacity>>> {
575 static const bool value = true; 575 static const bool value = true;
(...skipping 23 matching lines...) Expand all
599 static PeekOutType peek(const H& value) { return value; } 599 static PeekOutType peek(const H& value) { return value; }
600 }; 600 };
601 601
602 template<typename T> struct HashTraits<blink::Persistent<T>> : HandleHashTraits< T, blink::Persistent<T>> { }; 602 template<typename T> struct HashTraits<blink::Persistent<T>> : HandleHashTraits< T, blink::Persistent<T>> { };
603 603
604 template<typename T> struct HashTraits<blink::CrossThreadPersistent<T>> : Handle HashTraits<T, blink::CrossThreadPersistent<T>> { }; 604 template<typename T> struct HashTraits<blink::CrossThreadPersistent<T>> : Handle HashTraits<T, blink::CrossThreadPersistent<T>> { };
605 605
606 } // namespace WTF 606 } // namespace WTF
607 607
608 #endif 608 #endif
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/platform/heap/HeapTest.cpp » ('j') | third_party/WebKit/Source/wtf/HashTraits.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698