From: mlippautz Date: Fri, 21 Aug 2015 10:05:18 +0000 (-0700) Subject: [heap] Thread through GC flags in memory reducer and incremental marking. X-Git-Tag: upstream/4.7.83~753 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7a21a70c4ea61251b9875991b8b4fd4f4eddef34;p=platform%2Fupstream%2Fv8.git [heap] Thread through GC flags in memory reducer and incremental marking. BUG=chromium:520607 LOG=N Review URL: https://codereview.chromium.org/1302273002 Cr-Commit-Position: refs/heads/master@{#30287} --- diff --git a/src/heap/heap.cc b/src/heap/heap.cc index ef7030e..234bc9f 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(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; diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc index 48ec24b..8703871 100644 --- a/test/cctest/test-heap.cc +++ b/test/cctest/test-heap.cc @@ -2812,7 +2812,8 @@ HEAP_TEST(GCFlags) { marking->Start(Heap::kReduceMemoryFootprintMask); CHECK_NE(0, heap->current_gc_flags() & Heap::kReduceMemoryFootprintMask); - heap->Scavenge(); + heap->CollectGarbage(NEW_SPACE); + // NewSpace scavenges should not overwrite the flags. CHECK_NE(0, heap->current_gc_flags() & Heap::kReduceMemoryFootprintMask); heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);