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

Side by Side Diff: Source/platform/heap/Handle.h

Issue 858663002: Fix template angle bracket syntax in platform (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 5 years, 11 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
« no previous file with comments | « Source/platform/graphics/paint/DisplayItemList.h ('k') | Source/platform/heap/Heap.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2014 Google Inc. All rights reserved. 2 * Copyright (C) 2014 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 // between objects that are in the managed heap. They are only 294 // between objects that are in the managed heap. They are only
295 // meant to point to managed heap objects from variables/members 295 // meant to point to managed heap objects from variables/members
296 // outside the managed heap. 296 // outside the managed heap.
297 // 297 //
298 // A Persistent is always a GC root from the point of view of 298 // A Persistent is always a GC root from the point of view of
299 // the garbage collector. 299 // the garbage collector.
300 // 300 //
301 // We have to construct and destruct Persistent with default RootsAccessor in 301 // We have to construct and destruct Persistent with default RootsAccessor in
302 // the same thread. 302 // the same thread.
303 template<typename T, typename RootsAccessor /* = ThreadLocalPersistents<Threadin gTrait<T>::Affinity > */ > 303 template<typename T, typename RootsAccessor /* = ThreadLocalPersistents<Threadin gTrait<T>::Affinity > */ >
304 class Persistent : public PersistentBase<RootsAccessor, Persistent<T, RootsAcces sor> > { 304 class Persistent : public PersistentBase<RootsAccessor, Persistent<T, RootsAcces sor>> {
305 public: 305 public:
306 Persistent() : m_raw(nullptr) { } 306 Persistent() : m_raw(nullptr) { }
307 307
308 Persistent(std::nullptr_t) : m_raw(nullptr) { } 308 Persistent(std::nullptr_t) : m_raw(nullptr) { }
309 309
310 Persistent(T* raw) : m_raw(raw) 310 Persistent(T* raw) : m_raw(raw)
311 { 311 {
312 ASSERT_IS_VALID_PERSISTENT_POINTER(m_raw); 312 ASSERT_IS_VALID_PERSISTENT_POINTER(m_raw);
313 recordBacktrace(); 313 recordBacktrace();
314 } 314 }
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 public: 433 public:
434 CrossThreadPersistent(T* raw) : Persistent<T, GlobalPersistents>(raw) { } 434 CrossThreadPersistent(T* raw) : Persistent<T, GlobalPersistents>(raw) { }
435 435
436 using Persistent<T, GlobalPersistents>::operator=; 436 using Persistent<T, GlobalPersistents>::operator=;
437 }; 437 };
438 438
439 // FIXME: derive affinity based on the collection. 439 // FIXME: derive affinity based on the collection.
440 template<typename Collection, ThreadAffinity Affinity = AnyThread> 440 template<typename Collection, ThreadAffinity Affinity = AnyThread>
441 class PersistentHeapCollectionBase 441 class PersistentHeapCollectionBase
442 : public Collection 442 : public Collection
443 , public PersistentBase<ThreadLocalPersistents<Affinity>, PersistentHeapColl ectionBase<Collection, Affinity> > { 443 , public PersistentBase<ThreadLocalPersistents<Affinity>, PersistentHeapColl ectionBase<Collection, Affinity>> {
444 // We overload the various new and delete operators with using the WTF Defau ltAllocator to ensure persistent 444 // We overload the various new and delete operators with using the WTF Defau ltAllocator to ensure persistent
445 // heap collections are always allocated off-heap. This allows persistent co llections to be used in 445 // heap collections are always allocated off-heap. This allows persistent co llections to be used in
446 // DEFINE_STATIC_LOCAL et. al. 446 // DEFINE_STATIC_LOCAL et. al.
447 WTF_USE_ALLOCATOR(PersistentHeapCollectionBase, WTF::DefaultAllocator); 447 WTF_USE_ALLOCATOR(PersistentHeapCollectionBase, WTF::DefaultAllocator);
448 public: 448 public:
449 PersistentHeapCollectionBase() { } 449 PersistentHeapCollectionBase() { }
450 450
451 template<typename OtherCollection> 451 template<typename OtherCollection>
452 PersistentHeapCollectionBase(const OtherCollection& other) : Collection(othe r) { } 452 PersistentHeapCollectionBase(const OtherCollection& other) : Collection(othe r) { }
453 453
454 void trace(Visitor* visitor) 454 void trace(Visitor* visitor)
455 { 455 {
456 #if ENABLE(GC_PROFILE_MARKING) 456 #if ENABLE(GC_PROFILE_MARKING)
457 visitor->setHostInfo(this, "PersistentHeapCollectionBase"); 457 visitor->setHostInfo(this, "PersistentHeapCollectionBase");
458 #endif 458 #endif
459 visitor->trace(*static_cast<Collection*>(this)); 459 visitor->trace(*static_cast<Collection*>(this));
460 } 460 }
461 }; 461 };
462 462
463 template< 463 template<
464 typename KeyArg, 464 typename KeyArg,
465 typename MappedArg, 465 typename MappedArg,
466 typename HashArg = typename DefaultHash<KeyArg>::Hash, 466 typename HashArg = typename DefaultHash<KeyArg>::Hash,
467 typename KeyTraitsArg = HashTraits<KeyArg>, 467 typename KeyTraitsArg = HashTraits<KeyArg>,
468 typename MappedTraitsArg = HashTraits<MappedArg> > 468 typename MappedTraitsArg = HashTraits<MappedArg>>
469 class PersistentHeapHashMap : public PersistentHeapCollectionBase<HeapHashMap<Ke yArg, MappedArg, HashArg, KeyTraitsArg, MappedTraitsArg> > { }; 469 class PersistentHeapHashMap : public PersistentHeapCollectionBase<HeapHashMap<Ke yArg, MappedArg, HashArg, KeyTraitsArg, MappedTraitsArg>> { };
470 470
471 template< 471 template<
472 typename ValueArg, 472 typename ValueArg,
473 typename HashArg = typename DefaultHash<ValueArg>::Hash, 473 typename HashArg = typename DefaultHash<ValueArg>::Hash,
474 typename TraitsArg = HashTraits<ValueArg> > 474 typename TraitsArg = HashTraits<ValueArg>>
475 class PersistentHeapHashSet : public PersistentHeapCollectionBase<HeapHashSet<Va lueArg, HashArg, TraitsArg> > { }; 475 class PersistentHeapHashSet : public PersistentHeapCollectionBase<HeapHashSet<Va lueArg, HashArg, TraitsArg>> { };
476 476
477 template< 477 template<
478 typename ValueArg, 478 typename ValueArg,
479 typename HashArg = typename DefaultHash<ValueArg>::Hash, 479 typename HashArg = typename DefaultHash<ValueArg>::Hash,
480 typename TraitsArg = HashTraits<ValueArg> > 480 typename TraitsArg = HashTraits<ValueArg>>
481 class PersistentHeapLinkedHashSet : public PersistentHeapCollectionBase<HeapLink edHashSet<ValueArg, HashArg, TraitsArg> > { }; 481 class PersistentHeapLinkedHashSet : public PersistentHeapCollectionBase<HeapLink edHashSet<ValueArg, HashArg, TraitsArg>> { };
482 482
483 template< 483 template<
484 typename ValueArg, 484 typename ValueArg,
485 size_t inlineCapacity = 0, 485 size_t inlineCapacity = 0,
486 typename HashArg = typename DefaultHash<ValueArg>::Hash> 486 typename HashArg = typename DefaultHash<ValueArg>::Hash>
487 class PersistentHeapListHashSet : public PersistentHeapCollectionBase<HeapListHa shSet<ValueArg, inlineCapacity, HashArg> > { }; 487 class PersistentHeapListHashSet : public PersistentHeapCollectionBase<HeapListHa shSet<ValueArg, inlineCapacity, HashArg>> { };
488 488
489 template<typename T, typename U, typename V> 489 template<typename T, typename U, typename V>
490 class PersistentHeapHashCountedSet : public PersistentHeapCollectionBase<HeapHas hCountedSet<T, U, V> > { }; 490 class PersistentHeapHashCountedSet : public PersistentHeapCollectionBase<HeapHas hCountedSet<T, U, V>> { };
491 491
492 template<typename T, size_t inlineCapacity = 0> 492 template<typename T, size_t inlineCapacity = 0>
493 class PersistentHeapVector : public PersistentHeapCollectionBase<HeapVector<T, i nlineCapacity> > { 493 class PersistentHeapVector : public PersistentHeapCollectionBase<HeapVector<T, i nlineCapacity>> {
494 public: 494 public:
495 PersistentHeapVector() { } 495 PersistentHeapVector() { }
496 496
497 template<size_t otherCapacity> 497 template<size_t otherCapacity>
498 PersistentHeapVector(const HeapVector<T, otherCapacity>& other) 498 PersistentHeapVector(const HeapVector<T, otherCapacity>& other)
499 : PersistentHeapCollectionBase<HeapVector<T, inlineCapacity> >(other) 499 : PersistentHeapCollectionBase<HeapVector<T, inlineCapacity>>(other)
500 { 500 {
501 } 501 }
502 }; 502 };
503 503
504 template<typename T, size_t inlineCapacity = 0> 504 template<typename T, size_t inlineCapacity = 0>
505 class PersistentHeapDeque : public PersistentHeapCollectionBase<HeapDeque<T, inl ineCapacity> > { 505 class PersistentHeapDeque : public PersistentHeapCollectionBase<HeapDeque<T, inl ineCapacity>> {
506 public: 506 public:
507 PersistentHeapDeque() { } 507 PersistentHeapDeque() { }
508 508
509 template<size_t otherCapacity> 509 template<size_t otherCapacity>
510 PersistentHeapDeque(const HeapDeque<T, otherCapacity>& other) 510 PersistentHeapDeque(const HeapDeque<T, otherCapacity>& other)
511 : PersistentHeapCollectionBase<HeapDeque<T, inlineCapacity> >(other) 511 : PersistentHeapCollectionBase<HeapDeque<T, inlineCapacity>>(other)
512 { 512 {
513 } 513 }
514 }; 514 };
515 515
516 // Members are used in classes to contain strong pointers to other oilpan heap 516 // Members are used in classes to contain strong pointers to other oilpan heap
517 // allocated objects. 517 // allocated objects.
518 // All Member fields of a class must be traced in the class' trace method. 518 // All Member fields of a class must be traced in the class' trace method.
519 // During the mark phase of the GC all live objects are marked as live and 519 // During the mark phase of the GC all live objects are marked as live and
520 // all Member fields of a live object will be traced marked as live as well. 520 // all Member fields of a live object will be traced marked as live as well.
521 template<typename T> 521 template<typename T>
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
644 // NeedsTracing<T>::value || IsWeakMember<T>::value. It should not need to test 644 // NeedsTracing<T>::value || IsWeakMember<T>::value. It should not need to test
645 // raw pointer types. To remove these tests, we may need support for 645 // raw pointer types. To remove these tests, we may need support for
646 // instantiating a template with a RawPtrOrMember'ish template. 646 // instantiating a template with a RawPtrOrMember'ish template.
647 template<typename T> 647 template<typename T>
648 struct TraceIfNeeded : public TraceIfEnabled<T, WTF::NeedsTracing<T>::value || b link::IsGarbageCollectedType<typename RemoveHeapPointerWrapperTypes<typename WTF ::RemovePointer<T>::Type>::Type>::value> { }; 648 struct TraceIfNeeded : public TraceIfEnabled<T, WTF::NeedsTracing<T>::value || b link::IsGarbageCollectedType<typename RemoveHeapPointerWrapperTypes<typename WTF ::RemovePointer<T>::Type>::Type>::value> { };
649 649
650 // This trace trait for std::pair will null weak members if their referent is 650 // This trace trait for std::pair will null weak members if their referent is
651 // collected. If you have a collection that contain weakness it does not remove 651 // collected. If you have a collection that contain weakness it does not remove
652 // entries from the collection that contain nulled weak members. 652 // entries from the collection that contain nulled weak members.
653 template<typename T, typename U> 653 template<typename T, typename U>
654 class TraceTrait<std::pair<T, U> > { 654 class TraceTrait<std::pair<T, U>> {
655 public: 655 public:
656 static const bool firstNeedsTracing = WTF::NeedsTracing<T>::value || WTF::Is Weak<T>::value; 656 static const bool firstNeedsTracing = WTF::NeedsTracing<T>::value || WTF::Is Weak<T>::value;
657 static const bool secondNeedsTracing = WTF::NeedsTracing<U>::value || WTF::I sWeak<U>::value; 657 static const bool secondNeedsTracing = WTF::NeedsTracing<U>::value || WTF::I sWeak<U>::value;
658 static void trace(Visitor* visitor, std::pair<T, U>* pair) 658 static void trace(Visitor* visitor, std::pair<T, U>* pair)
659 { 659 {
660 TraceIfEnabled<T, firstNeedsTracing>::trace(visitor, &pair->first); 660 TraceIfEnabled<T, firstNeedsTracing>::trace(visitor, &pair->first);
661 TraceIfEnabled<U, secondNeedsTracing>::trace(visitor, &pair->second); 661 TraceIfEnabled<U, secondNeedsTracing>::trace(visitor, &pair->second);
662 } 662 }
663 }; 663 };
664 664
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 static const bool value = TraceEagerlyTrait<T>::value; 931 static const bool value = TraceEagerlyTrait<T>::value;
932 }; 932 };
933 933
934 template<typename T> 934 template<typename T>
935 class TraceEagerlyTrait<CrossThreadPersistent<T>> { 935 class TraceEagerlyTrait<CrossThreadPersistent<T>> {
936 public: 936 public:
937 static const bool value = TraceEagerlyTrait<T>::value; 937 static const bool value = TraceEagerlyTrait<T>::value;
938 }; 938 };
939 939
940 template<typename T, typename U, typename V, typename W, typename X> 940 template<typename T, typename U, typename V, typename W, typename X>
941 class TraceEagerlyTrait<HeapHashMap<T, U, V, W, X> > { 941 class TraceEagerlyTrait<HeapHashMap<T, U, V, W, X>> {
942 public: 942 public:
943 static const bool value = MARKER_EAGER_TRACING || TraceEagerlyTrait<T>::valu e || TraceEagerlyTrait<U>::value; 943 static const bool value = MARKER_EAGER_TRACING || TraceEagerlyTrait<T>::valu e || TraceEagerlyTrait<U>::value;
944 }; 944 };
945 945
946 template<typename T, typename U, typename V> 946 template<typename T, typename U, typename V>
947 class TraceEagerlyTrait<HeapHashSet<T, U, V> > { 947 class TraceEagerlyTrait<HeapHashSet<T, U, V>> {
948 public: 948 public:
949 static const bool value = MARKER_EAGER_TRACING || TraceEagerlyTrait<T>::valu e; 949 static const bool value = MARKER_EAGER_TRACING || TraceEagerlyTrait<T>::valu e;
950 }; 950 };
951 951
952 template<typename T, typename U, typename V> 952 template<typename T, typename U, typename V>
953 class TraceEagerlyTrait<HeapLinkedHashSet<T, U, V> > { 953 class TraceEagerlyTrait<HeapLinkedHashSet<T, U, V>> {
954 public: 954 public:
955 static const bool value = MARKER_EAGER_TRACING || TraceEagerlyTrait<T>::valu e; 955 static const bool value = MARKER_EAGER_TRACING || TraceEagerlyTrait<T>::valu e;
956 }; 956 };
957 957
958 template<typename T, size_t inlineCapacity, typename U> 958 template<typename T, size_t inlineCapacity, typename U>
959 class TraceEagerlyTrait<HeapListHashSet<T, inlineCapacity, U> > { 959 class TraceEagerlyTrait<HeapListHashSet<T, inlineCapacity, U>> {
960 public: 960 public:
961 static const bool value = MARKER_EAGER_TRACING || TraceEagerlyTrait<T>::valu e; 961 static const bool value = MARKER_EAGER_TRACING || TraceEagerlyTrait<T>::valu e;
962 }; 962 };
963 963
964 template<typename T, size_t inlineCapacity> 964 template<typename T, size_t inlineCapacity>
965 class TraceEagerlyTrait<WTF::ListHashSetNode<T, HeapListHashSetAllocator<T, inli neCapacity>>> { 965 class TraceEagerlyTrait<WTF::ListHashSetNode<T, HeapListHashSetAllocator<T, inli neCapacity>>> {
966 public: 966 public:
967 static const bool value = false; 967 static const bool value = false;
968 }; 968 };
969 969
970 template<typename T, size_t inlineCapacity> 970 template<typename T, size_t inlineCapacity>
971 class TraceEagerlyTrait<HeapVector<T, inlineCapacity> > { 971 class TraceEagerlyTrait<HeapVector<T, inlineCapacity>> {
972 public: 972 public:
973 static const bool value = MARKER_EAGER_TRACING || TraceEagerlyTrait<T>::valu e; 973 static const bool value = MARKER_EAGER_TRACING || TraceEagerlyTrait<T>::valu e;
974 }; 974 };
975 975
976 template<typename T, typename U> 976 template<typename T, typename U>
977 class TraceEagerlyTrait<HeapVectorBacking<T, U>> { 977 class TraceEagerlyTrait<HeapVectorBacking<T, U>> {
978 public: 978 public:
979 static const bool value = MARKER_EAGER_TRACING || TraceEagerlyTrait<T>::valu e; 979 static const bool value = MARKER_EAGER_TRACING || TraceEagerlyTrait<T>::valu e;
980 }; 980 };
981 981
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
1181 template<typename T> 1181 template<typename T>
1182 struct ParamStorageTraits<RawPtr<T>> : public PointerParamStorageTraits<T*, blin k::IsGarbageCollectedType<T>::value> { 1182 struct ParamStorageTraits<RawPtr<T>> : public PointerParamStorageTraits<T*, blin k::IsGarbageCollectedType<T>::value> {
1183 }; 1183 };
1184 1184
1185 template<typename T> 1185 template<typename T>
1186 PassRefPtr<T> adoptRef(blink::RefCountedGarbageCollected<T>*) = delete; 1186 PassRefPtr<T> adoptRef(blink::RefCountedGarbageCollected<T>*) = delete;
1187 1187
1188 } // namespace WTF 1188 } // namespace WTF
1189 1189
1190 #endif 1190 #endif
OLDNEW
« no previous file with comments | « Source/platform/graphics/paint/DisplayItemList.h ('k') | Source/platform/heap/Heap.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698