5#ifndef V8_HEAP_CPPGC_PAGE_MEMORY_H_
6#define V8_HEAP_CPPGC_PAGE_MEMORY_H_
10#include <unordered_map>
35 return (
reinterpret_cast<uintptr_t
>(addr) -
40 return base_ <= other.base() && other.end() <=
end();
59 return memory_region.
Contains(address) ? memory_region.
base() :
nullptr;
68 void UnprotectForTesting();
91 std::map<ConstAddress, PageMemoryRegion*>
set_;
104 size_t pooled()
const {
return pool_.size(); }
107 size_t PooledMemory()
const;
114 static constexpr bool kDefaultDecommitPooledPage =
false;
125 bool is_decommitted =
false;
126 bool is_discarded =
false;
128 std::vector<PooledPageMemoryRegion>
pool_;
129 bool decommit_pooled_pages_ = kDefaultDecommitPooledPage;
145 Address TryAllocateNormalPageMemory();
149 void FreeNormalPageMemory(
Address writeable_base);
154 Address TryAllocateLargePageMemory(
size_t size);
158 void FreeLargePageMemory(
Address writeable_base);
168 void ReleasePooledPages();
171 return page_memory_region_tree_;
189 std::unordered_map<PageMemoryRegion*, std::unique_ptr<PageMemoryRegion>>
191 std::unordered_map<PageMemoryRegion*, std::unique_ptr<PageMemoryRegion>>
196 auto it =
set_.upper_bound(address);
199 if (it ==
set_.begin()) {
202 auto*
result = std::next(it, -1)->second;
203 if (address < result->region().
end()) {
212 return pmr ? pmr->
Lookup(address) :
nullptr;
RegisterAllocator * allocator_
bool Contains(const MemoryRegion &other) const
MemoryRegion(Address base, size_t size)
bool Contains(ConstAddress addr) const
std::vector< PooledPageMemoryRegion > pool_
void SetDecommitPooledPages(bool value)
auto & get_raw_pool_for_testing()
PageBackend & operator=(const PageBackend &)=delete
PageBackend(const PageBackend &)=delete
NormalPageMemoryPool & page_pool()
PageAllocator & normal_page_allocator_
std::unordered_map< PageMemoryRegion *, std::unique_ptr< PageMemoryRegion > > normal_page_memory_regions_
PageMemoryRegionTree & get_page_memory_region_tree_for_testing()
PageMemoryRegionTree page_memory_region_tree_
Address Lookup(ConstAddress) const
std::unordered_map< PageMemoryRegion *, std::unique_ptr< PageMemoryRegion > > large_page_memory_regions_
PageAllocator & large_page_allocator_
NormalPageMemoryPool page_pool_
std::map< ConstAddress, PageMemoryRegion * > set_
PageMemoryRegion * Lookup(ConstAddress) const
PageAllocator & allocator() const
PageMemoryRegion(const PageMemoryRegion &)=delete
const MemoryRegion reserved_region_
PageAllocator & allocator_
const MemoryRegion region() const
Address Lookup(ConstAddress address) const
PageMemoryRegion & operator=(const PageMemoryRegion &)=delete
ZoneVector< RpoNumber > & result
const uint8_t * ConstAddress
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define V8_EXPORT_PRIVATE
PageMemoryRegion * region
PooledPageMemoryRegion(PageMemoryRegion *region)
std::unique_ptr< ValueMirror > value