Commit 2c756160 authored by Ulan Degenbaev's avatar Ulan Degenbaev Committed by Commit Bot

[heap] Ensure progress in unmapping memory chunks.

If sweeping is not making progress and there are many young generation
GCs happening, then this can lead to accumulation of memory chunks in
the unmapper queue.

Bug: chromium:771966
Change-Id: Ief73ada0d17198a80b668850c6d2e7ea413113e7
Reviewed-on: https://chromium-review.googlesource.com/702479Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
Commit-Queue: Ulan Degenbaev <ulan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#48312}
parent 87e1b8df
......@@ -1935,6 +1935,12 @@ void Heap::Scavenge() {
IncrementalMarking::PauseBlackAllocationScope pause_black_allocation(
incremental_marking());
if (mark_compact_collector()->sweeper().sweeping_in_progress() &&
memory_allocator_->unmapper()->NumberOfDelayedChunks() >
kMaxSemiSpaceSizeInKB / Page::kPageSize) {
mark_compact_collector()->EnsureSweepingCompleted();
}
mark_compact_collector()->sweeper().EnsureNewSpaceCompleted();
SetGCState(SCAVENGE);
......
......@@ -1196,6 +1196,11 @@ class V8_EXPORT_PRIVATE MemoryAllocator {
bool has_delayed_chunks() { return delayed_regular_chunks_.size() > 0; }
int NumberOfDelayedChunks() {
base::LockGuard<base::Mutex> guard(&mutex_);
return static_cast<int>(delayed_regular_chunks_.size());
}
private:
static const int kReservedQueueingSlots = 64;
static const int kMaxUnmapperTasks = 24;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment