| Index: src/heap/heap.cc
|
| diff --git a/src/heap/heap.cc b/src/heap/heap.cc
|
| index 72769fe385a2f98e1ff633fef759667d3cb3d1f6..e66ae93ae5b2160f28fbc26f356787691fe64b18 100644
|
| --- a/src/heap/heap.cc
|
| +++ b/src/heap/heap.cc
|
| @@ -133,6 +133,7 @@ Heap::Heap()
|
| marking_time_(0.0),
|
| sweeping_time_(0.0),
|
| last_idle_notification_time_(0.0),
|
| + last_gc_time_(0.0),
|
| mark_compact_collector_(this),
|
| store_buffer_(this),
|
| marking_(this),
|
| @@ -725,6 +726,7 @@ void Heap::GarbageCollectionEpilogue() {
|
| // Remember the last top pointer so that we can later find out
|
| // whether we allocated in new space since the last GC.
|
| new_space_top_after_last_gc_ = new_space()->top();
|
| + last_gc_time_ = MonotonicallyIncreasingTimeInMs();
|
| }
|
|
|
|
|
| @@ -4612,6 +4614,8 @@ bool Heap::IdleNotification(double deadline_in_seconds) {
|
| static_cast<size_t>(idle_time_in_ms) >
|
| GCIdleTimeHandler::kMaxFrameRenderingIdleTime;
|
|
|
| + static const double kLastGCTimeTreshold = 1000;
|
| +
|
| GCIdleTimeHandler::HeapState heap_state;
|
| heap_state.contexts_disposed = contexts_disposed_;
|
| heap_state.contexts_disposal_rate =
|
| @@ -4620,7 +4624,8 @@ bool Heap::IdleNotification(double deadline_in_seconds) {
|
| heap_state.incremental_marking_stopped = incremental_marking()->IsStopped();
|
| // TODO(ulan): Start incremental marking only for large heaps.
|
| intptr_t limit = old_generation_allocation_limit_;
|
| - if (is_long_idle_notification) {
|
| + if (is_long_idle_notification &&
|
| + (start_ms - last_gc_time_ > kLastGCTimeTreshold)) {
|
| limit = idle_old_generation_allocation_limit_;
|
| }
|
|
|
|
|