Index: src/heap/heap.cc |
diff --git a/src/heap/heap.cc b/src/heap/heap.cc |
index 2349f2fa4fe3a013e3510aba3f85a4f4d2a6a4a8..38e4971f4aa55933194c8a4053f3b07a9185d438 100644 |
--- a/src/heap/heap.cc |
+++ b/src/heap/heap.cc |
@@ -1570,6 +1570,8 @@ void Heap::Scavenge() { |
LOG(isolate_, ResourceEvent("scavenge", "end")); |
gc_state_ = NOT_IN_GC; |
+ |
+ gc_idle_time_handler_.NotifyScavenge(); |
} |
@@ -4301,6 +4303,23 @@ void Heap::MakeHeapIterable() { |
} |
+void Heap::IdleMarkCompact(const char* message) { |
+ bool uncommit = false; |
+ if (gc_count_at_last_idle_gc_ == gc_count_) { |
+ // No GC since the last full GC, the mutator is probably not active. |
+ isolate_->compilation_cache()->Clear(); |
+ uncommit = true; |
+ } |
+ CollectAllGarbage(kReduceMemoryFootprintMask, message); |
+ gc_idle_time_handler_.NotifyIdleMarkCompact(); |
+ gc_count_at_last_idle_gc_ = gc_count_; |
+ if (uncommit) { |
+ new_space_.Shrink(); |
+ UncommitFromSpace(); |
+ } |
+} |
+ |
+ |
void Heap::TryFinalizeIdleIncrementalMarking( |
size_t idle_time_in_ms, size_t size_of_objects, |
size_t mark_compact_speed_in_bytes_per_ms) { |
@@ -4309,20 +4328,7 @@ void Heap::TryFinalizeIdleIncrementalMarking( |
gc_idle_time_handler_.ShouldDoMarkCompact( |
idle_time_in_ms, size_of_objects, |
mark_compact_speed_in_bytes_per_ms))) { |
- bool uncommit = false; |
- if (gc_count_at_last_idle_gc_ == gc_count_) { |
- // No GC since the last full GC, the mutator is probably not active. |
- isolate_->compilation_cache()->Clear(); |
- uncommit = true; |
- } |
- CollectAllGarbage(kReduceMemoryFootprintMask, |
- "idle notification: finalize incremental"); |
- gc_idle_time_handler_.NotifyIdleMarkCompact(); |
- gc_count_at_last_idle_gc_ = gc_count_; |
- if (uncommit) { |
- new_space_.Shrink(); |
- UncommitFromSpace(); |
- } |
+ IdleMarkCompact("idle notification: finalize incremental"); |
} |
} |
@@ -4392,11 +4398,14 @@ bool Heap::IdleNotification(int idle_time_in_ms) { |
} |
case DO_FULL_GC: { |
HistogramTimerScope scope(isolate_->counters()->gc_context()); |
- const char* message = contexts_disposed_ |
- ? "idle notification: contexts disposed" |
- : "idle notification: finalize idle round"; |
- CollectAllGarbage(kReduceMemoryFootprintMask, message); |
- gc_idle_time_handler_.NotifyIdleMarkCompact(); |
+ if (contexts_disposed_) { |
+ CollectAllGarbage(kReduceMemoryFootprintMask, |
ulan
2014/10/23 15:09:09
First version didn't have this branch and uncondit
|
+ "idle notification: contexts disposed"); |
+ gc_idle_time_handler_.NotifyIdleMarkCompact(); |
+ gc_count_at_last_idle_gc_ = gc_count_; |
+ } else { |
+ IdleMarkCompact("idle notification: finalize idle round"); |
+ } |
break; |
} |
case DO_SCAVENGE: |