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

Side by Side Diff: third_party/WebKit/Source/core/dom/WeakIdentifierMap.h

Issue 1855203002: Revert of Improve DEFINE_STATIC_LOCAL()'s handling of Blink GCed objects. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef WeakIdentifierMap_h 5 #ifndef WeakIdentifierMap_h
6 #define WeakIdentifierMap_h 6 #define WeakIdentifierMap_h
7 7
8 #include "platform/heap/Handle.h" 8 #include "platform/heap/Handle.h"
9 #include "wtf/Allocator.h" 9 #include "wtf/Allocator.h"
10 #include "wtf/HashMap.h" 10 #include "wtf/HashMap.h"
(...skipping 21 matching lines...) Expand all
32 32
33 template<typename T, 33 template<typename T,
34 typename Generator = IdentifierGenerator<int>, 34 typename Generator = IdentifierGenerator<int>,
35 typename Traits = WeakIdentifierMapTraits<T>, 35 typename Traits = WeakIdentifierMapTraits<T>,
36 bool isGarbageCollected = IsGarbageCollectedType<T>::value> class WeakIdenti fierMap; 36 bool isGarbageCollected = IsGarbageCollectedType<T>::value> class WeakIdenti fierMap;
37 37
38 template<typename T, typename Generator, typename Traits> class WeakIdentifierMa p<T, Generator, Traits, false> { 38 template<typename T, typename Generator, typename Traits> class WeakIdentifierMa p<T, Generator, Traits, false> {
39 USING_FAST_MALLOC(WeakIdentifierMap); 39 USING_FAST_MALLOC(WeakIdentifierMap);
40 public: 40 public:
41 using IdentifierType = typename Generator::IdentifierType; 41 using IdentifierType = typename Generator::IdentifierType;
42 using ReferenceType = RawPtr<WeakIdentifierMap<T, Generator, Traits, false>> ;
42 43
43 static IdentifierType identifier(T* object) 44 static IdentifierType identifier(T* object)
44 { 45 {
45 IdentifierType result = instance().m_objectToIdentifier.get(object); 46 IdentifierType result = instance().m_objectToIdentifier.get(object);
46 47
47 if (WTF::isHashTraitsEmptyValue<HashTraits<IdentifierType>>(result)) { 48 if (WTF::isHashTraitsEmptyValue<HashTraits<IdentifierType>>(result)) {
48 result = Generator::next(); 49 result = Generator::next();
49 instance().put(object, result); 50 instance().put(object, result);
50 } 51 }
51 return result; 52 return result;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 using IdentifierToObject = HashMap<IdentifierType, T*>; 86 using IdentifierToObject = HashMap<IdentifierType, T*>;
86 87
87 ObjectToIdentifier m_objectToIdentifier; 88 ObjectToIdentifier m_objectToIdentifier;
88 IdentifierToObject m_identifierToObject; 89 IdentifierToObject m_identifierToObject;
89 }; 90 };
90 91
91 template<typename T, typename Generator, typename Traits> class WeakIdentifierMa p<T, Generator, Traits, true> 92 template<typename T, typename Generator, typename Traits> class WeakIdentifierMa p<T, Generator, Traits, true>
92 : public GarbageCollected<WeakIdentifierMap<T, Generator, Traits, true>> { 93 : public GarbageCollected<WeakIdentifierMap<T, Generator, Traits, true>> {
93 public: 94 public:
94 using IdentifierType = typename Generator::IdentifierType; 95 using IdentifierType = typename Generator::IdentifierType;
96 using ReferenceType = Persistent<WeakIdentifierMap<T, Generator, Traits, tru e>>;
95 97
96 static IdentifierType identifier(T* object) 98 static IdentifierType identifier(T* object)
97 { 99 {
98 IdentifierType result = instance().m_objectToIdentifier->get(object); 100 IdentifierType result = instance().m_objectToIdentifier->get(object);
99 101
100 if (WTF::isHashTraitsEmptyValue<HashTraits<IdentifierType>>(result)) { 102 if (WTF::isHashTraitsEmptyValue<HashTraits<IdentifierType>>(result)) {
101 result = Generator::next(); 103 result = Generator::next();
102 instance().put(object, result); 104 instance().put(object, result);
103 } 105 }
104 return result; 106 return result;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 using IdentifierToObject = HeapHashMap<IdentifierType, WeakMember<T>>; 139 using IdentifierToObject = HeapHashMap<IdentifierType, WeakMember<T>>;
138 140
139 Member<ObjectToIdentifier> m_objectToIdentifier; 141 Member<ObjectToIdentifier> m_objectToIdentifier;
140 Member<IdentifierToObject> m_identifierToObject; 142 Member<IdentifierToObject> m_identifierToObject;
141 }; 143 };
142 144
143 #define DECLARE_WEAK_IDENTIFIER_MAP(T, ...) \ 145 #define DECLARE_WEAK_IDENTIFIER_MAP(T, ...) \
144 template<> WeakIdentifierMap<T, ##__VA_ARGS__>& WeakIdentifierMap<T, ##__VA_ ARGS__>::instance(); \ 146 template<> WeakIdentifierMap<T, ##__VA_ARGS__>& WeakIdentifierMap<T, ##__VA_ ARGS__>::instance(); \
145 extern template class WeakIdentifierMap<T, ##__VA_ARGS__>; 147 extern template class WeakIdentifierMap<T, ##__VA_ARGS__>;
146 148
147 #define DEFINE_WEAK_IDENTIFIER_MAP(T, ...) \ 149 #define DEFINE_WEAK_IDENTIFIER_MAP(T, ...) \
148 template class WeakIdentifierMap<T, ##__VA_ARGS__>; \ 150 template class WeakIdentifierMap<T, ##__VA_ARGS__>; \
149 template<> WeakIdentifierMap<T, ##__VA_ARGS__>& WeakIdentifierMap<T, ##__VA_ ARGS__>::instance() \ 151 template<> WeakIdentifierMap<T, ##__VA_ARGS__>& WeakIdentifierMap<T, ##__VA_ ARGS__>::instance() \
150 { \ 152 { \
151 using RefType = WeakIdentifierMap<T, ##__VA_ARGS__>; \ 153 using RefType = WeakIdentifierMap<T, ##__VA_ARGS__>::ReferenceType; \
152 DEFINE_STATIC_LOCAL(RefType, mapInstance, (new WeakIdentifierMap<T, ##__ VA_ARGS__>())); \ 154 DEFINE_STATIC_LOCAL(RefType, mapInstance, (new WeakIdentifierMap<T, ##__ VA_ARGS__>())); \
153 return mapInstance; \ 155 return *mapInstance; \
154 } 156 }
155
156 } // namespace blink 157 } // namespace blink
157 158
158 #endif // WeakIdentifierMap_h 159 #endif // WeakIdentifierMap_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698