Index: src/heap/heap.cc |
diff --git a/src/heap/heap.cc b/src/heap/heap.cc |
index 31b93e71991e219b5c6050bd0f17bd890f6018ec..1ba02c2461ed5fb7d8a15090284e4be9ffc5b006 100644 |
--- a/src/heap/heap.cc |
+++ b/src/heap/heap.cc |
@@ -125,6 +125,7 @@ Heap::Heap() |
mark_compact_collector_(this), |
store_buffer_(this), |
incremental_marking_(this), |
+ gc_idle_time_handler_(nullptr), |
memory_reducer_(nullptr), |
object_stats_(nullptr), |
full_codegen_bytes_generated_(0), |
@@ -1012,7 +1013,7 @@ void Heap::StartIncrementalMarking(int gc_flags, |
void Heap::StartIdleIncrementalMarking() { |
- gc_idle_time_handler_.ResetNoProgressCounter(); |
+ gc_idle_time_handler_->ResetNoProgressCounter(); |
StartIncrementalMarking(kReduceMemoryFootprintMask, kNoGCCallbackFlags, |
"idle"); |
} |
@@ -4074,14 +4075,14 @@ bool Heap::TryFinalizeIdleIncrementalMarking(double idle_time_in_ms) { |
(incremental_marking()->IsReadyToOverApproximateWeakClosure() || |
(!incremental_marking()->weak_closure_was_overapproximated() && |
mark_compact_collector_.marking_deque()->IsEmpty() && |
- gc_idle_time_handler_.ShouldDoOverApproximateWeakClosure( |
+ gc_idle_time_handler_->ShouldDoOverApproximateWeakClosure( |
static_cast<size_t>(idle_time_in_ms))))) { |
OverApproximateWeakClosure( |
"Idle notification: overapproximate weak closure"); |
return true; |
} else if (incremental_marking()->IsComplete() || |
(mark_compact_collector_.marking_deque()->IsEmpty() && |
- gc_idle_time_handler_.ShouldDoFinalIncrementalMarkCompact( |
+ gc_idle_time_handler_->ShouldDoFinalIncrementalMarkCompact( |
static_cast<size_t>(idle_time_in_ms), size_of_objects, |
final_incremental_mark_compact_speed_in_bytes_per_ms))) { |
CollectAllGarbage(current_gc_flags_, |
@@ -4092,8 +4093,8 @@ bool Heap::TryFinalizeIdleIncrementalMarking(double idle_time_in_ms) { |
} |
-GCIdleTimeHandler::HeapState Heap::ComputeHeapState() { |
- GCIdleTimeHandler::HeapState heap_state; |
+GCIdleTimeHeapState Heap::ComputeHeapState() { |
+ GCIdleTimeHeapState heap_state; |
heap_state.contexts_disposed = contexts_disposed_; |
heap_state.contexts_disposal_rate = |
tracer()->ContextDisposalRateInMilliseconds(); |
@@ -4137,7 +4138,7 @@ double Heap::AdvanceIncrementalMarking( |
bool Heap::PerformIdleTimeAction(GCIdleTimeAction action, |
- GCIdleTimeHandler::HeapState heap_state, |
+ GCIdleTimeHeapState heap_state, |
double deadline_in_ms) { |
bool result = false; |
switch (action.type) { |
@@ -4174,7 +4175,7 @@ bool Heap::PerformIdleTimeAction(GCIdleTimeAction action, |
void Heap::IdleNotificationEpilogue(GCIdleTimeAction action, |
- GCIdleTimeHandler::HeapState heap_state, |
+ GCIdleTimeHeapState heap_state, |
double start_ms, double deadline_in_ms) { |
double idle_time_in_ms = deadline_in_ms - start_ms; |
double current_time = MonotonicallyIncreasingTimeInMs(); |
@@ -4271,10 +4272,10 @@ bool Heap::IdleNotification(double deadline_in_seconds) { |
tracer()->SampleAllocation(start_ms, NewSpaceAllocationCounter(), |
OldGenerationAllocationCounter()); |
- GCIdleTimeHandler::HeapState heap_state = ComputeHeapState(); |
+ GCIdleTimeHeapState heap_state = ComputeHeapState(); |
GCIdleTimeAction action = |
- gc_idle_time_handler_.Compute(idle_time_in_ms, heap_state); |
+ gc_idle_time_handler_->Compute(idle_time_in_ms, heap_state); |
bool result = PerformIdleTimeAction(action, heap_state, deadline_in_ms); |
@@ -5076,6 +5077,8 @@ bool Heap::SetUp() { |
scavenge_collector_ = new Scavenger(this); |
+ gc_idle_time_handler_ = new GCIdleTimeHandler(); |
+ |
memory_reducer_ = new MemoryReducer(this); |
object_stats_ = new ObjectStats(this); |
@@ -5190,6 +5193,9 @@ void Heap::TearDown() { |
delete scavenge_collector_; |
scavenge_collector_ = nullptr; |
+ delete gc_idle_time_handler_; |
+ gc_idle_time_handler_ = nullptr; |
+ |
if (memory_reducer_ != nullptr) { |
memory_reducer_->TearDown(); |
delete memory_reducer_; |