blob: 7ac34624a0a14332ebbd4c6c73f69355c174e811 [file] [log] [blame]
// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_HEAP_CPPGC_CAGED_HEAP_H_
#define V8_HEAP_CPPGC_CAGED_HEAP_H_
#include <memory>
#include "include/cppgc/platform.h"
#include "src/base/bounded-page-allocator.h"
#include "src/heap/cppgc/globals.h"
#include "src/heap/cppgc/virtual-memory.h"
namespace cppgc {
namespace internal {
struct CagedHeapLocalData;
class HeapBase;
class CagedHeap final {
public:
using AllocatorType = v8::base::BoundedPageAllocator;
CagedHeap(HeapBase* heap, PageAllocator* platform_allocator);
CagedHeap(const CagedHeap&) = delete;
CagedHeap& operator=(const CagedHeap&) = delete;
AllocatorType& allocator() { return *bounded_allocator_; }
const AllocatorType& allocator() const { return *bounded_allocator_; }
CagedHeapLocalData& local_data() {
return *static_cast<CagedHeapLocalData*>(reserved_area_.address());
}
const CagedHeapLocalData& local_data() const {
return *static_cast<CagedHeapLocalData*>(reserved_area_.address());
}
static uintptr_t OffsetFromAddress(void* address) {
return reinterpret_cast<uintptr_t>(address) &
(kCagedHeapReservationAlignment - 1);
}
private:
VirtualMemory reserved_area_;
std::unique_ptr<AllocatorType> bounded_allocator_;
};
} // namespace internal
} // namespace cppgc
#endif // V8_HEAP_CPPGC_CAGED_HEAP_H_