// 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();
}
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 =
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_;
}
// Minimal interval between two subsequent collections.
double min_in_mutator_;
- // Cumulative GC time spent in marking
+ // Cumulative GC time spent in marking.
double marking_time_;
- // Cumulative GC time spent in sweeping
+ // Cumulative GC time spent in sweeping.
double sweeping_time_;
- // Last time an idle notification happened
+ // Last time an idle notification happened.
double last_idle_notification_time_;
+ // Last time a garbage collection happened.
+ double last_gc_time_;
+
MarkCompactCollector mark_compact_collector_;
StoreBuffer store_buffer_;