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

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

Issue 1086413003: Oilpan: HeapVectorBacking should call destructors for its elements (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: rebased past r194046 (upto r194085.) Created 5 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
« no previous file with comments | « no previous file | Source/platform/heap/Heap.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // 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 GCInfo_h 5 #ifndef GCInfo_h
6 #define GCInfo_h 6 #define GCInfo_h
7 7
8 #include "platform/heap/Visitor.h" 8 #include "platform/heap/Visitor.h"
9 #include "wtf/Assertions.h" 9 #include "wtf/Assertions.h"
10 #include "wtf/Atomics.h" 10 #include "wtf/Atomics.h"
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 static const bool nonTrivialFinalizer = inlineCapacity && VectorTraits<T>::n eedsDestruction; 149 static const bool nonTrivialFinalizer = inlineCapacity && VectorTraits<T>::n eedsDestruction;
150 static void finalize(void* obj) { FinalizerTraitImpl<Deque<T, inlineCapacity , HeapAllocator>, nonTrivialFinalizer>::finalize(obj); } 150 static void finalize(void* obj) { FinalizerTraitImpl<Deque<T, inlineCapacity , HeapAllocator>, nonTrivialFinalizer>::finalize(obj); }
151 }; 151 };
152 152
153 template<typename Table> 153 template<typename Table>
154 struct FinalizerTrait<HeapHashTableBacking<Table>> { 154 struct FinalizerTrait<HeapHashTableBacking<Table>> {
155 static const bool nonTrivialFinalizer = !WTF::IsTriviallyDestructible<typena me Table::ValueType>::value; 155 static const bool nonTrivialFinalizer = !WTF::IsTriviallyDestructible<typena me Table::ValueType>::value;
156 static void finalize(void* obj) { FinalizerTraitImpl<HeapHashTableBacking<Ta ble>, nonTrivialFinalizer>::finalize(obj); } 156 static void finalize(void* obj) { FinalizerTraitImpl<HeapHashTableBacking<Ta ble>, nonTrivialFinalizer>::finalize(obj); }
157 }; 157 };
158 158
159 // TODO(haraken): Replace this GCInfoTraits with FinalizerTraits.
160 template<typename T, typename Traits> 159 template<typename T, typename Traits>
161 struct GCInfoTrait<HeapVectorBacking<T, Traits>> { 160 struct FinalizerTrait<HeapVectorBacking<T, Traits>> {
162 static size_t index() 161 static const bool nonTrivialFinalizer = Traits::needsDestruction;
163 { 162 static void finalize(void* obj) { FinalizerTraitImpl<HeapVectorBacking<T, Tr aits>, nonTrivialFinalizer>::finalize(obj); }
164 using TargetType = HeapVectorBacking<T, Traits>;
165 static const GCInfo gcInfo = {
166 TraceTrait<TargetType>::trace,
167 FinalizerTrait<TargetType>::finalize,
168 Traits::needsDestruction,
169 false, // We don't support embedded objects in HeapVectors with vtab les.
170 #if ENABLE(GC_PROFILING)
171 TypenameStringTrait<TargetType>::get()
172 #endif
173 };
174 RETURN_GCINFO_INDEX();
175 }
176 }; 163 };
177 164
178 template<typename T, typename U, typename V, typename W, typename X> class HeapH ashMap; 165 template<typename T, typename U, typename V, typename W, typename X> class HeapH ashMap;
179 template<typename T, typename U, typename V> class HeapHashSet; 166 template<typename T, typename U, typename V> class HeapHashSet;
180 template<typename T, typename U, typename V> class HeapLinkedHashSet; 167 template<typename T, typename U, typename V> class HeapLinkedHashSet;
181 template<typename T, size_t inlineCapacity, typename U> class HeapListHashSet; 168 template<typename T, size_t inlineCapacity, typename U> class HeapListHashSet;
182 template<typename T, size_t inlineCapacity> class HeapVector; 169 template<typename T, size_t inlineCapacity> class HeapVector;
183 template<typename T, size_t inlineCapacity> class HeapDeque; 170 template<typename T, size_t inlineCapacity> class HeapDeque;
184 template<typename T, typename U, typename V> class HeapHashCountedSet; 171 template<typename T, typename U, typename V> class HeapHashCountedSet;
185 172
186 template<typename T, typename U, typename V, typename W, typename X> 173 template<typename T, typename U, typename V, typename W, typename X>
187 struct GCInfoTrait<HeapHashMap<T, U, V, W, X>> : public GCInfoTrait<HashMap<T, U , V, W, X, HeapAllocator>> { }; 174 struct GCInfoTrait<HeapHashMap<T, U, V, W, X>> : public GCInfoTrait<HashMap<T, U , V, W, X, HeapAllocator>> { };
188 template<typename T, typename U, typename V> 175 template<typename T, typename U, typename V>
189 struct GCInfoTrait<HeapHashSet<T, U, V>> : public GCInfoTrait<HashSet<T, U, V, H eapAllocator>> { }; 176 struct GCInfoTrait<HeapHashSet<T, U, V>> : public GCInfoTrait<HashSet<T, U, V, H eapAllocator>> { };
190 template<typename T, typename U, typename V> 177 template<typename T, typename U, typename V>
191 struct GCInfoTrait<HeapLinkedHashSet<T, U, V>> : public GCInfoTrait<LinkedHashSe t<T, U, V, HeapAllocator>> { }; 178 struct GCInfoTrait<HeapLinkedHashSet<T, U, V>> : public GCInfoTrait<LinkedHashSe t<T, U, V, HeapAllocator>> { };
192 template<typename T, size_t inlineCapacity, typename U> 179 template<typename T, size_t inlineCapacity, typename U>
193 struct GCInfoTrait<HeapListHashSet<T, inlineCapacity, U>> : public GCInfoTrait<L istHashSet<T, inlineCapacity, U, HeapListHashSetAllocator<T, inlineCapacity>>> { }; 180 struct GCInfoTrait<HeapListHashSet<T, inlineCapacity, U>> : public GCInfoTrait<L istHashSet<T, inlineCapacity, U, HeapListHashSetAllocator<T, inlineCapacity>>> { };
194 template<typename T, size_t inlineCapacity> 181 template<typename T, size_t inlineCapacity>
195 struct GCInfoTrait<HeapVector<T, inlineCapacity>> : public GCInfoTrait<Vector<T, inlineCapacity, HeapAllocator>> { }; 182 struct GCInfoTrait<HeapVector<T, inlineCapacity>> : public GCInfoTrait<Vector<T, inlineCapacity, HeapAllocator>> { };
196 template<typename T, size_t inlineCapacity> 183 template<typename T, size_t inlineCapacity>
197 struct GCInfoTrait<HeapDeque<T, inlineCapacity>> : public GCInfoTrait<Deque<T, i nlineCapacity, HeapAllocator>> { }; 184 struct GCInfoTrait<HeapDeque<T, inlineCapacity>> : public GCInfoTrait<Deque<T, i nlineCapacity, HeapAllocator>> { };
198 template<typename T, typename U, typename V> 185 template<typename T, typename U, typename V>
199 struct GCInfoTrait<HeapHashCountedSet<T, U, V>> : public GCInfoTrait<HashCounted Set<T, U, V, HeapAllocator>> { }; 186 struct GCInfoTrait<HeapHashCountedSet<T, U, V>> : public GCInfoTrait<HashCounted Set<T, U, V, HeapAllocator>> { };
200 187
201 } // namespace blink 188 } // namespace blink
202 189
203 #endif 190 #endif
OLDNEW
« no previous file with comments | « no previous file | Source/platform/heap/Heap.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698