summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2017-10-25 15:52:20 +0200
committerMichaël Zasso <targos@protonmail.com>2017-10-28 12:57:51 +0200
commit55a4d66843a8d98491325e807704bad3cbe0ffa6 (patch)
tree1ae0df3c311ed710ae48b5ae3825bc48ea1b1530 /deps/v8/src/heap
parent22882d409400e02b309f2d0802b904bf9e78ef2d (diff)
downloadandroid-node-v8-55a4d66843a8d98491325e807704bad3cbe0ffa6.tar.gz
android-node-v8-55a4d66843a8d98491325e807704bad3cbe0ffa6.tar.bz2
android-node-v8-55a4d66843a8d98491325e807704bad3cbe0ffa6.zip
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: https://github.com/v8/v8/commit/2c75616028e75883e28df2c6d8dd2a6bfe47f718 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>
Diffstat (limited to 'deps/v8/src/heap')
-rw-r--r--deps/v8/src/heap/heap.cc6
-rw-r--r--deps/v8/src/heap/spaces.h5
2 files changed, 11 insertions, 0 deletions
diff --git a/deps/v8/src/heap/heap.cc b/deps/v8/src/heap/heap.cc
index 0b5a90afb0..9f29717803 100644
--- a/deps/v8/src/heap/heap.cc
+++ b/deps/v8/src/heap/heap.cc
@@ -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);
diff --git a/deps/v8/src/heap/spaces.h b/deps/v8/src/heap/spaces.h
index d5dc5b1115..230a127809 100644
--- a/deps/v8/src/heap/spaces.h
+++ b/deps/v8/src/heap/spaces.h
@@ -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;