5#ifndef V8_HEAP_SPACES_H_
6#define V8_HEAP_SPACES_H_
29#include "testing/gtest/include/gtest/gtest_prod.h"
36class TestCodePageAllocatorScope;
39class AllocationObserver;
43class LargeObjectSpace;
44class LargePageMetadata;
51#define DCHECK_OBJECT_SIZE(size) \
52 DCHECK((0 < size) && (size <= kMaxRegularHeapObjectSize))
54#define DCHECK_CODEOBJECT_SIZE(size) \
55 DCHECK((0 < size) && (size <= MemoryChunkLayout::MaxRegularCodeObjectSize()))
57template <
typename Enum,
typename Callback>
59 for (
int i = 0; i < static_cast<int>(Enum::kNumValues);
i++) {
69 static inline void MoveExternalBackingStoreBytes(
97 return external_backing_store_bytes_[
static_cast<int>(
type)];
101 return memory_chunk_list_.front();
106 return memory_chunk_list_.front();
109 return memory_chunk_list_.back();
113 return memory_chunk_list_;
127 return first_page()->ChunkAddress();
131 virtual void Print() = 0;
138 std::atomic<size_t> external_backing_store_bytes_[
static_cast<int>(
139 ExternalBackingStoreType::kNumValues)] = {0};
159template <
class PageType>
221 std::unique_ptr<FreeList> free_list);
MutablePageMetadata * current_chunk_
SpaceIterator space_iterator_
MemoryChunkIterator(Heap *heap)
V8_INLINE MutablePageMetadata * Next()
virtual Tagged< HeapObject > Next()=0
virtual ~ObjectIterator()
PageIteratorImpl(PageType *p)
PageIteratorImpl(const PageIteratorImpl &) V8_NOEXCEPT=default
PageIteratorImpl< PageType > & operator++()
bool operator==(const PageIteratorImpl< PageType > &rhs) const
bool operator!=(const PageIteratorImpl< PageType > &rhs) const
PageIteratorImpl & operator=(const PageIteratorImpl &) V8_NOEXCEPT=default
virtual AllocatorPolicy * CreateAllocatorPolicy(MainAllocator *allocator)=0
Address FirstPageAddress() const
virtual MutablePageMetadata * last_page()
virtual MutablePageMetadata * first_page()
virtual void NotifyBlackAreaDestroyed(size_t size)
virtual void NotifyBlackAreaCreated(size_t size)
virtual PageMetadata * InitializePage(MutablePageMetadata *chunk)
Space & operator=(const Space &)=delete
virtual const MutablePageMetadata * first_page() const
virtual std::unique_ptr< ObjectIterator > GetObjectIterator(Heap *heap)=0
Space(const Space &)=delete
virtual const MutablePageMetadata * last_page() const
virtual size_t ExternalBackingStoreBytes(ExternalBackingStoreType type) const
Space(Heap *heap, AllocationSpace id, std::unique_ptr< FreeList > free_list)
virtual size_t Available() const =0
std::unique_ptr< FreeList > free_list_
~Space() override=default
virtual heap::List< MutablePageMetadata > & memory_chunk_list()
heap::List< MutablePageMetadata > memory_chunk_list_
virtual size_t SizeOfObjects() const
constexpr int kSystemPointerSize
void ForAll(Callback callback)
PageIteratorImpl< PageMetadata > PageIterator
PageIteratorImpl< const PageMetadata > ConstPageIterator
#define DCHECK_NOT_NULL(val)
#define V8_EXPORT_PRIVATE