From 2b17c752d117bf0ededd23206bb38b69e641a976 Mon Sep 17 00:00:00 2001 From: hpayer Date: Fri, 15 May 2015 09:08:47 -0700 Subject: [PATCH] Shrink active semi-space and uncommit other semi-space only in idle memory mode. BUG=chromium:483147 LOG=n Review URL: https://codereview.chromium.org/1140693003 Cr-Commit-Position: refs/heads/master@{#28429} --- src/heap/heap.cc | 23 +++++++---------------- src/heap/heap.h | 6 ++---- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/src/heap/heap.cc b/src/heap/heap.cc index ed7d70c..1b8a6b7 100644 --- a/src/heap/heap.cc +++ b/src/heap/heap.cc @@ -4574,18 +4574,8 @@ void Heap::MakeHeapIterable() { DCHECK(IsHeapIterable()); } - -void Heap::ReduceNewSpaceSize(bool is_long_idle_notification) { - if (is_long_idle_notification) { - new_space_.Shrink(); - UncommitFromSpace(); - } -} - - bool Heap::TryFinalizeIdleIncrementalMarking( - bool is_long_idle_notification, double idle_time_in_ms, - size_t size_of_objects, + double idle_time_in_ms, size_t size_of_objects, size_t final_incremental_mark_compact_speed_in_bytes_per_ms) { if (FLAG_overapproximate_weak_closure && (incremental_marking()->IsReadyToOverApproximateWeakClosure() || @@ -4603,7 +4593,6 @@ bool Heap::TryFinalizeIdleIncrementalMarking( final_incremental_mark_compact_speed_in_bytes_per_ms))) { CollectAllGarbage(kNoGCFlags, "idle notification: finalize incremental"); gc_idle_time_handler_.NotifyIdleMarkCompact(); - ReduceNewSpaceSize(is_long_idle_notification); return true; } return false; @@ -4710,8 +4699,7 @@ bool Heap::IdleNotification(double deadline_in_seconds) { !mark_compact_collector_.marking_deque()->IsEmpty()); if (remaining_idle_time_in_ms > 0.0) { action.additional_work = TryFinalizeIdleIncrementalMarking( - is_long_idle_notification, remaining_idle_time_in_ms, - heap_state.size_of_objects, + remaining_idle_time_in_ms, heap_state.size_of_objects, heap_state.final_incremental_mark_compact_speed_in_bytes_per_ms); } break; @@ -4728,13 +4716,11 @@ bool Heap::IdleNotification(double deadline_in_seconds) { "idle notification: finalize idle round"); } gc_count_at_last_idle_gc_ = gc_count_; - ReduceNewSpaceSize(is_long_idle_notification); gc_idle_time_handler_.NotifyIdleMarkCompact(); break; } case DO_SCAVENGE: CollectGarbage(NEW_SPACE, "idle notification: scavenge"); - ReduceNewSpaceSize(is_long_idle_notification); break; case DO_FINALIZE_SWEEPING: mark_compact_collector()->EnsureSweepingCompleted(); @@ -4743,6 +4729,11 @@ bool Heap::IdleNotification(double deadline_in_seconds) { break; } + if (action.reduce_memory) { + new_space_.Shrink(); + UncommitFromSpace(); + } + double current_time = MonotonicallyIncreasingTimeInMs(); last_idle_notification_time_ = current_time; double deadline_difference = deadline_in_ms - current_time; diff --git a/src/heap/heap.h b/src/heap/heap.h index e640d1e..8c1b459 100644 --- a/src/heap/heap.h +++ b/src/heap/heap.h @@ -2101,11 +2101,9 @@ class Heap { void SelectScavengingVisitorsTable(); - void ReduceNewSpaceSize(bool is_long_idle_notification); - bool TryFinalizeIdleIncrementalMarking( - bool is_long_idle_notification, double idle_time_in_ms, - size_t size_of_objects, size_t mark_compact_speed_in_bytes_per_ms); + double idle_time_in_ms, size_t size_of_objects, + size_t mark_compact_speed_in_bytes_per_ms); void ClearObjectStats(bool clear_last_time_stats = false); -- 2.7.4