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

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

Issue 941073002: Oilpan: improve handling of ASan contiguous container annotations. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Tidying adjustments Created 5 years, 10 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.cpp » ('j') | Source/platform/heap/Heap.cpp » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 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 20 matching lines...) Expand all
31 #ifndef Heap_h 31 #ifndef Heap_h
32 #define Heap_h 32 #define Heap_h
33 33
34 #include "platform/PlatformExport.h" 34 #include "platform/PlatformExport.h"
35 #include "platform/heap/AddressSanitizer.h" 35 #include "platform/heap/AddressSanitizer.h"
36 #include "platform/heap/ThreadState.h" 36 #include "platform/heap/ThreadState.h"
37 #include "platform/heap/Visitor.h" 37 #include "platform/heap/Visitor.h"
38 #include "public/platform/WebThread.h" 38 #include "public/platform/WebThread.h"
39 #include "wtf/Assertions.h" 39 #include "wtf/Assertions.h"
40 #include "wtf/Atomics.h" 40 #include "wtf/Atomics.h"
41 #include "wtf/ContainerAnnotations.h"
41 #include "wtf/HashCountedSet.h" 42 #include "wtf/HashCountedSet.h"
42 #include "wtf/LinkedHashSet.h" 43 #include "wtf/LinkedHashSet.h"
43 #include "wtf/ListHashSet.h" 44 #include "wtf/ListHashSet.h"
44 #include "wtf/OwnPtr.h" 45 #include "wtf/OwnPtr.h"
45 #include "wtf/PageAllocator.h" 46 #include "wtf/PageAllocator.h"
46 #include "wtf/PassRefPtr.h" 47 #include "wtf/PassRefPtr.h"
47 #include "wtf/ThreadSafeRefCounted.h" 48 #include "wtf/ThreadSafeRefCounted.h"
48 #include <stdint.h> 49 #include <stdint.h>
49 50
50 namespace blink { 51 namespace blink {
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 return sizeof(LargeObjectPage) + paddingSize; 561 return sizeof(LargeObjectPage) + paddingSize;
561 } 562 }
562 virtual bool isLargeObjectPage() override { return true; } 563 virtual bool isLargeObjectPage() override { return true; }
563 564
564 HeapObjectHeader* heapObjectHeader() 565 HeapObjectHeader* heapObjectHeader()
565 { 566 {
566 Address headerAddress = address() + pageHeaderSize(); 567 Address headerAddress = address() + pageHeaderSize();
567 return reinterpret_cast<HeapObjectHeader*>(headerAddress); 568 return reinterpret_cast<HeapObjectHeader*>(headerAddress);
568 } 569 }
569 570
571 #ifdef ANNOTATE_CONTIGUOUS_CONTAINER
572 void setIsVectorBackingPage() { m_isVectorBackingPage = true; }
573 bool isVectorBackingPage() const { return m_isVectorBackingPage; }
574 #endif
575
570 private: 576 private:
571 577
572 size_t m_payloadSize; 578 size_t m_payloadSize;
579 #ifdef ANNOTATE_CONTIGUOUS_CONTAINER
580 bool m_isVectorBackingPage;
581 #endif
573 }; 582 };
574 583
575 // A HeapDoesNotContainCache provides a fast way of taking an arbitrary 584 // A HeapDoesNotContainCache provides a fast way of taking an arbitrary
576 // pointer-sized word, and determining whether it cannot be interpreted as a 585 // pointer-sized word, and determining whether it cannot be interpreted as a
577 // pointer to an area that is managed by the garbage collected Blink heap. This 586 // pointer to an area that is managed by the garbage collected Blink heap. This
578 // is a cache of 'pages' that have previously been determined to be wholly 587 // is a cache of 'pages' that have previously been determined to be wholly
579 // outside of the heap. The size of these pages must be smaller than the 588 // outside of the heap. The size of these pages must be smaller than the
580 // allocation alignment of the heap pages. We determine off-heap-ness by 589 // allocation alignment of the heap pages. We determine off-heap-ness by
581 // rounding down the pointer to the nearest page and looking up the page in the 590 // rounding down the pointer to the nearest page and looking up the page in the
582 // cache. If there is a miss in the cache we can determine the status of the 591 // cache. If there is a miss in the cache we can determine the status of the
(...skipping 1550 matching lines...) Expand 10 before | Expand all | Expand 10 after
2133 // payloadSize call below, since there is nowhere to store the 2142 // payloadSize call below, since there is nowhere to store the
2134 // originally allocated memory. This assert ensures that visiting the 2143 // originally allocated memory. This assert ensures that visiting the
2135 // last bit of memory can't cause trouble. 2144 // last bit of memory can't cause trouble.
2136 static_assert(!ShouldBeTraced<Traits>::value || sizeof(T) > blink::alloc ationGranularity || Traits::canInitializeWithMemset, "heap overallocation can ca use spurious visits"); 2145 static_assert(!ShouldBeTraced<Traits>::value || sizeof(T) > blink::alloc ationGranularity || Traits::canInitializeWithMemset, "heap overallocation can ca use spurious visits");
2137 2146
2138 T* array = reinterpret_cast<T*>(self); 2147 T* array = reinterpret_cast<T*>(self);
2139 blink::HeapObjectHeader* header = blink::HeapObjectHeader::fromPayload(s elf); 2148 blink::HeapObjectHeader* header = blink::HeapObjectHeader::fromPayload(s elf);
2140 // Use the payload size as recorded by the heap to determine how many 2149 // Use the payload size as recorded by the heap to determine how many
2141 // elements to mark. 2150 // elements to mark.
2142 size_t length = header->payloadSize() / sizeof(T); 2151 size_t length = header->payloadSize() / sizeof(T);
2152 #ifdef ANNOTATE_CONTIGUOUS_CONTAINER
2153 // Have no option but to mark the whole container as accessible, but
2154 // this trace() is only used for backing stores that are identified
2155 // as roots independent from a vector.
2156 ANNOTATE_CHANGE_SIZE(array, length, 0, length);
2157 #endif
2143 for (size_t i = 0; i < length; ++i) 2158 for (size_t i = 0; i < length; ++i)
2144 blink::CollectionBackingTraceTrait<ShouldBeTraced<Traits>::value, Tr aits::weakHandlingFlag, WeakPointersActStrong, T, Traits>::trace(visitor, array[ i]); 2159 blink::CollectionBackingTraceTrait<ShouldBeTraced<Traits>::value, Tr aits::weakHandlingFlag, WeakPointersActStrong, T, Traits>::trace(visitor, array[ i]);
2145 return false; 2160 return false;
2146 } 2161 }
2147 }; 2162 };
2148 2163
2149 // Almost all hash table backings are visited with this specialization. 2164 // Almost all hash table backings are visited with this specialization.
2150 template<ShouldWeakPointersBeMarkedStrongly strongify, typename Table> 2165 template<ShouldWeakPointersBeMarkedStrongly strongify, typename Table>
2151 struct TraceInCollectionTrait<NoWeakHandlingInCollections, strongify, blink::Hea pHashTableBacking<Table>, void> { 2166 struct TraceInCollectionTrait<NoWeakHandlingInCollections, strongify, blink::Hea pHashTableBacking<Table>, void> {
2152 using Value = typename Table::ValueType; 2167 using Value = typename Table::ValueType;
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
2442 template<typename T, size_t inlineCapacity> 2457 template<typename T, size_t inlineCapacity>
2443 struct GCInfoTrait<HeapVector<T, inlineCapacity>> : public GCInfoTrait<Vector<T, inlineCapacity, HeapAllocator>> { }; 2458 struct GCInfoTrait<HeapVector<T, inlineCapacity>> : public GCInfoTrait<Vector<T, inlineCapacity, HeapAllocator>> { };
2444 template<typename T, size_t inlineCapacity> 2459 template<typename T, size_t inlineCapacity>
2445 struct GCInfoTrait<HeapDeque<T, inlineCapacity>> : public GCInfoTrait<Deque<T, i nlineCapacity, HeapAllocator>> { }; 2460 struct GCInfoTrait<HeapDeque<T, inlineCapacity>> : public GCInfoTrait<Deque<T, i nlineCapacity, HeapAllocator>> { };
2446 template<typename T, typename U, typename V> 2461 template<typename T, typename U, typename V>
2447 struct GCInfoTrait<HeapHashCountedSet<T, U, V>> : public GCInfoTrait<HashCounted Set<T, U, V, HeapAllocator>> { }; 2462 struct GCInfoTrait<HeapHashCountedSet<T, U, V>> : public GCInfoTrait<HashCounted Set<T, U, V, HeapAllocator>> { };
2448 2463
2449 } // namespace blink 2464 } // namespace blink
2450 2465
2451 #endif // Heap_h 2466 #endif // Heap_h
OLDNEW
« no previous file with comments | « no previous file | Source/platform/heap/Heap.cpp » ('j') | Source/platform/heap/Heap.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698