25void VerifyCustomSpaces(
26 const std::vector<std::unique_ptr<CustomSpaceBase>>& custom_spaces) {
30 for (
size_t i = 0;
i < custom_spaces.
size(); ++
i) {
31 DCHECK_EQ(
i, custom_spaces[
i]->GetCustomSpaceIndex().value);
38std::unique_ptr<Heap>
Heap::Create(std::shared_ptr<cppgc::Platform> platform,
41 VerifyCustomSpaces(options.custom_spaces);
42 return std::make_unique<internal::Heap>(std::move(platform),
51 internal::GCConfig::FreeMemoryHandling::kDiscardWherePossible,
52 internal::GCConfig::IsForcedGC::kForced});
67 CHECK_LE(
static_cast<int>(config.marking_type),
68 static_cast<int>(marking_support));
69 CHECK_LE(
static_cast<int>(config.sweeping_type),
70 static_cast<int>(sweeping_support));
77 :
HeapBase(platform, options.custom_spaces, options.stack_support,
78 options.marking_support, options.sweeping_support, gc_invoker_),
79 gc_invoker_(this,
platform_.get(), options.stack_support),
81 options.resource_constraints, options.marking_support,
82 options.sweeping_support) {
83 CHECK_IMPLIES(options.marking_support != HeapBase::MarkingType::kAtomic,
85 CHECK_IMPLIES(options.sweeping_support != HeapBase::SweepingType::kAtomic,
87#ifdef V8_ENABLE_ALLOCATION_TIMEOUT
97 GCConfig::MarkingType::kAtomic, GCConfig::SweepingType::kAtomic});
154#if defined(CPPGC_YOUNG_GENERATION)
182#if defined(CPPGC_YOUNG_GENERATION)
187 HeapBase::EnableGenerationalGC();
202 bytes_allocated_in_prefinalizers);
204#ifndef CPPGC_ALLOW_ALLOCATIONS_IN_PREFINALIZERS
205 DCHECK_EQ(0u, bytes_allocated_in_prefinalizers);
207 USE(bytes_allocated_in_prefinalizers);
209#if defined(CPPGC_YOUNG_GENERATION)
210 ResetRememberedSet();
243 GCConfig::MarkingType::kIncrementalAndConcurrent,
244 GCConfig::SweepingType::kIncrementalAndConcurrent});
HeapHandle & GetHeapHandle()
void ForceGarbageCollectionSlow(const char *source, const char *reason, StackState stack_state=StackState::kMayContainHeapPointers)
AllocationHandle & GetAllocationHandle()
static std::unique_ptr< Heap > Create(std::shared_ptr< Platform > platform, HeapOptions options=HeapOptions::Default())
SweepingType sweeping_support_
cppgc::Heap::SweepingType SweepingType
cppgc::Heap::MarkingType MarkingType
size_t ExecutePreFinalizers()
std::shared_ptr< cppgc::Platform > platform_
bool generational_gc_supported() const
friend class cppgc::testing::Heap
StatsCollector * stats_collector()
virtual bool IsGCForbidden() const
virtual bool IsGCAllowed() const
std::unique_ptr< MarkerBase > marker_
MarkingType marking_support_
virtual heap::base::Stack * stack()
ObjectAllocator & object_allocator()
bool in_no_gc_scope() const
void FinalizeIncrementalGarbageCollectionForTesting(EmbedderStackState) final
void CollectGarbage(GCConfig) final
void StartIncrementalGarbageCollection(GCConfig) final
void StartIncrementalGarbageCollectionForTesting() final
static Heap * From(cppgc::Heap *heap)
void FinalizeGarbageCollection(StackState)
void EnableGenerationalGC()
void FinalizeIncrementalGarbageCollectionIfRunning(GCConfig)
void FinalizeGarbageCollectionImpl(StackState)
void FinalizeIncrementalGarbageCollectionIfNeeded(StackState) final
void DisableHeapGrowingForTesting()
bool generational_gc_enabled_
void StartGarbageCollection(GCConfig)
void Run(StackState, std::optional< size_t >)
void NotifyUnmarkingStarted(CollectionType)
void Start(SweepingConfig)
V8_INLINE void SetMarkerIfNeededAndCallback(Callback callback)
StatsCollector * stats_collector_
#define CHECK_IMPLIES(lhs, rhs)
#define CHECK_LE(lhs, rhs)
#define DCHECK_NE(v1, v2)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
SweepingType sweeping_type
CollectionType collection_type
FreeMemoryHandling free_memory_handling