14 : allocate_page_size_(allocate_page_size),
15 commit_page_size_(page_allocator->CommitPageSize()),
17 region_allocator_(
start, size, allocate_page_size_),
18 page_initialization_mode_(page_initialization_mode),
19 page_freeing_mode_(page_freeing_mode) {
41 if (hint_address &&
IsAligned(hint_address, alignment) &&
44 address = hint_address;
62 void* ptr =
reinterpret_cast<void*
>(address);
103 void* ptr =
reinterpret_cast<void*
>(address);
203 if (new_allocated_size < allocated_size) {
208 void* free_address =
reinterpret_cast<void*
>(address + new_size);
209 size_t free_size = size - new_size;
264 switch (allocation_status) {
268 return "Failed to commit";
270 return "Ran out of reservation";
272 return "Hinted address was taken or not found";
virtual bool DecommitPages(void *address, size_t size)=0
virtual size_t AllocatePageSize()=0
virtual bool RecommitPages(void *address, size_t length, Permission permissions)
virtual bool SetPermissions(void *address, size_t length, Permission permissions)=0
virtual bool SealPages(void *address, size_t length)
virtual bool DiscardSystemPages(void *address, size_t size)
v8::base::RegionAllocator region_allocator_
void * AllocatePages(void *hint, size_t size, size_t alignment, Permission access) override
const size_t allocate_page_size_
const size_t commit_page_size_
bool AllocatePagesAt(Address address, size_t size, Permission access)
@ kHintedAddressTakenOrNotFound
bool DiscardSystemPages(void *address, size_t size) override
bool SealPages(void *address, size_t size) override
const PageFreeingMode page_freeing_mode_
bool FreePages(void *address, size_t size) override
const PageInitializationMode page_initialization_mode_
bool DecommitPages(void *address, size_t size) override
static const char * AllocationStatusToString(AllocationStatus)
bool RecommitPages(void *address, size_t size, PageAllocator::Permission access) override
bool ReserveForSharedMemoryMapping(void *address, size_t size) override
bool ReleasePages(void *address, size_t size, size_t new_size) override
bool SetPermissions(void *address, size_t size, Permission access) override
v8::PageAllocator *const page_allocator_
AllocationStatus allocation_status_
BoundedPageAllocator(v8::PageAllocator *page_allocator, Address start, size_t size, size_t allocate_page_size, PageInitializationMode page_initialization_mode, PageFreeingMode page_freeing_mode)
Address AllocateRegion(size_t size)
bool AllocateRegionAt(Address requested_address, size_t size, RegionState region_state=RegionState::kAllocated)
bool contains(Address address) const
size_t TrimRegion(Address address, size_t new_size)
Address AllocateAlignedRegion(size_t size, size_t alignment)
size_t FreeRegion(Address address)
size_t CheckRegion(Address address)
static constexpr Address kAllocationFailure
cppgc::PageAllocator * page_allocator_
@ kAllocatedPagesCanBeUninitialized
@ kAllocatedPagesMustBeZeroInitialized
#define DCHECK_NOT_NULL(val)
#define DCHECK_NE(v1, v2)
#define CHECK_EQ(lhs, rhs)
#define DCHECK(condition)
#define DCHECK_LT(v1, v2)
#define DCHECK_EQ(v1, v2)
constexpr T RoundUp(T x, intptr_t m)
constexpr bool IsAligned(T value, U alignment)