| Index: src/heap/heap.cc
|
| diff --git a/src/heap/heap.cc b/src/heap/heap.cc
|
| index ae77e1eeee1ec5fdb59c6e794b41bea62e7be892..92f5a508e8a697e1a11c700c86f228e0de290b6c 100644
|
| --- a/src/heap/heap.cc
|
| +++ b/src/heap/heap.cc
|
| @@ -27,6 +27,7 @@
|
| #include "src/heap/object-stats.h"
|
| #include "src/heap/objects-visiting-inl.h"
|
| #include "src/heap/objects-visiting.h"
|
| +#include "src/heap/scavenge-job.h"
|
| #include "src/heap/scavenger-inl.h"
|
| #include "src/heap/store-buffer.h"
|
| #include "src/heap-profiler.h"
|
| @@ -128,6 +129,7 @@ Heap::Heap()
|
| gc_idle_time_handler_(nullptr),
|
| memory_reducer_(nullptr),
|
| object_stats_(nullptr),
|
| + scavenge_job_(nullptr),
|
| full_codegen_bytes_generated_(0),
|
| crankshaft_codegen_bytes_generated_(0),
|
| new_space_allocation_counter_(0),
|
| @@ -780,6 +782,11 @@ void Heap::HandleGCRequest() {
|
| }
|
|
|
|
|
| +void Heap::ScheduleIdleScavengeIfNeeded(int bytes_allocated) {
|
| + scavenge_job_->ScheduleIdleTaskIfNeeded(this, bytes_allocated);
|
| +}
|
| +
|
| +
|
| void Heap::OverApproximateWeakClosure(const char* gc_reason) {
|
| if (FLAG_trace_incremental_marking) {
|
| PrintF("[IncrementalMarking] Overapproximate weak closure (%s).\n",
|
| @@ -4098,12 +4105,6 @@ GCIdleTimeHeapState Heap::ComputeHeapState() {
|
| heap_state.incremental_marking_stopped = incremental_marking()->IsStopped();
|
| heap_state.mark_compact_speed_in_bytes_per_ms =
|
| static_cast<size_t>(tracer()->MarkCompactSpeedInBytesPerMillisecond());
|
| - heap_state.scavenge_speed_in_bytes_per_ms =
|
| - static_cast<size_t>(tracer()->ScavengeSpeedInBytesPerMillisecond());
|
| - heap_state.used_new_space_size = new_space_.Size();
|
| - heap_state.new_space_capacity = new_space_.Capacity();
|
| - heap_state.new_space_allocation_throughput_in_bytes_per_ms =
|
| - tracer()->NewSpaceAllocationThroughputInBytesPerMillisecond();
|
| return heap_state;
|
| }
|
|
|
| @@ -4160,9 +4161,6 @@ bool Heap::PerformIdleTimeAction(GCIdleTimeAction action,
|
| CollectAllGarbage(kNoGCFlags, "idle notification: contexts disposed");
|
| break;
|
| }
|
| - case DO_SCAVENGE:
|
| - CollectGarbage(NEW_SPACE, "idle notification: scavenge");
|
| - break;
|
| case DO_NOTHING:
|
| break;
|
| }
|
| @@ -4989,6 +4987,17 @@ void Heap::DisableInlineAllocation() {
|
| }
|
|
|
|
|
| +void Heap::LowerInlineAllocationLimit(intptr_t step) {
|
| + new_space()->LowerInlineAllocationLimit(step);
|
| +}
|
| +
|
| +
|
| +void Heap::ResetInlineAllocationLimit() {
|
| + new_space()->LowerInlineAllocationLimit(
|
| + ScavengeJob::kBytesAllocatedBeforeNextIdleTask);
|
| +}
|
| +
|
| +
|
| V8_DECLARE_ONCE(initialize_gc_once);
|
|
|
| static void InitializeGCOnce() {
|
| @@ -5081,6 +5090,8 @@ bool Heap::SetUp() {
|
| object_stats_ = new ObjectStats(this);
|
| object_stats_->ClearObjectStats(true);
|
|
|
| + scavenge_job_ = new ScavengeJob();
|
| +
|
| array_buffer_tracker_ = new ArrayBufferTracker(this);
|
|
|
| LOG(isolate_, IntPtrTEvent("heap-capacity", Capacity()));
|
| @@ -5090,6 +5101,8 @@ bool Heap::SetUp() {
|
|
|
| mark_compact_collector()->SetUp();
|
|
|
| + ResetInlineAllocationLimit();
|
| +
|
| return true;
|
| }
|
|
|
| @@ -5202,6 +5215,9 @@ void Heap::TearDown() {
|
| delete object_stats_;
|
| object_stats_ = nullptr;
|
|
|
| + delete scavenge_job_;
|
| + scavenge_job_ = nullptr;
|
| +
|
| WaitUntilUnmappingOfFreeChunksCompleted();
|
|
|
| delete array_buffer_tracker_;
|
|
|