5#ifndef V8_HEAP_CPPGC_HEAP_BASE_H_
6#define V8_HEAP_CPPGC_HEAP_BASE_H_
30#if defined(CPPGC_YOUNG_GENERATION)
36class LsanPageAllocator;
60class FatalOutOfMemoryHandler;
61class GarbageCollector;
63class PreFinalizerHandler;
78 size_t size_including_header) = 0;
89 return static_cast<HeapBase&
>(heap_handle);
92 return static_cast<const HeapBase&
>(heap_handle);
95 HeapBase(std::shared_ptr<cppgc::Platform> platform,
96 const std::vector<std::unique_ptr<CustomSpaceBase>>& custom_spaces,
97 StackSupport stack_support, MarkingType marking_support,
112 return *oom_handler_.get();
124 return prefinalizer_handler_.get();
127 return prefinalizer_handler_.get();
142 return strong_persistent_region_;
145 return strong_persistent_region_;
148 return weak_persistent_region_;
151 return weak_persistent_region_;
154 return strong_cross_thread_persistent_region_;
158 return strong_cross_thread_persistent_region_;
161 return weak_cross_thread_persistent_region_;
165 return weak_cross_thread_persistent_region_;
168#if defined(CPPGC_YOUNG_GENERATION)
169 OldToNewRememberedSet& remembered_set() {
return remembered_set_; }
172 size_t ObjectPayloadSize()
const;
187 virtual bool IsGCForbidden()
const;
193 return stack_state_of_prev_gc_;
196 stack_state_of_prev_gc_ = stack_state;
209 virtual bool CurrentThreadIsHeapThread()
const;
215 return marking_support_ != MarkingType::kAtomic;
219 const bool supported = is_young_generation_enabled();
220#if defined(CPPGC_YOUNG_GENERATION)
227 return generational_gc_supported() ? StickyBits::kEnabled
228 : StickyBits::kDisabled;
234 return name_for_unnamed_object_;
237 name_for_unnamed_object_ =
value;
244 size_t size_including_header);
249 is_incremental_marking_in_progress_ =
value;
261 --disallow_gc_scope_;
264 using HeapHandle::is_incremental_marking_in_progress;
267 static std::unique_ptr<PageBackend> InitializePageBackend(
274 virtual bool IsGCAllowed()
const;
281 size_t ExecutePreFinalizers();
283#if defined(CPPGC_YOUNG_GENERATION)
284 void EnableGenerationalGC();
285 void ResetRememberedSet();
298#if defined(LEAK_SANITIZER)
299 std::unique_ptr<v8::base::LsanPageAllocator> lsan_page_allocator_;
308 std::unique_ptr<heap::base::Stack>
stack_;
323#if defined(CPPGC_YOUNG_GENERATION)
324 OldToNewRememberedSet remembered_set_;
327 size_t no_gc_scope_ = 0;
328 size_t disallow_gc_scope_ = 0;
332 EmbedderStackState::kNoHeapPointers;
334 bool in_atomic_pause_ =
false;
341 HeapObjectNameForUnnamedObject::kUseHiddenName;
347 friend class cppgc::testing::Heap;
const HeapObjectNameForUnnamedObject saved_heap_object_name_value_
SweepingType sweeping_support_
const CrossThreadPersistentRegion & GetWeakCrossThreadPersistentRegion() const
virtual void FinalizeIncrementalGarbageCollectionIfNeeded(cppgc::Heap::StackState)=0
PersistentRegion & GetWeakPersistentRegion()
std::vector< MoveListener * > move_listeners_
std::unique_ptr< StatsCollector > stats_collector_
virtual void clear_overridden_stack_state()=0
std::unique_ptr< heap::base::Stack > stack_
HeapObjectNameForUnnamedObject name_of_unnamed_object() const
PersistentRegion weak_persistent_region_
SweepingType sweeping_support() const
EmbedderStackState stack_state_of_prev_gc() const
const PersistentRegion & GetWeakPersistentRegion() const
StackSupport stack_support() const
ObjectAllocator object_allocator_
const PageBackend * page_backend() const
PreFinalizerHandler * prefinalizer_handler()
static const HeapBase & From(const cppgc::HeapHandle &heap_handle)
virtual void set_override_stack_state(EmbedderStackState state)=0
const StackSupport stack_support_
std::shared_ptr< cppgc::Platform > platform_
bool incremental_marking_supported() const
std::unique_ptr< PreFinalizerHandler > prefinalizer_handler_
const CrossThreadPersistentRegion & GetStrongCrossThreadPersistentRegion() const
bool generational_gc_supported() const
void LeaveDisallowGCScope()
std::unique_ptr< FatalOutOfMemoryHandler > oom_handler_
virtual void StartIncrementalGarbageCollectionForTesting()=0
bool in_atomic_pause() const
PersistentRegion & GetStrongPersistentRegion()
const PreFinalizerHandler * prefinalizer_handler() const
HeapBase & operator=(const HeapBase &)=delete
HeapBase(const HeapBase &)=delete
std::unique_ptr< MarkerBase > & GetMarkerRefForTesting()
std::unique_ptr< PageBackend > page_backend_
virtual void FinalizeIncrementalGarbageCollectionForTesting(EmbedderStackState)=0
void SetInAtomicPauseForTesting(bool value)
StatsCollector * stats_collector()
const Sweeper & sweeper() const
CrossThreadPersistentRegion weak_cross_thread_persistent_region_
MarkingType marking_support() const
CrossThreadPersistentRegion strong_cross_thread_persistent_region_
FatalOutOfMemoryHandler & oom_handler()
CrossThreadPersistentRegion & GetStrongCrossThreadPersistentRegion()
const FatalOutOfMemoryHandler & oom_handler() const
void set_name_of_unnamed_object(HeapObjectNameForUnnamedObject value)
const PersistentRegion & GetStrongPersistentRegion() const
bool HasMoveListeners() const
const StatsCollector * stats_collector() const
StickyBits sticky_bits() const
PersistentRegion strong_persistent_region_
const cppgc::Platform * platform() const
CrossThreadPersistentRegion & GetWeakCrossThreadPersistentRegion()
std::unique_ptr< MarkerBase > marker_
ProcessHeapStatisticsUpdater::AllocationObserverImpl allocation_observer_for_PROCESS_HEAP_STATISTICS_
MarkingType marking_support_
const RawHeap & raw_heap() const
static HeapBase & From(cppgc::HeapHandle &heap_handle)
MarkerBase * marker() const
void SetStackStateOfPrevGC(EmbedderStackState stack_state)
void SetMetricRecorder(std::unique_ptr< MetricRecorder > histogram_recorder)
cppgc::Platform * platform()
virtual heap::base::Stack * stack()
ObjectAllocator & object_allocator()
void set_incremental_marking_in_progress(bool value)
const ObjectAllocator & object_allocator() const
void EnterDisallowGCScope()
PageBackend * page_backend()
bool in_no_gc_scope() const
virtual void OnMove(Address from, Address to, size_t size_including_header)=0
static int GetCurrentThreadId()
StatsCollector * stats_collector_
HeapObjectNameForUnnamedObject
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK_GT(v1, v2)
#define V8_EXPORT_PRIVATE
std::unique_ptr< ValueMirror > value