deps: cherry-pick 2c75616 from upstream V8

Original commit message:

    [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/702479
    Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
    Commit-Queue: Ulan Degenbaev <ulan@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#48312}

Refs: 2c75616028
Refs: https://github.com/nodejs/help/issues/917#issuecomment-339292642
Refs: https://bugs.chromium.org/p/chromium/issues/detail?id=771966

PR-URL: https://github.com/nodejs/node/pull/16490
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
This commit is contained in:
Michaël Zasso
2017-10-25 15:52:20 +02:00
parent 22882d4094
commit 55a4d66843
3 changed files with 12 additions and 1 deletions

View File

@@ -27,7 +27,7 @@
# Reset this number to 0 on major V8 upgrades.
# Increment by one for each non-official patch applied to deps/v8.
'v8_embedder_string': '-node.4',
'v8_embedder_string': '-node.5',
# Enable disassembler for `--print-code` v8 options
'v8_enable_disassembler': 1,

View File

@@ -1885,6 +1885,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);

View File

@@ -1199,6 +1199,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;