5 #ifndef V8_HEAP_GC_IDLE_TIME_HANDLER_H_ 6 #define V8_HEAP_GC_IDLE_TIME_HANDLER_H_ 8 #include "src/globals.h" 13 enum GCIdleTimeActionType {
26 result.additional_work =
false;
32 result.type = DO_NOTHING;
33 result.additional_work =
false;
39 result.type = DO_INCREMENTAL_STEP;
40 result.additional_work =
false;
46 result.type = DO_FULL_GC;
47 result.additional_work =
false;
53 GCIdleTimeActionType
type;
62 int contexts_disposed;
63 double contexts_disposal_rate;
64 size_t size_of_objects;
65 bool incremental_marking_stopped;
75 static const size_t kInitialConservativeMarkingSpeed = 100 * KB;
78 static const size_t kMaximumMarkingStepSize = 700 * MB;
82 static const double kConservativeTimeRatio;
86 static const size_t kInitialConservativeMarkCompactSpeed = 2 * MB;
90 static const size_t kInitialConservativeFinalIncrementalMarkCompactSpeed =
95 static const size_t kMaxFinalIncrementalMarkCompactTimeInMs;
99 static const size_t kMaxScheduledIdleTime = 50;
102 static const size_t kMaxFrameRenderingIdleTime = 17;
104 static const int kMinBackgroundIdleTime = 900;
108 static const size_t kLowAllocationThroughput = 1000;
110 static const size_t kMaxHeapSizeForContextDisposalMarkCompact = 100 * MB;
113 static const double kHighContextDisposalRate;
116 static const size_t kIncrementalMarkingStepTimeInMs = 1;
118 static const size_t kMinTimeForOverApproximatingWeakClosureInMs;
123 static const int kMaxNoProgressIdleTimes = 10;
132 void ResetNoProgressCounter() { idle_times_which_made_no_progress_ = 0; }
134 static size_t EstimateMarkingStepSize(
double idle_time_in_ms,
135 double marking_speed_in_bytes_per_ms);
137 static double EstimateFinalIncrementalMarkCompactTime(
138 size_t size_of_objects,
double mark_compact_speed_in_bytes_per_ms);
140 static bool ShouldDoContextDisposalMarkCompact(
int context_disposed,
141 double contexts_disposal_rate,
142 size_t size_of_objects);
144 static bool ShouldDoFinalIncrementalMarkCompact(
145 double idle_time_in_ms,
size_t size_of_objects,
146 double final_incremental_mark_compact_speed_in_bytes_per_ms);
148 static bool ShouldDoOverApproximateWeakClosure(
double idle_time_in_ms);
154 int idle_times_which_made_no_progress_;
162 #endif // V8_HEAP_GC_IDLE_TIME_HANDLER_H_