Index: src/heap/gc-idle-time-handler.cc |
diff --git a/src/heap/gc-idle-time-handler.cc b/src/heap/gc-idle-time-handler.cc |
index 8def9005e647b344685050b96c19bac4fa1e3e98..f36b4cd608228a76dd888a05ac04818e8ef56d90 100644 |
--- a/src/heap/gc-idle-time-handler.cc |
+++ b/src/heap/gc-idle-time-handler.cc |
@@ -68,9 +68,24 @@ size_t GCIdleTimeHandler::EstimateMarkCompactTime( |
} |
+size_t GCIdleTimeHandler::EstimateScavengeTime( |
+ size_t new_space_size, size_t scavenge_speed_in_bytes_per_ms) { |
+ if (scavenge_speed_in_bytes_per_ms == 0) { |
+ scavenge_speed_in_bytes_per_ms = kInitialConservativeScavengeSpeed; |
+ } |
+ return new_space_size / scavenge_speed_in_bytes_per_ms; |
+} |
+ |
+ |
GCIdleTimeAction GCIdleTimeHandler::Compute(size_t idle_time_in_ms, |
HeapState heap_state) { |
- if (IsIdleRoundFinished()) { |
+ if (heap_state.available_new_space_memory < kNewSpaceAlmostFullTreshold && |
ulan
2014/09/10 14:25:00
We should also check new space size now against ne
|
+ idle_time_in_ms >= |
+ EstimateScavengeTime(heap_state.new_space_capacity, |
+ heap_state.scavenge_speed_in_bytes_per_ms)) { |
+ return GCIdleTimeAction::Scavenge(); |
+ } |
+ if (IsMarkCompactIdleRoundFinished()) { |
if (EnoughGarbageSinceLastIdleRound() || heap_state.contexts_disposed > 0) { |
StartIdleRound(); |
} else { |