| 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 23 matching lines...) Expand all Loading... |
| 34 #include "platform/heap/Heap.h" | 34 #include "platform/heap/Heap.h" |
| 35 #include "platform/heap/ThreadState.h" | 35 #include "platform/heap/ThreadState.h" |
| 36 #include "platform/heap/Visitor.h" | 36 #include "platform/heap/Visitor.h" |
| 37 #include "wtf/Functional.h" | 37 #include "wtf/Functional.h" |
| 38 #include "wtf/HashFunctions.h" | 38 #include "wtf/HashFunctions.h" |
| 39 #include "wtf/Locker.h" | 39 #include "wtf/Locker.h" |
| 40 #include "wtf/RawPtr.h" | 40 #include "wtf/RawPtr.h" |
| 41 #include "wtf/RefCounted.h" | 41 #include "wtf/RefCounted.h" |
| 42 #include "wtf/TypeTraits.h" | 42 #include "wtf/TypeTraits.h" |
| 43 | 43 |
| 44 namespace WebCore { | 44 namespace blink { |
| 45 | 45 |
| 46 template<typename T> class HeapTerminatedArray; | 46 template<typename T> class HeapTerminatedArray; |
| 47 | 47 |
| 48 // Template to determine if a class is a GarbageCollectedMixin by checking if it | 48 // Template to determine if a class is a GarbageCollectedMixin by checking if it |
| 49 // has adjustAndMark and isAlive. We can't check directly if the class is a | 49 // has adjustAndMark and isAlive. We can't check directly if the class is a |
| 50 // GarbageCollectedMixin because casting to it is potentially ambiguous. | 50 // GarbageCollectedMixin because casting to it is potentially ambiguous. |
| 51 template<typename T> | 51 template<typename T> |
| 52 struct IsGarbageCollectedMixin { | 52 struct IsGarbageCollectedMixin { |
| 53 typedef char TrueType; | 53 typedef char TrueType; |
| 54 struct FalseType { | 54 struct FalseType { |
| (...skipping 728 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 783 template<typename T, typename U> inline bool operator!=(const Persistent<T>& a,
const Persistent<U>& b) { return a.get() != b.get(); } | 783 template<typename T, typename U> inline bool operator!=(const Persistent<T>& a,
const Persistent<U>& b) { return a.get() != b.get(); } |
| 784 | 784 |
| 785 // CPP-defined type names for the transition period where we want to | 785 // CPP-defined type names for the transition period where we want to |
| 786 // support both reference counting and garbage collection based on a | 786 // support both reference counting and garbage collection based on a |
| 787 // compile-time flag. | 787 // compile-time flag. |
| 788 // | 788 // |
| 789 // C++11 template aliases were initially used (with clang only, not | 789 // C++11 template aliases were initially used (with clang only, not |
| 790 // with GCC nor MSVC.) However, supporting both CPP defines and | 790 // with GCC nor MSVC.) However, supporting both CPP defines and |
| 791 // template aliases is problematic from outside a WebCore namespace | 791 // template aliases is problematic from outside a WebCore namespace |
| 792 // when Oilpan is disabled: e.g., | 792 // when Oilpan is disabled: e.g., |
| 793 // WebCore::RefCountedWillBeGarbageCollected as a template alias would | 793 // blink::RefCountedWillBeGarbageCollected as a template alias would |
| 794 // uniquely resolve from within any namespace, but if it is backed by | 794 // uniquely resolve from within any namespace, but if it is backed by |
| 795 // a CPP #define, it would expand to WebCore::RefCounted, and not the | 795 // a CPP #define, it would expand to blink::RefCounted, and not the |
| 796 // required WTF::RefCounted. | 796 // required WTF::RefCounted. |
| 797 // | 797 // |
| 798 // Having the CPP expansion instead be fully namespace qualified, and the | 798 // Having the CPP expansion instead be fully namespace qualified, and the |
| 799 // transition type be unqualified, would dually not work for template | 799 // transition type be unqualified, would dually not work for template |
| 800 // aliases. So, slightly unfortunately, fall back/down to the lowest | 800 // aliases. So, slightly unfortunately, fall back/down to the lowest |
| 801 // commmon denominator of using CPP macros only. | 801 // commmon denominator of using CPP macros only. |
| 802 #if ENABLE(OILPAN) | 802 #if ENABLE(OILPAN) |
| 803 #define PassRefPtrWillBeRawPtr WTF::RawPtr | 803 #define PassRefPtrWillBeRawPtr WTF::RawPtr |
| 804 #define RefCountedWillBeGarbageCollected WebCore::GarbageCollected | 804 #define RefCountedWillBeGarbageCollected blink::GarbageCollected |
| 805 #define RefCountedWillBeGarbageCollectedFinalized WebCore::GarbageCollectedFinal
ized | 805 #define RefCountedWillBeGarbageCollectedFinalized blink::GarbageCollectedFinaliz
ed |
| 806 #define RefCountedWillBeRefCountedGarbageCollected WebCore::RefCountedGarbageCol
lected | 806 #define RefCountedWillBeRefCountedGarbageCollected blink::RefCountedGarbageColle
cted |
| 807 #define RefCountedGarbageCollectedWillBeGarbageCollectedFinalized WebCore::Garba
geCollectedFinalized | 807 #define RefCountedGarbageCollectedWillBeGarbageCollectedFinalized blink::Garbage
CollectedFinalized |
| 808 #define ThreadSafeRefCountedWillBeGarbageCollected WebCore::GarbageCollected | 808 #define ThreadSafeRefCountedWillBeGarbageCollected blink::GarbageCollected |
| 809 #define ThreadSafeRefCountedWillBeGarbageCollectedFinalized WebCore::GarbageColl
ectedFinalized | 809 #define ThreadSafeRefCountedWillBeGarbageCollectedFinalized blink::GarbageCollec
tedFinalized |
| 810 #define ThreadSafeRefCountedWillBeThreadSafeRefCountedGarbageCollected WebCore::
ThreadSafeRefCountedGarbageCollected | 810 #define ThreadSafeRefCountedWillBeThreadSafeRefCountedGarbageCollected blink::Th
readSafeRefCountedGarbageCollected |
| 811 #define PersistentWillBeMember WebCore::Member | 811 #define PersistentWillBeMember blink::Member |
| 812 #define RefPtrWillBePersistent WebCore::Persistent | 812 #define RefPtrWillBePersistent blink::Persistent |
| 813 #define RefPtrWillBeRawPtr WTF::RawPtr | 813 #define RefPtrWillBeRawPtr WTF::RawPtr |
| 814 #define RefPtrWillBeMember WebCore::Member | 814 #define RefPtrWillBeMember blink::Member |
| 815 #define RefPtrWillBeWeakMember WebCore::WeakMember | 815 #define RefPtrWillBeWeakMember blink::WeakMember |
| 816 #define RefPtrWillBeCrossThreadPersistent WebCore::CrossThreadPersistent | 816 #define RefPtrWillBeCrossThreadPersistent blink::CrossThreadPersistent |
| 817 #define RawPtrWillBeMember WebCore::Member | 817 #define RawPtrWillBeMember blink::Member |
| 818 #define RawPtrWillBeWeakMember WebCore::WeakMember | 818 #define RawPtrWillBeWeakMember blink::WeakMember |
| 819 #define OwnPtrWillBeMember WebCore::Member | 819 #define OwnPtrWillBeMember blink::Member |
| 820 #define OwnPtrWillBePersistent WebCore::Persistent | 820 #define OwnPtrWillBePersistent blink::Persistent |
| 821 #define OwnPtrWillBeRawPtr WTF::RawPtr | 821 #define OwnPtrWillBeRawPtr WTF::RawPtr |
| 822 #define PassOwnPtrWillBeRawPtr WTF::RawPtr | 822 #define PassOwnPtrWillBeRawPtr WTF::RawPtr |
| 823 #define WeakPtrWillBeMember WebCore::Member | 823 #define WeakPtrWillBeMember blink::Member |
| 824 #define WeakPtrWillBeRawPtr WTF::RawPtr | 824 #define WeakPtrWillBeRawPtr WTF::RawPtr |
| 825 #define WeakPtrWillBeMember WebCore::Member | 825 #define WeakPtrWillBeMember blink::Member |
| 826 #define WeakPtrWillBeWeakMember WebCore::WeakMember | 826 #define WeakPtrWillBeWeakMember blink::WeakMember |
| 827 #define NoBaseWillBeGarbageCollected WebCore::GarbageCollected | 827 #define NoBaseWillBeGarbageCollected blink::GarbageCollected |
| 828 #define NoBaseWillBeGarbageCollectedFinalized WebCore::GarbageCollectedFinalized | 828 #define NoBaseWillBeGarbageCollectedFinalized blink::GarbageCollectedFinalized |
| 829 #define NoBaseWillBeRefCountedGarbageCollected WebCore::RefCountedGarbageCollect
ed | 829 #define NoBaseWillBeRefCountedGarbageCollected blink::RefCountedGarbageCollected |
| 830 #define WillBeHeapHashMap WebCore::HeapHashMap | 830 #define WillBeHeapHashMap blink::HeapHashMap |
| 831 #define WillBePersistentHeapHashMap WebCore::PersistentHeapHashMap | 831 #define WillBePersistentHeapHashMap blink::PersistentHeapHashMap |
| 832 #define WillBeHeapHashSet WebCore::HeapHashSet | 832 #define WillBeHeapHashSet blink::HeapHashSet |
| 833 #define WillBePersistentHeapHashSet WebCore::PersistentHeapHashSet | 833 #define WillBePersistentHeapHashSet blink::PersistentHeapHashSet |
| 834 #define WillBeHeapLinkedHashSet WebCore::HeapLinkedHashSet | 834 #define WillBeHeapLinkedHashSet blink::HeapLinkedHashSet |
| 835 #define WillBePersistentHeapLinkedHashSet WebCore::PersistentHeapLinkedHashSet | 835 #define WillBePersistentHeapLinkedHashSet blink::PersistentHeapLinkedHashSet |
| 836 #define WillBeHeapListHashSet WebCore::HeapListHashSet | 836 #define WillBeHeapListHashSet blink::HeapListHashSet |
| 837 #define WillBePersistentHeapListHashSet WebCore::PersistentHeapListHashSet | 837 #define WillBePersistentHeapListHashSet blink::PersistentHeapListHashSet |
| 838 #define WillBeHeapVector WebCore::HeapVector | 838 #define WillBeHeapVector blink::HeapVector |
| 839 #define WillBePersistentHeapVector WebCore::PersistentHeapVector | 839 #define WillBePersistentHeapVector blink::PersistentHeapVector |
| 840 #define WillBeHeapDeque WebCore::HeapDeque | 840 #define WillBeHeapDeque blink::HeapDeque |
| 841 #define WillBePersistentHeapDeque WebCore::PersistentHeapDeque | 841 #define WillBePersistentHeapDeque blink::PersistentHeapDeque |
| 842 #define WillBeHeapHashCountedSet WebCore::HeapHashCountedSet | 842 #define WillBeHeapHashCountedSet blink::HeapHashCountedSet |
| 843 #define WillBePersistentHeapHashCountedSet WebCore::PersistentHeapHashCountedSet | 843 #define WillBePersistentHeapHashCountedSet blink::PersistentHeapHashCountedSet |
| 844 #define WillBeGarbageCollectedMixin WebCore::GarbageCollectedMixin | 844 #define WillBeGarbageCollectedMixin blink::GarbageCollectedMixin |
| 845 #define WillBeHeapSupplement WebCore::HeapSupplement | 845 #define WillBeHeapSupplement blink::HeapSupplement |
| 846 #define WillBeHeapSupplementable WebCore::HeapSupplementable | 846 #define WillBeHeapSupplementable blink::HeapSupplementable |
| 847 #define WillBePersistentHeapSupplementable WebCore::PersistentHeapSupplementable | 847 #define WillBePersistentHeapSupplementable blink::PersistentHeapSupplementable |
| 848 #define WillBeHeapTerminatedArray WebCore::HeapTerminatedArray | 848 #define WillBeHeapTerminatedArray blink::HeapTerminatedArray |
| 849 #define WillBeHeapTerminatedArrayBuilder WebCore::HeapTerminatedArrayBuilder | 849 #define WillBeHeapTerminatedArrayBuilder blink::HeapTerminatedArrayBuilder |
| 850 #define WillBeHeapLinkedStack WebCore::HeapLinkedStack | 850 #define WillBeHeapLinkedStack blink::HeapLinkedStack |
| 851 #define PersistentHeapHashSetWillBeHeapHashSet WebCore::HeapHashSet | 851 #define PersistentHeapHashSetWillBeHeapHashSet blink::HeapHashSet |
| 852 #define PersistentHeapDequeWillBeHeapDeque WebCore::HeapDeque | 852 #define PersistentHeapDequeWillBeHeapDeque blink::HeapDeque |
| 853 | 853 |
| 854 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) | 854 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) |
| 855 { | 855 { |
| 856 static const bool notRefCountedGarbageCollected = !WTF::IsSubclassOfTemplate
<typename WTF::RemoveConst<T>::Type, RefCountedGarbageCollected>::value; | 856 static const bool notRefCountedGarbageCollected = !WTF::IsSubclassOfTemplate
<typename WTF::RemoveConst<T>::Type, RefCountedGarbageCollected>::value; |
| 857 static const bool notRefCounted = !WTF::IsSubclassOfTemplate<typename WTF::R
emoveConst<T>::Type, RefCounted>::value; | 857 static const bool notRefCounted = !WTF::IsSubclassOfTemplate<typename WTF::R
emoveConst<T>::Type, RefCounted>::value; |
| 858 COMPILE_ASSERT(notRefCountedGarbageCollected, useAdoptRefCountedWillBeRefCou
ntedGarbageCollected); | 858 COMPILE_ASSERT(notRefCountedGarbageCollected, useAdoptRefCountedWillBeRefCou
ntedGarbageCollected); |
| 859 COMPILE_ASSERT(notRefCounted, youMustAdopt); | 859 COMPILE_ASSERT(notRefCounted, youMustAdopt); |
| 860 return PassRefPtrWillBeRawPtr<T>(ptr); | 860 return PassRefPtrWillBeRawPtr<T>(ptr); |
| 861 } | 861 } |
| 862 | 862 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 917 }; | 917 }; |
| 918 | 918 |
| 919 // Export this instance to support WillBeGarbageCollectedMixin | 919 // Export this instance to support WillBeGarbageCollectedMixin |
| 920 // uses by code residing in non-webcore components. | 920 // uses by code residing in non-webcore components. |
| 921 template class PLATFORM_EXPORT DummyBase<void>; | 921 template class PLATFORM_EXPORT DummyBase<void>; |
| 922 | 922 |
| 923 #define PassRefPtrWillBeRawPtr WTF::PassRefPtr | 923 #define PassRefPtrWillBeRawPtr WTF::PassRefPtr |
| 924 #define RefCountedWillBeGarbageCollected WTF::RefCounted | 924 #define RefCountedWillBeGarbageCollected WTF::RefCounted |
| 925 #define RefCountedWillBeGarbageCollectedFinalized WTF::RefCounted | 925 #define RefCountedWillBeGarbageCollectedFinalized WTF::RefCounted |
| 926 #define RefCountedWillBeRefCountedGarbageCollected WTF::RefCounted | 926 #define RefCountedWillBeRefCountedGarbageCollected WTF::RefCounted |
| 927 #define RefCountedGarbageCollectedWillBeGarbageCollectedFinalized WebCore::RefCo
untedGarbageCollected | 927 #define RefCountedGarbageCollectedWillBeGarbageCollectedFinalized blink::RefCoun
tedGarbageCollected |
| 928 #define ThreadSafeRefCountedWillBeGarbageCollected WTF::ThreadSafeRefCounted | 928 #define ThreadSafeRefCountedWillBeGarbageCollected WTF::ThreadSafeRefCounted |
| 929 #define ThreadSafeRefCountedWillBeGarbageCollectedFinalized WTF::ThreadSafeRefCo
unted | 929 #define ThreadSafeRefCountedWillBeGarbageCollectedFinalized WTF::ThreadSafeRefCo
unted |
| 930 #define ThreadSafeRefCountedWillBeThreadSafeRefCountedGarbageCollected WTF::Thre
adSafeRefCounted | 930 #define ThreadSafeRefCountedWillBeThreadSafeRefCountedGarbageCollected WTF::Thre
adSafeRefCounted |
| 931 #define PersistentWillBeMember WebCore::Persistent | 931 #define PersistentWillBeMember blink::Persistent |
| 932 #define RefPtrWillBePersistent WTF::RefPtr | 932 #define RefPtrWillBePersistent WTF::RefPtr |
| 933 #define RefPtrWillBeRawPtr WTF::RefPtr | 933 #define RefPtrWillBeRawPtr WTF::RefPtr |
| 934 #define RefPtrWillBeMember WTF::RefPtr | 934 #define RefPtrWillBeMember WTF::RefPtr |
| 935 #define RefPtrWillBeWeakMember WTF::RefPtr | 935 #define RefPtrWillBeWeakMember WTF::RefPtr |
| 936 #define RefPtrWillBeCrossThreadPersistent WTF::RefPtr | 936 #define RefPtrWillBeCrossThreadPersistent WTF::RefPtr |
| 937 #define RawPtrWillBeMember WTF::RawPtr | 937 #define RawPtrWillBeMember WTF::RawPtr |
| 938 #define RawPtrWillBeWeakMember WTF::RawPtr | 938 #define RawPtrWillBeWeakMember WTF::RawPtr |
| 939 #define OwnPtrWillBeMember WTF::OwnPtr | 939 #define OwnPtrWillBeMember WTF::OwnPtr |
| 940 #define OwnPtrWillBePersistent WTF::OwnPtr | 940 #define OwnPtrWillBePersistent WTF::OwnPtr |
| 941 #define OwnPtrWillBeRawPtr WTF::OwnPtr | 941 #define OwnPtrWillBeRawPtr WTF::OwnPtr |
| 942 #define PassOwnPtrWillBeRawPtr WTF::PassOwnPtr | 942 #define PassOwnPtrWillBeRawPtr WTF::PassOwnPtr |
| 943 #define WeakPtrWillBeMember WTF::WeakPtr | 943 #define WeakPtrWillBeMember WTF::WeakPtr |
| 944 #define WeakPtrWillBeRawPtr WTF::WeakPtr | 944 #define WeakPtrWillBeRawPtr WTF::WeakPtr |
| 945 #define WeakPtrWillBeMember WTF::WeakPtr | 945 #define WeakPtrWillBeMember WTF::WeakPtr |
| 946 #define WeakPtrWillBeWeakMember WTF::WeakPtr | 946 #define WeakPtrWillBeWeakMember WTF::WeakPtr |
| 947 #define NoBaseWillBeGarbageCollected WebCore::DummyBase | 947 #define NoBaseWillBeGarbageCollected blink::DummyBase |
| 948 #define NoBaseWillBeGarbageCollectedFinalized WebCore::DummyBase | 948 #define NoBaseWillBeGarbageCollectedFinalized blink::DummyBase |
| 949 #define NoBaseWillBeRefCountedGarbageCollected WebCore::DummyBase | 949 #define NoBaseWillBeRefCountedGarbageCollected blink::DummyBase |
| 950 #define WillBeHeapHashMap WTF::HashMap | 950 #define WillBeHeapHashMap WTF::HashMap |
| 951 #define WillBePersistentHeapHashMap WTF::HashMap | 951 #define WillBePersistentHeapHashMap WTF::HashMap |
| 952 #define WillBeHeapHashSet WTF::HashSet | 952 #define WillBeHeapHashSet WTF::HashSet |
| 953 #define WillBePersistentHeapHashSet WTF::HashSet | 953 #define WillBePersistentHeapHashSet WTF::HashSet |
| 954 #define WillBeHeapLinkedHashSet WTF::LinkedHashSet | 954 #define WillBeHeapLinkedHashSet WTF::LinkedHashSet |
| 955 #define WillBePersistentLinkedHeapHashSet WTF::LinkedHashSet | 955 #define WillBePersistentLinkedHeapHashSet WTF::LinkedHashSet |
| 956 #define WillBeHeapListHashSet WTF::ListHashSet | 956 #define WillBeHeapListHashSet WTF::ListHashSet |
| 957 #define WillBePersistentListHeapHashSet WTF::ListHashSet | 957 #define WillBePersistentListHeapHashSet WTF::ListHashSet |
| 958 #define WillBeHeapVector WTF::Vector | 958 #define WillBeHeapVector WTF::Vector |
| 959 #define WillBePersistentHeapVector WTF::Vector | 959 #define WillBePersistentHeapVector WTF::Vector |
| 960 #define WillBeHeapDeque WTF::Deque | 960 #define WillBeHeapDeque WTF::Deque |
| 961 #define WillBePersistentHeapDeque WTF::Deque | 961 #define WillBePersistentHeapDeque WTF::Deque |
| 962 #define WillBeHeapHashCountedSet WTF::HashCountedSet | 962 #define WillBeHeapHashCountedSet WTF::HashCountedSet |
| 963 #define WillBePersistentHeapHashCountedSet WTF::HashCountedSet | 963 #define WillBePersistentHeapHashCountedSet WTF::HashCountedSet |
| 964 #define WillBeGarbageCollectedMixin WebCore::DummyBase<void> | 964 #define WillBeGarbageCollectedMixin blink::DummyBase<void> |
| 965 #define WillBeHeapSupplement WebCore::Supplement | 965 #define WillBeHeapSupplement blink::Supplement |
| 966 #define WillBeHeapSupplementable WebCore::Supplementable | 966 #define WillBeHeapSupplementable blink::Supplementable |
| 967 #define WillBePersistentHeapSupplementable WebCore::Supplementable | 967 #define WillBePersistentHeapSupplementable blink::Supplementable |
| 968 #define WillBeHeapTerminatedArray WTF::TerminatedArray | 968 #define WillBeHeapTerminatedArray WTF::TerminatedArray |
| 969 #define WillBeHeapTerminatedArrayBuilder WTF::TerminatedArrayBuilder | 969 #define WillBeHeapTerminatedArrayBuilder WTF::TerminatedArrayBuilder |
| 970 #define WillBeHeapLinkedStack WTF::LinkedStack | 970 #define WillBeHeapLinkedStack WTF::LinkedStack |
| 971 #define PersistentHeapHashSetWillBeHeapHashSet WebCore::PersistentHeapHashSet | 971 #define PersistentHeapHashSetWillBeHeapHashSet blink::PersistentHeapHashSet |
| 972 #define PersistentHeapDequeWillBeHeapDeque WebCore::PersistentHeapDeque | 972 #define PersistentHeapDequeWillBeHeapDeque blink::PersistentHeapDeque |
| 973 | 973 |
| 974 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) { retu
rn adoptRef(ptr); } | 974 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeNoop(T* ptr) { retu
rn adoptRef(ptr); } |
| 975 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeRefCountedGarbageCo
llected(T* ptr) { return adoptRef(ptr); } | 975 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeRefCountedGarbageCo
llected(T* ptr) { return adoptRef(ptr); } |
| 976 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeThreadSafeRefCounte
dGarbageCollected(T* ptr) { return adoptRef(ptr); } | 976 template<typename T> PassRefPtrWillBeRawPtr<T> adoptRefWillBeThreadSafeRefCounte
dGarbageCollected(T* ptr) { return adoptRef(ptr); } |
| 977 template<typename T> PassOwnPtrWillBeRawPtr<T> adoptPtrWillBeNoop(T* ptr) { retu
rn adoptPtr(ptr); } | 977 template<typename T> PassOwnPtrWillBeRawPtr<T> adoptPtrWillBeNoop(T* ptr) { retu
rn adoptPtr(ptr); } |
| 978 template<typename T> PassOwnPtrWillBeRawPtr<T> adoptPtrWillBeRefCountedGarbageCo
llected(T* ptr) { return adoptPtr(ptr); } | 978 template<typename T> PassOwnPtrWillBeRawPtr<T> adoptPtrWillBeRefCountedGarbageCo
llected(T* ptr) { return adoptPtr(ptr); } |
| 979 | 979 |
| 980 template<typename T> T* adoptRefCountedGarbageCollectedWillBeNoop(T* ptr) | 980 template<typename T> T* adoptRefCountedGarbageCollectedWillBeNoop(T* ptr) |
| 981 { | 981 { |
| 982 static const bool isRefCountedGarbageCollected = WTF::IsSubclassOfTemplate<t
ypename WTF::RemoveConst<T>::Type, RefCountedGarbageCollected>::value; | 982 static const bool isRefCountedGarbageCollected = WTF::IsSubclassOfTemplate<t
ypename WTF::RemoveConst<T>::Type, RefCountedGarbageCollected>::value; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 996 private: | 996 private: |
| 997 | 997 |
| 998 #define DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(type) \ | 998 #define DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(type) \ |
| 999 type::~type() { } | 999 type::~type() { } |
| 1000 | 1000 |
| 1001 #define DEFINE_STATIC_REF_WILL_BE_PERSISTENT(type, name, arguments) \ | 1001 #define DEFINE_STATIC_REF_WILL_BE_PERSISTENT(type, name, arguments) \ |
| 1002 DEFINE_STATIC_REF(type, name, arguments) | 1002 DEFINE_STATIC_REF(type, name, arguments) |
| 1003 | 1003 |
| 1004 #endif // ENABLE(OILPAN) | 1004 #endif // ENABLE(OILPAN) |
| 1005 | 1005 |
| 1006 } // namespace WebCore | 1006 } // namespace blink |
| 1007 | 1007 |
| 1008 namespace WTF { | 1008 namespace WTF { |
| 1009 | 1009 |
| 1010 template <typename T> struct VectorTraits<WebCore::Member<T> > : VectorTraitsBas
e<WebCore::Member<T> > { | 1010 template <typename T> struct VectorTraits<blink::Member<T> > : VectorTraitsBase<
blink::Member<T> > { |
| 1011 static const bool needsDestruction = false; | 1011 static const bool needsDestruction = false; |
| 1012 static const bool canInitializeWithMemset = true; | 1012 static const bool canInitializeWithMemset = true; |
| 1013 static const bool canMoveWithMemcpy = true; | 1013 static const bool canMoveWithMemcpy = true; |
| 1014 }; | 1014 }; |
| 1015 | 1015 |
| 1016 template <typename T> struct VectorTraits<WebCore::WeakMember<T> > : VectorTrait
sBase<WebCore::WeakMember<T> > { | 1016 template <typename T> struct VectorTraits<blink::WeakMember<T> > : VectorTraitsB
ase<blink::WeakMember<T> > { |
| 1017 static const bool needsDestruction = false; | 1017 static const bool needsDestruction = false; |
| 1018 static const bool canInitializeWithMemset = true; | 1018 static const bool canInitializeWithMemset = true; |
| 1019 static const bool canMoveWithMemcpy = true; | 1019 static const bool canMoveWithMemcpy = true; |
| 1020 }; | 1020 }; |
| 1021 | 1021 |
| 1022 template <typename T> struct VectorTraits<WebCore::HeapVector<T, 0> > : VectorTr
aitsBase<WebCore::HeapVector<T, 0> > { | 1022 template <typename T> struct VectorTraits<blink::HeapVector<T, 0> > : VectorTrai
tsBase<blink::HeapVector<T, 0> > { |
| 1023 static const bool needsDestruction = false; | 1023 static const bool needsDestruction = false; |
| 1024 static const bool canInitializeWithMemset = true; | 1024 static const bool canInitializeWithMemset = true; |
| 1025 static const bool canMoveWithMemcpy = true; | 1025 static const bool canMoveWithMemcpy = true; |
| 1026 }; | 1026 }; |
| 1027 | 1027 |
| 1028 template <typename T> struct VectorTraits<WebCore::HeapDeque<T, 0> > : VectorTra
itsBase<WebCore::HeapDeque<T, 0> > { | 1028 template <typename T> struct VectorTraits<blink::HeapDeque<T, 0> > : VectorTrait
sBase<blink::HeapDeque<T, 0> > { |
| 1029 static const bool needsDestruction = false; | 1029 static const bool needsDestruction = false; |
| 1030 static const bool canInitializeWithMemset = true; | 1030 static const bool canInitializeWithMemset = true; |
| 1031 static const bool canMoveWithMemcpy = true; | 1031 static const bool canMoveWithMemcpy = true; |
| 1032 }; | 1032 }; |
| 1033 | 1033 |
| 1034 template <typename T, size_t inlineCapacity> struct VectorTraits<WebCore::HeapVe
ctor<T, inlineCapacity> > : VectorTraitsBase<WebCore::HeapVector<T, inlineCapaci
ty> > { | 1034 template <typename T, size_t inlineCapacity> struct VectorTraits<blink::HeapVect
or<T, inlineCapacity> > : VectorTraitsBase<blink::HeapVector<T, inlineCapacity>
> { |
| 1035 static const bool needsDestruction = VectorTraits<T>::needsDestruction; | 1035 static const bool needsDestruction = VectorTraits<T>::needsDestruction; |
| 1036 static const bool canInitializeWithMemset = VectorTraits<T>::canInitializeWi
thMemset; | 1036 static const bool canInitializeWithMemset = VectorTraits<T>::canInitializeWi
thMemset; |
| 1037 static const bool canMoveWithMemcpy = VectorTraits<T>::canMoveWithMemcpy; | 1037 static const bool canMoveWithMemcpy = VectorTraits<T>::canMoveWithMemcpy; |
| 1038 }; | 1038 }; |
| 1039 | 1039 |
| 1040 template <typename T, size_t inlineCapacity> struct VectorTraits<WebCore::HeapDe
que<T, inlineCapacity> > : VectorTraitsBase<WebCore::HeapDeque<T, inlineCapacity
> > { | 1040 template <typename T, size_t inlineCapacity> struct VectorTraits<blink::HeapDequ
e<T, inlineCapacity> > : VectorTraitsBase<blink::HeapDeque<T, inlineCapacity> >
{ |
| 1041 static const bool needsDestruction = VectorTraits<T>::needsDestruction; | 1041 static const bool needsDestruction = VectorTraits<T>::needsDestruction; |
| 1042 static const bool canInitializeWithMemset = VectorTraits<T>::canInitializeWi
thMemset; | 1042 static const bool canInitializeWithMemset = VectorTraits<T>::canInitializeWi
thMemset; |
| 1043 static const bool canMoveWithMemcpy = VectorTraits<T>::canMoveWithMemcpy; | 1043 static const bool canMoveWithMemcpy = VectorTraits<T>::canMoveWithMemcpy; |
| 1044 }; | 1044 }; |
| 1045 | 1045 |
| 1046 template<typename T> struct HashTraits<WebCore::Member<T> > : SimpleClassHashTra
its<WebCore::Member<T> > { | 1046 template<typename T> struct HashTraits<blink::Member<T> > : SimpleClassHashTrait
s<blink::Member<T> > { |
| 1047 static const bool needsDestruction = false; | 1047 static const bool needsDestruction = false; |
| 1048 // FIXME: The distinction between PeekInType and PassInType is there for | 1048 // FIXME: The distinction between PeekInType and PassInType is there for |
| 1049 // the sake of the reference counting handles. When they are gone the two | 1049 // the sake of the reference counting handles. When they are gone the two |
| 1050 // types can be merged into PassInType. | 1050 // types can be merged into PassInType. |
| 1051 // FIXME: Implement proper const'ness for iterator types. Requires support | 1051 // FIXME: Implement proper const'ness for iterator types. Requires support |
| 1052 // in the marking Visitor. | 1052 // in the marking Visitor. |
| 1053 typedef RawPtr<T> PeekInType; | 1053 typedef RawPtr<T> PeekInType; |
| 1054 typedef RawPtr<T> PassInType; | 1054 typedef RawPtr<T> PassInType; |
| 1055 typedef WebCore::Member<T>* IteratorGetType; | 1055 typedef blink::Member<T>* IteratorGetType; |
| 1056 typedef const WebCore::Member<T>* IteratorConstGetType; | 1056 typedef const blink::Member<T>* IteratorConstGetType; |
| 1057 typedef WebCore::Member<T>& IteratorReferenceType; | 1057 typedef blink::Member<T>& IteratorReferenceType; |
| 1058 typedef T* const IteratorConstReferenceType; | 1058 typedef T* const IteratorConstReferenceType; |
| 1059 static IteratorReferenceType getToReferenceConversion(IteratorGetType x) { r
eturn *x; } | 1059 static IteratorReferenceType getToReferenceConversion(IteratorGetType x) { r
eturn *x; } |
| 1060 static IteratorConstReferenceType getToReferenceConstConversion(IteratorCons
tGetType x) { return x->get(); } | 1060 static IteratorConstReferenceType getToReferenceConstConversion(IteratorCons
tGetType x) { return x->get(); } |
| 1061 // FIXME: Similarly, there is no need for a distinction between PeekOutType | 1061 // FIXME: Similarly, there is no need for a distinction between PeekOutType |
| 1062 // and PassOutType without reference counting. | 1062 // and PassOutType without reference counting. |
| 1063 typedef T* PeekOutType; | 1063 typedef T* PeekOutType; |
| 1064 typedef T* PassOutType; | 1064 typedef T* PassOutType; |
| 1065 | 1065 |
| 1066 template<typename U> | 1066 template<typename U> |
| 1067 static void store(const U& value, WebCore::Member<T>& storage) { storage = v
alue; } | 1067 static void store(const U& value, blink::Member<T>& storage) { storage = val
ue; } |
| 1068 | 1068 |
| 1069 static PeekOutType peek(const WebCore::Member<T>& value) { return value; } | 1069 static PeekOutType peek(const blink::Member<T>& value) { return value; } |
| 1070 static PassOutType passOut(const WebCore::Member<T>& value) { return value;
} | 1070 static PassOutType passOut(const blink::Member<T>& value) { return value; } |
| 1071 }; | 1071 }; |
| 1072 | 1072 |
| 1073 template<typename T> struct HashTraits<WebCore::WeakMember<T> > : SimpleClassHas
hTraits<WebCore::WeakMember<T> > { | 1073 template<typename T> struct HashTraits<blink::WeakMember<T> > : SimpleClassHashT
raits<blink::WeakMember<T> > { |
| 1074 static const bool needsDestruction = false; | 1074 static const bool needsDestruction = false; |
| 1075 // FIXME: The distinction between PeekInType and PassInType is there for | 1075 // FIXME: The distinction between PeekInType and PassInType is there for |
| 1076 // the sake of the reference counting handles. When they are gone the two | 1076 // the sake of the reference counting handles. When they are gone the two |
| 1077 // types can be merged into PassInType. | 1077 // types can be merged into PassInType. |
| 1078 // FIXME: Implement proper const'ness for iterator types. Requires support | 1078 // FIXME: Implement proper const'ness for iterator types. Requires support |
| 1079 // in the marking Visitor. | 1079 // in the marking Visitor. |
| 1080 typedef RawPtr<T> PeekInType; | 1080 typedef RawPtr<T> PeekInType; |
| 1081 typedef RawPtr<T> PassInType; | 1081 typedef RawPtr<T> PassInType; |
| 1082 typedef WebCore::WeakMember<T>* IteratorGetType; | 1082 typedef blink::WeakMember<T>* IteratorGetType; |
| 1083 typedef const WebCore::WeakMember<T>* IteratorConstGetType; | 1083 typedef const blink::WeakMember<T>* IteratorConstGetType; |
| 1084 typedef WebCore::WeakMember<T>& IteratorReferenceType; | 1084 typedef blink::WeakMember<T>& IteratorReferenceType; |
| 1085 typedef T* const IteratorConstReferenceType; | 1085 typedef T* const IteratorConstReferenceType; |
| 1086 static IteratorReferenceType getToReferenceConversion(IteratorGetType x) { r
eturn *x; } | 1086 static IteratorReferenceType getToReferenceConversion(IteratorGetType x) { r
eturn *x; } |
| 1087 static IteratorConstReferenceType getToReferenceConstConversion(IteratorCons
tGetType x) { return x->get(); } | 1087 static IteratorConstReferenceType getToReferenceConstConversion(IteratorCons
tGetType x) { return x->get(); } |
| 1088 // FIXME: Similarly, there is no need for a distinction between PeekOutType | 1088 // FIXME: Similarly, there is no need for a distinction between PeekOutType |
| 1089 // and PassOutType without reference counting. | 1089 // and PassOutType without reference counting. |
| 1090 typedef T* PeekOutType; | 1090 typedef T* PeekOutType; |
| 1091 typedef T* PassOutType; | 1091 typedef T* PassOutType; |
| 1092 | 1092 |
| 1093 template<typename U> | 1093 template<typename U> |
| 1094 static void store(const U& value, WebCore::WeakMember<T>& storage) { storage
= value; } | 1094 static void store(const U& value, blink::WeakMember<T>& storage) { storage =
value; } |
| 1095 | 1095 |
| 1096 static PeekOutType peek(const WebCore::WeakMember<T>& value) { return value;
} | 1096 static PeekOutType peek(const blink::WeakMember<T>& value) { return value; } |
| 1097 static PassOutType passOut(const WebCore::WeakMember<T>& value) { return val
ue; } | 1097 static PassOutType passOut(const blink::WeakMember<T>& value) { return value
; } |
| 1098 static bool traceInCollection(WebCore::Visitor* visitor, WebCore::WeakMember
<T>& weakMember, ShouldWeakPointersBeMarkedStrongly strongify) | 1098 static bool traceInCollection(blink::Visitor* visitor, blink::WeakMember<T>&
weakMember, ShouldWeakPointersBeMarkedStrongly strongify) |
| 1099 { | 1099 { |
| 1100 if (strongify == WeakPointersActStrong) { | 1100 if (strongify == WeakPointersActStrong) { |
| 1101 visitor->trace(reinterpret_cast<WebCore::Member<T>&>(weakMember)); /
/ Strongified visit. | 1101 visitor->trace(reinterpret_cast<blink::Member<T>&>(weakMember)); //
Strongified visit. |
| 1102 return false; | 1102 return false; |
| 1103 } | 1103 } |
| 1104 return !visitor->isAlive(weakMember); | 1104 return !visitor->isAlive(weakMember); |
| 1105 } | 1105 } |
| 1106 }; | 1106 }; |
| 1107 | 1107 |
| 1108 template<typename T> struct PtrHash<WebCore::Member<T> > : PtrHash<T*> { | 1108 template<typename T> struct PtrHash<blink::Member<T> > : PtrHash<T*> { |
| 1109 template<typename U> | 1109 template<typename U> |
| 1110 static unsigned hash(const U& key) { return PtrHash<T*>::hash(key); } | 1110 static unsigned hash(const U& key) { return PtrHash<T*>::hash(key); } |
| 1111 static bool equal(T* a, const WebCore::Member<T>& b) { return a == b; } | 1111 static bool equal(T* a, const blink::Member<T>& b) { return a == b; } |
| 1112 static bool equal(const WebCore::Member<T>& a, T* b) { return a == b; } | 1112 static bool equal(const blink::Member<T>& a, T* b) { return a == b; } |
| 1113 template<typename U, typename V> | 1113 template<typename U, typename V> |
| 1114 static bool equal(const U& a, const V& b) { return a == b; } | 1114 static bool equal(const U& a, const V& b) { return a == b; } |
| 1115 }; | 1115 }; |
| 1116 | 1116 |
| 1117 template<typename T> struct PtrHash<WebCore::WeakMember<T> > : PtrHash<WebCore::
Member<T> > { | 1117 template<typename T> struct PtrHash<blink::WeakMember<T> > : PtrHash<blink::Memb
er<T> > { |
| 1118 }; | 1118 }; |
| 1119 | 1119 |
| 1120 template<typename P> struct PtrHash<WebCore::Persistent<P> > : PtrHash<P*> { | 1120 template<typename P> struct PtrHash<blink::Persistent<P> > : PtrHash<P*> { |
| 1121 using PtrHash<P*>::hash; | 1121 using PtrHash<P*>::hash; |
| 1122 static unsigned hash(const RefPtr<P>& key) { return hash(key.get()); } | 1122 static unsigned hash(const RefPtr<P>& key) { return hash(key.get()); } |
| 1123 using PtrHash<P*>::equal; | 1123 using PtrHash<P*>::equal; |
| 1124 static bool equal(const RefPtr<P>& a, const RefPtr<P>& b) { return a == b; } | 1124 static bool equal(const RefPtr<P>& a, const RefPtr<P>& b) { return a == b; } |
| 1125 static bool equal(P* a, const RefPtr<P>& b) { return a == b; } | 1125 static bool equal(P* a, const RefPtr<P>& b) { return a == b; } |
| 1126 static bool equal(const RefPtr<P>& a, P* b) { return a == b; } | 1126 static bool equal(const RefPtr<P>& a, P* b) { return a == b; } |
| 1127 }; | 1127 }; |
| 1128 | 1128 |
| 1129 // PtrHash is the default hash for hash tables with members. | 1129 // PtrHash is the default hash for hash tables with members. |
| 1130 template<typename T> struct DefaultHash<WebCore::Member<T> > { | 1130 template<typename T> struct DefaultHash<blink::Member<T> > { |
| 1131 typedef PtrHash<WebCore::Member<T> > Hash; | 1131 typedef PtrHash<blink::Member<T> > Hash; |
| 1132 }; | 1132 }; |
| 1133 | 1133 |
| 1134 template<typename T> struct DefaultHash<WebCore::WeakMember<T> > { | 1134 template<typename T> struct DefaultHash<blink::WeakMember<T> > { |
| 1135 typedef PtrHash<WebCore::WeakMember<T> > Hash; | 1135 typedef PtrHash<blink::WeakMember<T> > Hash; |
| 1136 }; | 1136 }; |
| 1137 | 1137 |
| 1138 template<typename T> struct DefaultHash<WebCore::Persistent<T> > { | 1138 template<typename T> struct DefaultHash<blink::Persistent<T> > { |
| 1139 typedef PtrHash<WebCore::Persistent<T> > Hash; | 1139 typedef PtrHash<blink::Persistent<T> > Hash; |
| 1140 }; | 1140 }; |
| 1141 | 1141 |
| 1142 template<typename T> | 1142 template<typename T> |
| 1143 struct NeedsTracing<WebCore::Member<T> > { | 1143 struct NeedsTracing<blink::Member<T> > { |
| 1144 static const bool value = true; | 1144 static const bool value = true; |
| 1145 }; | 1145 }; |
| 1146 | 1146 |
| 1147 template<typename T> | 1147 template<typename T> |
| 1148 struct IsWeak<WebCore::WeakMember<T> > { | 1148 struct IsWeak<blink::WeakMember<T> > { |
| 1149 static const bool value = true; | 1149 static const bool value = true; |
| 1150 }; | 1150 }; |
| 1151 | 1151 |
| 1152 template<typename T> inline T* getPtr(const WebCore::Member<T>& p) | 1152 template<typename T> inline T* getPtr(const blink::Member<T>& p) |
| 1153 { | 1153 { |
| 1154 return p.get(); | 1154 return p.get(); |
| 1155 } | 1155 } |
| 1156 | 1156 |
| 1157 template<typename T> inline T* getPtr(const WebCore::Persistent<T>& p) | 1157 template<typename T> inline T* getPtr(const blink::Persistent<T>& p) |
| 1158 { | 1158 { |
| 1159 return p.get(); | 1159 return p.get(); |
| 1160 } | 1160 } |
| 1161 | 1161 |
| 1162 template<typename T, size_t inlineCapacity> | 1162 template<typename T, size_t inlineCapacity> |
| 1163 struct NeedsTracing<ListHashSetNode<T, WebCore::HeapListHashSetAllocator<T, inli
neCapacity> > *> { | 1163 struct NeedsTracing<ListHashSetNode<T, blink::HeapListHashSetAllocator<T, inline
Capacity> > *> { |
| 1164 // All heap allocated node pointers need visiting to keep the nodes alive, | 1164 // All heap allocated node pointers need visiting to keep the nodes alive, |
| 1165 // regardless of whether they contain pointers to other heap allocated | 1165 // regardless of whether they contain pointers to other heap allocated |
| 1166 // objects. | 1166 // objects. |
| 1167 static const bool value = true; | 1167 static const bool value = true; |
| 1168 }; | 1168 }; |
| 1169 | 1169 |
| 1170 // For wtf/Functional.h | 1170 // For wtf/Functional.h |
| 1171 template<typename T, bool isGarbageCollected> struct PointerParamStorageTraits; | 1171 template<typename T, bool isGarbageCollected> struct PointerParamStorageTraits; |
| 1172 | 1172 |
| 1173 template<typename T> | 1173 template<typename T> |
| 1174 struct PointerParamStorageTraits<T*, false> { | 1174 struct PointerParamStorageTraits<T*, false> { |
| 1175 typedef T* StorageType; | 1175 typedef T* StorageType; |
| 1176 | 1176 |
| 1177 static StorageType wrap(T* value) { return value; } | 1177 static StorageType wrap(T* value) { return value; } |
| 1178 static T* unwrap(const StorageType& value) { return value; } | 1178 static T* unwrap(const StorageType& value) { return value; } |
| 1179 }; | 1179 }; |
| 1180 | 1180 |
| 1181 template<typename T> | 1181 template<typename T> |
| 1182 struct PointerParamStorageTraits<T*, true> { | 1182 struct PointerParamStorageTraits<T*, true> { |
| 1183 typedef WebCore::CrossThreadPersistent<T> StorageType; | 1183 typedef blink::CrossThreadPersistent<T> StorageType; |
| 1184 | 1184 |
| 1185 static StorageType wrap(T* value) { return value; } | 1185 static StorageType wrap(T* value) { return value; } |
| 1186 static T* unwrap(const StorageType& value) { return value.get(); } | 1186 static T* unwrap(const StorageType& value) { return value.get(); } |
| 1187 }; | 1187 }; |
| 1188 | 1188 |
| 1189 template<typename T> | 1189 template<typename T> |
| 1190 struct ParamStorageTraits<T*> : public PointerParamStorageTraits<T*, WebCore::Is
GarbageCollectedType<T>::value> { | 1190 struct ParamStorageTraits<T*> : public PointerParamStorageTraits<T*, blink::IsGa
rbageCollectedType<T>::value> { |
| 1191 }; | 1191 }; |
| 1192 | 1192 |
| 1193 template<typename T> | 1193 template<typename T> |
| 1194 struct ParamStorageTraits<RawPtr<T> > : public PointerParamStorageTraits<T*, Web
Core::IsGarbageCollectedType<T>::value> { | 1194 struct ParamStorageTraits<RawPtr<T> > : public PointerParamStorageTraits<T*, bli
nk::IsGarbageCollectedType<T>::value> { |
| 1195 }; | 1195 }; |
| 1196 | 1196 |
| 1197 } // namespace WTF | 1197 } // namespace WTF |
| 1198 | 1198 |
| 1199 #endif | 1199 #endif |
| OLD | NEW |