18constexpr auto kTimeDeltaForPredictableSchedule =
25 bool predictable_schedule) {
26 return std::unique_ptr<IncrementalMarkingSchedule>(
31std::unique_ptr<IncrementalMarkingSchedule>
33 size_t min_marked_bytes_per_step,
bool predictable_schedule) {
34 return std::unique_ptr<IncrementalMarkingSchedule>(
36 predictable_schedule));
40 size_t min_marked_bytes_per_step,
bool predictable_schedule)
41 : min_marked_bytes_per_step_(min_marked_bytes_per_step),
42 predictable_schedule_(predictable_schedule) {
63 size_t marked_bytes) {
68 size_t marked_bytes) {
100 size_t estimated_live_bytes) {
106 const size_t expected_marked_bytes =
107 std::ceil(estimated_live_bytes * elapsed_time.InMillisecondsF() /
111 estimated_live_bytes, expected_marked_bytes, elapsed_time};
112 if ((actual_marked_bytes >= last_marked_bytes) &&
113 (actual_marked_bytes - last_marked_bytes) <
117 if (expected_marked_bytes < actual_marked_bytes) {
129 expected_marked_bytes - actual_marked_bytes);
const size_t min_marked_bytes_per_step_
size_t last_concurrently_marked_bytes_
static constexpr double kEphemeronPairsFlushingRatioIncrements
void AddMutatorThreadMarkedBytes(size_t)
static std::unique_ptr< IncrementalMarkingSchedule > CreateWithMarkedBytesPerStepForTesting(size_t min_marked_bytes_per_step, bool predictable_schedule=false)
void SetElapsedTimeForTesting(v8::base::TimeDelta)
void NotifyIncrementalMarkingStart()
bool ShouldFlushEphemeronPairs()
std::atomic_size_t concurrently_marked_bytes_
size_t GetOverallMarkedBytes() const
v8::base::TimeTicks last_concurrently_marked_bytes_update_
double ephemeron_pairs_flushing_ratio_target_
size_t GetNextIncrementalStepDuration(size_t estimated_live_bytes)
size_t GetConcurrentlyMarkedBytes() const
v8::base::TimeTicks incremental_marking_start_time_
size_t min_marked_bytes_per_step() const
std::optional< v8::base::TimeDelta > elapsed_time_override_
static constexpr size_t kStepSizeWhenNotMakingProgress
static std::unique_ptr< IncrementalMarkingSchedule > Create(bool predictable_schedule=false)
v8::base::TimeDelta GetTimeSinceLastConcurrentMarkingUpdate()
IncrementalMarkingSchedule(const IncrementalMarkingSchedule &)=delete
static constexpr v8::base::TimeDelta kEstimatedMarkingTime
StepInfo GetCurrentStepInfo() const
size_t last_estimated_live_bytes_
v8::base::TimeDelta GetElapsedTimeSinceMarkingStart()
void AddConcurrentlyMarkedBytes(size_t)
void NotifyConcurrentMarkingStart()
size_t mutator_thread_marked_bytes_
const bool predictable_schedule_
double InMillisecondsF() const
static constexpr TimeDelta FromMilliseconds(int64_t milliseconds)
constexpr bool IsNull() const
#define DCHECK(condition)
size_t marked_bytes() const