5#ifndef V8_HEAP_CPPGC_MARKER_H_
6#define V8_HEAP_CPPGC_MARKER_H_
70 template <
typename Class>
72 return *
static_cast<Class*
>(
this);
87 void EnterProcessGlobalAtomicPause();
90 void ReEnableConcurrentMarking();
97 bool AdvanceMarkingWithLimits(
99 size_t marked_bytes_limit = 0);
107 void LeaveAtomicPause();
121 void ProcessCrossThreadWeaknessIfNeeded();
122 void ProcessWeakness();
124 bool JoinConcurrentMarkingIfNeeded();
127 template <WriteBarrierType type>
136 void SetMainThreadMarkingDisabledForTesting(
bool);
137 void WaitForConcurrentMarkingForTesting();
138 void ClearAllWorklistsForTesting();
139 bool IncrementalMarkingStepForTesting(
StackState);
143 return mutator_marking_state_;
150 static constexpr size_t kMinAllocatedBytesPerStep = 256 *
kKB;
154 void AllocatedObjectSizeIncreased(
size_t delta)
final;
158 size_t current_allocated_size_ = 0;
179 bool ProcessWorklistsWithDeadline(
size_t marked_bytes_deadline,
181 void AdvanceMarkingWithLimitsEpilogue();
184 void VisitCrossThreadRoots();
186 void MarkNotFullyConstructedObjects();
188 virtual void ScheduleIncrementalMarkingTask();
192 void AdvanceMarkingOnAllocation();
193 virtual void AdvanceMarkingOnAllocationImpl();
195 void HandleNotFullyConstructedObjects();
196 void MarkStrongCrossThreadRoots();
206 size_t last_bytes_marked_ = 0;
207 bool is_marking_{
false};
208 bool main_marking_disabled_for_testing_{
false};
209 bool visited_cross_thread_persistents_in_atomic_pause_{
false};
210 bool processed_cross_thread_weakness_{
false};
221 return conservative_marking_visitor_;
225 return conservative_marking_visitor_;
237 std::unique_ptr<heap::base::IncrementalMarkingSchedule>
schedule_;
241template <MarkerBase::WriteBarrierType type>
MarkingWorklists::WriteBarrierWorklist::Local & write_barrier_worklist()
const bool resume_on_exit_
void WriteBarrierForObject(HeapObjectHeader &)
MarkerBase & operator=(const MarkerBase &)=delete
MarkerBase(const MarkerBase &)=delete
std::shared_ptr< cppgc::TaskRunner > foreground_task_runner_
virtual ConservativeTracingVisitor & conservative_visitor()=0
virtual heap::base::IncrementalMarkingSchedule & schedule()=0
IncrementalMarkingTaskHandle incremental_marking_handle_
MutatorMarkingState & MutatorMarkingStateForTesting()
virtual cppgc::Visitor & visitor()=0
MutatorMarkingState mutator_marking_state_
size_t last_bytes_marked() const
virtual ConcurrentMarkerBase & concurrent_marker()=0
MarkingWorklists & MarkingWorklistsForTesting()
cppgc::Platform * platform_
virtual heap::base::StackVisitor & stack_visitor()=0
cppgc::Visitor & Visitor()
MarkingWorklists marking_worklists_
IncrementalMarkingAllocationObserver incremental_marking_allocation_observer_
ConcurrentMarkerBase & concurrent_marker() final
ConservativeTracingVisitor & conservative_visitor() final
cppgc::Visitor & visitor() final
heap::base::IncrementalMarkingSchedule & schedule() final
std::unique_ptr< heap::base::IncrementalMarkingSchedule > schedule_
heap::base::StackVisitor & stack_visitor() final
MutatorMarkingVisitor marking_visitor_
ConcurrentMarker concurrent_marker_
ConservativeMarkingVisitor conservative_marking_visitor_
MarkingWorklists::NotFullyConstructedWorklist & not_fully_constructed_worklist()
void Push(HeapObjectHeader *)
MarkingWorklists::RetraceMarkedObjectsWorklist::Local & retrace_marked_objects_worklist()
static constexpr TimeDelta FromMilliseconds(int64_t milliseconds)
ConcurrentMarkerBase & concurrent_marker_
std::unique_ptr< ConservativeTracedHandlesMarkingVisitor > marking_visitor_
Schedule const *const schedule_
MarkingWorklists marking_worklists_
#define V8_EXPORT_PRIVATE
#define V8_UNLIKELY(condition)