| OLD | NEW |
| 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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 template<typename T> class HeapTerminatedArray; | 45 template<typename T> class HeapTerminatedArray; |
| 46 | 46 |
| 47 #define COMPILE_ASSERT_IS_GARBAGE_COLLECTED(T, ErrorMessage)
\ | 47 #define COMPILE_ASSERT_IS_GARBAGE_COLLECTED(T, ErrorMessage)
\ |
| 48 do {
\ | 48 do {
\ |
| 49 typedef typename WTF::RemoveConst<T>::Type NonConstType;
\ | 49 typedef typename WTF::RemoveConst<T>::Type NonConstType;
\ |
| 50 typedef WTF::IsSubclassOfTemplate<NonConstType, GarbageCollected> Garbag
eCollectedSubclass; \ | 50 typedef WTF::IsSubclassOfTemplate<NonConstType, GarbageCollected> Garbag
eCollectedSubclass; \ |
| 51 typedef WTF::IsSubclass<NonConstType, GarbageCollectedMixin> GarbageColl
ectedMixinSubclass; \ | 51 typedef WTF::IsSubclass<NonConstType, GarbageCollectedMixin> GarbageColl
ectedMixinSubclass; \ |
| 52 typedef WTF::IsSubclassOfTemplate3<NonConstType, HeapHashSet> HeapHashSe
tSubclass; \ | 52 typedef WTF::IsSubclassOfTemplate3<NonConstType, HeapHashSet> HeapHashSe
tSubclass; \ |
| 53 typedef WTF::IsSubclassOfTemplate5<NonConstType, HeapHashMap> HeapHashMa
pSubclass; \ | 53 typedef WTF::IsSubclassOfTemplate5<NonConstType, HeapHashMap> HeapHashMa
pSubclass; \ |
| 54 typedef WTF::IsSubclassOfTemplateTypenameSize<NonConstType, HeapVector>
HeapVectorSubclass; \ | 54 typedef WTF::IsSubclassOfTemplateTypenameSize<NonConstType, HeapVector>
HeapVectorSubclass; \ |
| 55 typedef WTF::IsSubclassOfTemplateTypenameSize<NonConstType, HeapDeque> H
eapDequeSubclass; \ |
| 55 typedef WTF::IsSubclassOfTemplate<NonConstType, HeapTerminatedArray> Hea
pTerminatedArraySubclass; \ | 56 typedef WTF::IsSubclassOfTemplate<NonConstType, HeapTerminatedArray> Hea
pTerminatedArraySubclass; \ |
| 56 COMPILE_ASSERT(GarbageCollectedSubclass::value ||
\ | 57 COMPILE_ASSERT(GarbageCollectedSubclass::value ||
\ |
| 57 GarbageCollectedMixinSubclass::value ||
\ | 58 GarbageCollectedMixinSubclass::value ||
\ |
| 58 HeapHashSetSubclass::value ||
\ | 59 HeapHashSetSubclass::value ||
\ |
| 59 HeapHashMapSubclass::value ||
\ | 60 HeapHashMapSubclass::value ||
\ |
| 60 HeapVectorSubclass::value ||
\ | 61 HeapVectorSubclass::value ||
\ |
| 62 HeapDequeSubclass::value ||
\ |
| 61 HeapTerminatedArraySubclass::value,
\ | 63 HeapTerminatedArraySubclass::value,
\ |
| 62 ErrorMessage);
\ | 64 ErrorMessage);
\ |
| 63 } while (0) | 65 } while (0) |
| 64 | 66 |
| 65 template<typename T> class Member; | 67 template<typename T> class Member; |
| 66 | 68 |
| 67 class PersistentNode { | 69 class PersistentNode { |
| 68 public: | 70 public: |
| 69 explicit PersistentNode(TraceCallback trace) | 71 explicit PersistentNode(TraceCallback trace) |
| 70 : m_trace(trace) | 72 : m_trace(trace) |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 public: | 415 public: |
| 414 PersistentHeapVector() { } | 416 PersistentHeapVector() { } |
| 415 | 417 |
| 416 template<size_t otherCapacity> | 418 template<size_t otherCapacity> |
| 417 PersistentHeapVector(const HeapVector<T, otherCapacity>& other) | 419 PersistentHeapVector(const HeapVector<T, otherCapacity>& other) |
| 418 : PersistentHeapCollectionBase<HeapVector<T, inlineCapacity> >(other) | 420 : PersistentHeapCollectionBase<HeapVector<T, inlineCapacity> >(other) |
| 419 { | 421 { |
| 420 } | 422 } |
| 421 }; | 423 }; |
| 422 | 424 |
| 425 template<typename T, size_t inlineCapacity = 0> |
| 426 class PersistentHeapDeque : public PersistentHeapCollectionBase<HeapDeque<T, inl
ineCapacity> > { |
| 427 public: |
| 428 PersistentHeapDeque() { } |
| 429 |
| 430 template<size_t otherCapacity> |
| 431 PersistentHeapDeque(const HeapDeque<T, otherCapacity>& other) |
| 432 : PersistentHeapCollectionBase<HeapDeque<T, inlineCapacity> >(other) |
| 433 { |
| 434 } |
| 435 }; |
| 436 |
| 423 // Members are used in classes to contain strong pointers to other oilpan heap | 437 // Members are used in classes to contain strong pointers to other oilpan heap |
| 424 // allocated objects. | 438 // allocated objects. |
| 425 // All Member fields of a class must be traced in the class' trace method. | 439 // All Member fields of a class must be traced in the class' trace method. |
| 426 // During the mark phase of the GC all live objects are marked as live and | 440 // During the mark phase of the GC all live objects are marked as live and |
| 427 // all Member fields of a live object will be traced marked as live as well. | 441 // all Member fields of a live object will be traced marked as live as well. |
| 428 template<typename T> | 442 template<typename T> |
| 429 class Member { | 443 class Member { |
| 430 WTF_DISALLOW_CONSTRUCTION_FROM_ZERO(Member); | 444 WTF_DISALLOW_CONSTRUCTION_FROM_ZERO(Member); |
| 431 WTF_DISALLOW_ZERO_ASSIGNMENT(Member); | 445 WTF_DISALLOW_ZERO_ASSIGNMENT(Member); |
| 432 public: | 446 public: |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 712 #define OwnPtrWillBeRawPtr WTF::RawPtr | 726 #define OwnPtrWillBeRawPtr WTF::RawPtr |
| 713 #define PassOwnPtrWillBeRawPtr WTF::RawPtr | 727 #define PassOwnPtrWillBeRawPtr WTF::RawPtr |
| 714 #define NoBaseWillBeGarbageCollected WebCore::GarbageCollected | 728 #define NoBaseWillBeGarbageCollected WebCore::GarbageCollected |
| 715 #define NoBaseWillBeGarbageCollectedFinalized WebCore::GarbageCollectedFinalized | 729 #define NoBaseWillBeGarbageCollectedFinalized WebCore::GarbageCollectedFinalized |
| 716 #define WillBeHeapHashMap WebCore::HeapHashMap | 730 #define WillBeHeapHashMap WebCore::HeapHashMap |
| 717 #define WillBePersistentHeapHashMap WebCore::PersistentHeapHashMap | 731 #define WillBePersistentHeapHashMap WebCore::PersistentHeapHashMap |
| 718 #define WillBeHeapHashSet WebCore::HeapHashSet | 732 #define WillBeHeapHashSet WebCore::HeapHashSet |
| 719 #define WillBePersistentHeapHashSet WebCore::PersistentHeapHashSet | 733 #define WillBePersistentHeapHashSet WebCore::PersistentHeapHashSet |
| 720 #define WillBeHeapVector WebCore::HeapVector | 734 #define WillBeHeapVector WebCore::HeapVector |
| 721 #define WillBePersistentHeapVector WebCore::PersistentHeapVector | 735 #define WillBePersistentHeapVector WebCore::PersistentHeapVector |
| 736 #define WillBeHeapDeque WebCore::HeapDeque |
| 737 #define WillBePersistentHeapDeque WebCore::PersistentHeapDeque |
| 722 #define WillBeGarbageCollectedMixin WebCore::GarbageCollectedMixin | 738 #define WillBeGarbageCollectedMixin WebCore::GarbageCollectedMixin |
| 723 #define WillBeHeapSupplement WebCore::HeapSupplement | 739 #define WillBeHeapSupplement WebCore::HeapSupplement |
| 724 #define WillBeHeapSupplementable WebCore::HeapSupplementable | 740 #define WillBeHeapSupplementable WebCore::HeapSupplementable |
| 725 #define WillBeHeapTerminatedArray WebCore::HeapTerminatedArray | 741 #define WillBeHeapTerminatedArray WebCore::HeapTerminatedArray |
| 726 #define WillBeHeapTerminatedArrayBuilder WebCore::HeapTerminatedArrayBuilder | 742 #define WillBeHeapTerminatedArrayBuilder WebCore::HeapTerminatedArrayBuilder |
| 727 #define WillBeHeapLinkedStack WebCore::HeapLinkedStack | 743 #define WillBeHeapLinkedStack WebCore::HeapLinkedStack |
| 728 | 744 |
| 729 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) | 745 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) |
| 730 { | 746 { |
| 731 static const bool notRefCountedGarbageCollected = !WTF::IsSubclassOfTemplate
<T, RefCountedGarbageCollected>::value; | 747 static const bool notRefCountedGarbageCollected = !WTF::IsSubclassOfTemplate
<T, RefCountedGarbageCollected>::value; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 782 #define OwnPtrWillBeRawPtr WTF::OwnPtr | 798 #define OwnPtrWillBeRawPtr WTF::OwnPtr |
| 783 #define PassOwnPtrWillBeRawPtr WTF::PassOwnPtr | 799 #define PassOwnPtrWillBeRawPtr WTF::PassOwnPtr |
| 784 #define NoBaseWillBeGarbageCollected WebCore::DummyBase | 800 #define NoBaseWillBeGarbageCollected WebCore::DummyBase |
| 785 #define NoBaseWillBeGarbageCollectedFinalized WebCore::DummyBase | 801 #define NoBaseWillBeGarbageCollectedFinalized WebCore::DummyBase |
| 786 #define WillBeHeapHashMap WTF::HashMap | 802 #define WillBeHeapHashMap WTF::HashMap |
| 787 #define WillBePersistentHeapHashMap WTF::HashMap | 803 #define WillBePersistentHeapHashMap WTF::HashMap |
| 788 #define WillBeHeapHashSet WTF::HashSet | 804 #define WillBeHeapHashSet WTF::HashSet |
| 789 #define WillBePersistentHeapHashSet WTF::HashSet | 805 #define WillBePersistentHeapHashSet WTF::HashSet |
| 790 #define WillBeHeapVector WTF::Vector | 806 #define WillBeHeapVector WTF::Vector |
| 791 #define WillBePersistentHeapVector WTF::Vector | 807 #define WillBePersistentHeapVector WTF::Vector |
| 808 #define WillBeHeapDeque WTF::Deque |
| 809 #define WillBePersistentHeapDeque WTF::Deque |
| 792 #define WillBeGarbageCollectedMixin WebCore::DummyBase<void> | 810 #define WillBeGarbageCollectedMixin WebCore::DummyBase<void> |
| 793 #define WillBeHeapSupplement WebCore::Supplement | 811 #define WillBeHeapSupplement WebCore::Supplement |
| 794 #define WillBeHeapSupplementable WebCore::Supplementable | 812 #define WillBeHeapSupplementable WebCore::Supplementable |
| 795 #define WillBeHeapTerminatedArray WTF::TerminatedArray | 813 #define WillBeHeapTerminatedArray WTF::TerminatedArray |
| 796 #define WillBeHeapTerminatedArrayBuilder WTF::TerminatedArrayBuilder | 814 #define WillBeHeapTerminatedArrayBuilder WTF::TerminatedArrayBuilder |
| 797 #define WillBeHeapLinkedStack WTF::LinkedStack | 815 #define WillBeHeapLinkedStack WTF::LinkedStack |
| 798 | 816 |
| 799 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) { retu
rn adoptRef(ptr); } | 817 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) { retu
rn adoptRef(ptr); } |
| 800 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeRefCountedGarbageCo
llected(T* ptr) { return adoptRef(ptr); } | 818 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeRefCountedGarbageCo
llected(T* ptr) { return adoptRef(ptr); } |
| 801 template<typename T> PassOwnPtrWillBeRawPtr<T> adoptPtrWillBeNoop(T* ptr) { retu
rn adoptPtr(ptr); } | 819 template<typename T> PassOwnPtrWillBeRawPtr<T> adoptPtrWillBeNoop(T* ptr) { retu
rn adoptPtr(ptr); } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 830 static const bool canInitializeWithMemset = true; | 848 static const bool canInitializeWithMemset = true; |
| 831 static const bool canMoveWithMemcpy = true; | 849 static const bool canMoveWithMemcpy = true; |
| 832 }; | 850 }; |
| 833 | 851 |
| 834 template <typename T> struct VectorTraits<WebCore::HeapVector<T, 0> > : VectorTr
aitsBase<WebCore::HeapVector<T, 0> > { | 852 template <typename T> struct VectorTraits<WebCore::HeapVector<T, 0> > : VectorTr
aitsBase<WebCore::HeapVector<T, 0> > { |
| 835 static const bool needsDestruction = false; | 853 static const bool needsDestruction = false; |
| 836 static const bool canInitializeWithMemset = true; | 854 static const bool canInitializeWithMemset = true; |
| 837 static const bool canMoveWithMemcpy = true; | 855 static const bool canMoveWithMemcpy = true; |
| 838 }; | 856 }; |
| 839 | 857 |
| 858 template <typename T> struct VectorTraits<WebCore::HeapDeque<T, 0> > : VectorTra
itsBase<WebCore::HeapDeque<T, 0> > { |
| 859 static const bool needsDestruction = false; |
| 860 static const bool canInitializeWithMemset = true; |
| 861 static const bool canMoveWithMemcpy = true; |
| 862 }; |
| 863 |
| 840 template <typename T, size_t inlineCapacity> struct VectorTraits<WebCore::HeapVe
ctor<T, inlineCapacity> > : VectorTraitsBase<WebCore::HeapVector<T, inlineCapaci
ty> > { | 864 template <typename T, size_t inlineCapacity> struct VectorTraits<WebCore::HeapVe
ctor<T, inlineCapacity> > : VectorTraitsBase<WebCore::HeapVector<T, inlineCapaci
ty> > { |
| 841 static const bool needsDestruction = VectorTraits<T>::needsDestruction; | 865 static const bool needsDestruction = VectorTraits<T>::needsDestruction; |
| 842 static const bool canInitializeWithMemset = VectorTraits<T>::canInitializeWi
thMemset; | 866 static const bool canInitializeWithMemset = VectorTraits<T>::canInitializeWi
thMemset; |
| 843 static const bool canMoveWithMemcpy = VectorTraits<T>::canMoveWithMemcpy; | 867 static const bool canMoveWithMemcpy = VectorTraits<T>::canMoveWithMemcpy; |
| 844 }; | 868 }; |
| 845 | 869 |
| 870 template <typename T, size_t inlineCapacity> struct VectorTraits<WebCore::HeapDe
que<T, inlineCapacity> > : VectorTraitsBase<WebCore::HeapDeque<T, inlineCapacity
> > { |
| 871 static const bool needsDestruction = VectorTraits<T>::needsDestruction; |
| 872 static const bool canInitializeWithMemset = VectorTraits<T>::canInitializeWi
thMemset; |
| 873 static const bool canMoveWithMemcpy = VectorTraits<T>::canMoveWithMemcpy; |
| 874 }; |
| 875 |
| 846 template<typename T> struct HashTraits<WebCore::Member<T> > : SimpleClassHashTra
its<WebCore::Member<T> > { | 876 template<typename T> struct HashTraits<WebCore::Member<T> > : SimpleClassHashTra
its<WebCore::Member<T> > { |
| 847 static const bool needsDestruction = false; | 877 static const bool needsDestruction = false; |
| 848 // FIXME: The distinction between PeekInType and PassInType is there for | 878 // FIXME: The distinction between PeekInType and PassInType is there for |
| 849 // the sake of the reference counting handles. When they are gone the two | 879 // the sake of the reference counting handles. When they are gone the two |
| 850 // types can be merged into PassInType. | 880 // types can be merged into PassInType. |
| 851 // FIXME: Implement proper const'ness for iterator types. Requires support | 881 // FIXME: Implement proper const'ness for iterator types. Requires support |
| 852 // in the marking Visitor. | 882 // in the marking Visitor. |
| 853 typedef RawPtr<T> PeekInType; | 883 typedef RawPtr<T> PeekInType; |
| 854 typedef RawPtr<T> PassInType; | 884 typedef RawPtr<T> PassInType; |
| 855 typedef WebCore::Member<T>* IteratorGetType; | 885 typedef WebCore::Member<T>* IteratorGetType; |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 979 }; | 1009 }; |
| 980 | 1010 |
| 981 template<typename T, typename U> | 1011 template<typename T, typename U> |
| 982 struct NeedsTracing<HashMap<T, U> > { | 1012 struct NeedsTracing<HashMap<T, U> > { |
| 983 static const bool value = false; | 1013 static const bool value = false; |
| 984 }; | 1014 }; |
| 985 | 1015 |
| 986 } // namespace WTF | 1016 } // namespace WTF |
| 987 | 1017 |
| 988 #endif | 1018 #endif |
| OLD | NEW |