Index: src/heap/heap.cc |
diff --git a/src/heap/heap.cc b/src/heap/heap.cc |
index 5a10a5cd210ac4da9700d1a746410fc787f93c6c..ac8ceef4101da5b65a65a9667dd08657833b1a62 100644 |
--- a/src/heap/heap.cc |
+++ b/src/heap/heap.cc |
@@ -4565,8 +4565,16 @@ void Heap::MakeHeapIterable() { |
} |
-void Heap::ReduceNewSpaceSize(GCIdleTimeAction action) { |
- if (action.reduce_memory && |
+bool Heap::HasLowAllocationRate(GCIdleTimeHandler::HeapState heap_state) { |
+ static const size_t kLowAllocationRate = 1000; |
+ return heap_state.current_new_space_allocation_throughput_in_bytes_per_ms < |
ulan
2015/05/21 15:21:25
check for heap_state.current_new_space_allocation_
Hannes Payer (out of office)
2015/05/21 17:17:03
Good point! Done.
|
+ kLowAllocationRate; |
+} |
+ |
+ |
+void Heap::ReduceNewSpaceSize(GCIdleTimeAction action, |
+ GCIdleTimeHandler::HeapState heap_state) { |
+ if (HasLowAllocationRate(heap_state) && |
(action.type == DO_SCAVENGE || action.type == DO_FULL_GC || |
(action.type == DO_INCREMENTAL_MARKING && |
incremental_marking()->IsStopped()))) { |
@@ -4635,6 +4643,8 @@ GCIdleTimeHandler::HeapState Heap::ComputeHeapState(bool reduce_memory) { |
heap_state.new_space_capacity = new_space_.Capacity(); |
heap_state.new_space_allocation_throughput_in_bytes_per_ms = |
tracer()->NewSpaceAllocationThroughputInBytesPerMillisecond(); |
+ heap_state.current_new_space_allocation_throughput_in_bytes_per_ms = |
+ tracer()->CurrentNewSpaceAllocationThroughputInBytesPerMillisecond(); |
return heap_state; |
} |
@@ -4697,7 +4707,7 @@ bool Heap::PerformIdleTimeAction(GCIdleTimeAction action, |
break; |
} |
- ReduceNewSpaceSize(action); |
+ ReduceNewSpaceSize(action, heap_state); |
return result; |
} |