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

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

Issue 1180383002: Introduce (Heap)Vector trait covering zero'ed memory for unused slots. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@sof-hittestcache
Patch Set: rebased Created 5 years, 6 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 | « Source/platform/heap/Handle.h ('k') | Source/platform/heap/TraceTraits.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 HeapAllocator_h 5 #ifndef HeapAllocator_h
6 #define HeapAllocator_h 6 #define HeapAllocator_h
7 7
8 #include "platform/heap/Heap.h" 8 #include "platform/heap/Heap.h"
9 #include "platform/heap/TraceTraits.h" 9 #include "platform/heap/TraceTraits.h"
10 #include "wtf/Assertions.h" 10 #include "wtf/Assertions.h"
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 public: 272 public:
273 static void finalize(void* pointer); 273 static void finalize(void* pointer);
274 void finalizeGarbageCollectedObject() { finalize(this); } 274 void finalizeGarbageCollectedObject() { finalize(this); }
275 }; 275 };
276 276
277 template<typename T, typename Traits> 277 template<typename T, typename Traits>
278 void HeapVectorBacking<T, Traits>::finalize(void* pointer) 278 void HeapVectorBacking<T, Traits>::finalize(void* pointer)
279 { 279 {
280 static_assert(Traits::needsDestruction, "Only vector buffers with items requ iring destruction should be finalized"); 280 static_assert(Traits::needsDestruction, "Only vector buffers with items requ iring destruction should be finalized");
281 // See the comment in HeapVectorBacking::trace. 281 // See the comment in HeapVectorBacking::trace.
282 static_assert(Traits::canInitializeWithMemset || WTF::IsPolymorphic<T>::valu e, "HeapVectorBacking doesn't support objects that cannot be initialized with me mset or don't have a vtable"); 282 static_assert(Traits::canClearUnusedSlotsWithMemset || WTF::IsPolymorphic<T> ::value, "HeapVectorBacking doesn't support objects that cannot be cleared as un used with memset or don't have a vtable");
283 283
284 ASSERT(!WTF::IsTriviallyDestructible<T>::value); 284 ASSERT(!WTF::IsTriviallyDestructible<T>::value);
285 HeapObjectHeader* header = HeapObjectHeader::fromPayload(pointer); 285 HeapObjectHeader* header = HeapObjectHeader::fromPayload(pointer);
286 header->checkHeader(); 286 header->checkHeader();
287 // Use the payload size as recorded by the heap to determine how many 287 // Use the payload size as recorded by the heap to determine how many
288 // elements to finalize. 288 // elements to finalize.
289 size_t length = header->payloadSize() / sizeof(T); 289 size_t length = header->payloadSize() / sizeof(T);
290 T* buffer = reinterpret_cast<T*>(pointer); 290 T* buffer = reinterpret_cast<T*>(pointer);
291 #ifdef ANNOTATE_CONTIGUOUS_CONTAINER 291 #ifdef ANNOTATE_CONTIGUOUS_CONTAINER
292 // As commented above, HeapVectorBacking calls finalizers for unused slots 292 // As commented above, HeapVectorBacking calls finalizers for unused slots
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 template<typename T, size_t i, typename U> 457 template<typename T, size_t i, typename U>
458 inline void swap(HeapListHashSet<T, i, U>& a, HeapListHashSet<T, i, U>& b) { a.s wap(b); } 458 inline void swap(HeapListHashSet<T, i, U>& a, HeapListHashSet<T, i, U>& b) { a.s wap(b); }
459 template<typename T, typename U, typename V> 459 template<typename T, typename U, typename V>
460 inline void swap(HeapLinkedHashSet<T, U, V>& a, HeapLinkedHashSet<T, U, V>& b) { a.swap(b); } 460 inline void swap(HeapLinkedHashSet<T, U, V>& a, HeapLinkedHashSet<T, U, V>& b) { a.swap(b); }
461 template<typename T, typename U, typename V> 461 template<typename T, typename U, typename V>
462 inline void swap(HeapHashCountedSet<T, U, V>& a, HeapHashCountedSet<T, U, V>& b) { a.swap(b); } 462 inline void swap(HeapHashCountedSet<T, U, V>& a, HeapHashCountedSet<T, U, V>& b) { a.swap(b); }
463 463
464 } // namespace blink 464 } // namespace blink
465 465
466 #endif 466 #endif
OLDNEW
« no previous file with comments | « Source/platform/heap/Handle.h ('k') | Source/platform/heap/TraceTraits.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698