From cb73facc84a0dfd06002895f6f623a8bdfa91e89 Mon Sep 17 00:00:00 2001 From: Hannes Payer Date: Mon, 17 Nov 2014 10:16:14 +0100 Subject: [PATCH] Added --trace_idle_notification_verbose which prints out the idle notificatino heap state. BUG= R=jochen@chromium.org Review URL: https://codereview.chromium.org/732473002 Cr-Commit-Position: refs/heads/master@{#25369} --- src/flag-definitions.h | 2 ++ src/heap/gc-idle-time-handler.cc | 19 +++++++++++++++++++ src/heap/gc-idle-time-handler.h | 5 ++++- src/heap/heap.cc | 8 +++++++- 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/flag-definitions.h b/src/flag-definitions.h index a3e618a..deaae06 100644 --- a/src/flag-definitions.h +++ b/src/flag-definitions.h @@ -542,6 +542,8 @@ DEFINE_BOOL(trace_gc_ignore_scavenger, false, "do not print trace line after scavenger collection") DEFINE_BOOL(trace_idle_notification, false, "print one trace line following each idle notification") +DEFINE_BOOL(trace_idle_notification_verbose, false, + "prints the heap state used by the idle notification") DEFINE_BOOL(print_cumulative_gc_stat, false, "print cumulative GC statistics in name=value format on exit") DEFINE_BOOL(print_max_heap_committed, false, diff --git a/src/heap/gc-idle-time-handler.cc b/src/heap/gc-idle-time-handler.cc index accb87c..beede4c 100644 --- a/src/heap/gc-idle-time-handler.cc +++ b/src/heap/gc-idle-time-handler.cc @@ -41,6 +41,25 @@ void GCIdleTimeAction::Print() { } +void GCIdleTimeHandler::HeapState::Print() { + PrintF("contexts_disposed=%d ", contexts_disposed); + PrintF("contexts_disposal_rate=%f ", contexts_disposal_rate); + PrintF("size_of_objects=%" V8_PTR_PREFIX "d ", size_of_objects); + PrintF("incremental_marking_stopped=%d ", incremental_marking_stopped); + PrintF("can_start_incremental_marking=%d ", can_start_incremental_marking); + PrintF("sweeping_in_progress=%d ", sweeping_in_progress); + PrintF("mark_compact_speed=%" V8_PTR_PREFIX "d ", + mark_compact_speed_in_bytes_per_ms); + PrintF("incremental_marking_speed=%" V8_PTR_PREFIX "d ", + incremental_marking_speed_in_bytes_per_ms); + PrintF("scavenge_speed=%" V8_PTR_PREFIX "d ", scavenge_speed_in_bytes_per_ms); + PrintF("new_space_size=%" V8_PTR_PREFIX "d ", used_new_space_size); + PrintF("new_space_capacity=%" V8_PTR_PREFIX "d ", new_space_capacity); + PrintF("new_space_allocation_throughput=%" V8_PTR_PREFIX "d", + new_space_allocation_throughput_in_bytes_per_ms); +} + + size_t GCIdleTimeHandler::EstimateMarkingStepSize( size_t idle_time_in_ms, size_t marking_speed_in_bytes_per_ms) { DCHECK(idle_time_in_ms > 0); diff --git a/src/heap/gc-idle-time-handler.h b/src/heap/gc-idle-time-handler.h index cae6936..afb177d 100644 --- a/src/heap/gc-idle-time-handler.h +++ b/src/heap/gc-idle-time-handler.h @@ -116,7 +116,10 @@ class GCIdleTimeHandler { // If contexts are disposed at a higher rate a full gc is triggered. static const double kHighContextDisposalRate; - struct HeapState { + class HeapState { + public: + void Print(); + int contexts_disposed; double contexts_disposal_rate; size_t size_of_objects; diff --git a/src/heap/heap.cc b/src/heap/heap.cc index 3c51b6e..9785be0 100644 --- a/src/heap/heap.cc +++ b/src/heap/heap.cc @@ -4485,7 +4485,13 @@ bool Heap::IdleNotification(int idle_time_in_ms) { PrintF("Idle notification: requested idle time %d ms, actual time %d ms [", idle_time_in_ms, actual_time_in_ms); action.Print(); - PrintF("]\n"); + PrintF("]"); + if (FLAG_trace_idle_notification_verbose) { + PrintF("["); + heap_state.Print(); + PrintF("]"); + } + PrintF("\n"); } contexts_disposed_ = 0; -- 2.7.4