| Index: src/heap/heap.cc
|
| diff --git a/src/heap/heap.cc b/src/heap/heap.cc
|
| index ef7030e7aaddb23b7e44519fb191fa3db35628d7..234bc9f563a14d148cc19967d902fb7cc1c4ff8e 100644
|
| --- a/src/heap/heap.cc
|
| +++ b/src/heap/heap.cc
|
| @@ -740,7 +740,7 @@ void Heap::PreprocessStackTraces() {
|
| void Heap::HandleGCRequest() {
|
| if (incremental_marking()->request_type() ==
|
| IncrementalMarking::COMPLETE_MARKING) {
|
| - CollectAllGarbage(Heap::kNoGCFlags, "GC interrupt",
|
| + CollectAllGarbage(current_gc_flags(), "GC interrupt",
|
| incremental_marking()->CallbackFlags());
|
| return;
|
| }
|
| @@ -4748,10 +4748,14 @@ void Heap::ReduceNewSpaceSize() {
|
| // TODO(ulan): Unify this constant with the similar constant in
|
| // GCIdleTimeHandler once the change is merged to 4.5.
|
| static const size_t kLowAllocationThroughput = 1000;
|
| - size_t allocation_throughput =
|
| + const size_t allocation_throughput =
|
| tracer()->CurrentAllocationThroughputInBytesPerMillisecond();
|
| - if (FLAG_predictable || allocation_throughput == 0) return;
|
| - if (allocation_throughput < kLowAllocationThroughput) {
|
| +
|
| + if (FLAG_predictable) return;
|
| +
|
| + if (ShouldReduceMemory() ||
|
| + ((allocation_throughput != 0) &&
|
| + (allocation_throughput < kLowAllocationThroughput))) {
|
| new_space_.Shrink();
|
| UncommitFromSpace();
|
| }
|
| @@ -4766,7 +4770,7 @@ void Heap::FinalizeIncrementalMarkingIfComplete(const char* comment) {
|
| OverApproximateWeakClosure(comment);
|
| } else if (incremental_marking()->IsComplete() ||
|
| (mark_compact_collector_.marking_deque()->IsEmpty())) {
|
| - CollectAllGarbage(kNoGCFlags, comment);
|
| + CollectAllGarbage(current_gc_flags(), comment);
|
| }
|
| }
|
|
|
| @@ -4788,7 +4792,8 @@ bool Heap::TryFinalizeIdleIncrementalMarking(
|
| 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(kNoGCFlags, "idle notification: finalize incremental");
|
| + CollectAllGarbage(current_gc_flags(),
|
| + "idle notification: finalize incremental");
|
| return true;
|
| }
|
| return false;
|
|
|