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 |