| Index: src/heap/gc-tracer.cc
|
| diff --git a/src/heap/gc-tracer.cc b/src/heap/gc-tracer.cc
|
| index 2854e452f127488c6ecccacaf716b977a8d2ce35..a37b832358e3f90a3198668ac81f2d29f027d35c 100644
|
| --- a/src/heap/gc-tracer.cc
|
| +++ b/src/heap/gc-tracer.cc
|
| @@ -309,6 +309,13 @@ void GCTracer::AddContextDisposalTime(double time) {
|
| }
|
|
|
|
|
| +void GCTracer::AddCompactionEvent(double duration,
|
| + intptr_t live_bytes_compacted) {
|
| + compaction_events_.push_front(
|
| + CompactionEvent(duration, live_bytes_compacted));
|
| +}
|
| +
|
| +
|
| void GCTracer::AddSurvivalRatio(double promotion_ratio) {
|
| survival_events_.push_front(SurvivalEvent(promotion_ratio));
|
| }
|
| @@ -535,7 +542,8 @@ void GCTracer::PrintNVP() const {
|
| "semi_space_copy_rate=%.1f%% "
|
| "new_space_allocation_throughput=%" V8_PTR_PREFIX
|
| "d "
|
| - "context_disposal_rate=%.1f\n",
|
| + "context_disposal_rate=%.1f "
|
| + "compaction_speed=%" V8_PTR_PREFIX "d\n",
|
| heap_->isolate()->time_millis_since_init(), duration,
|
| spent_in_mutator, current_.TypeName(true),
|
| current_.reduce_memory, current_.scopes[Scope::EXTERNAL],
|
| @@ -585,7 +593,8 @@ void GCTracer::PrintNVP() const {
|
| heap_->promotion_ratio_, AverageSurvivalRatio(),
|
| heap_->promotion_rate_, heap_->semi_space_copied_rate_,
|
| NewSpaceAllocationThroughputInBytesPerMillisecond(),
|
| - ContextDisposalRateInMilliseconds());
|
| + ContextDisposalRateInMilliseconds(),
|
| + CompactionSpeedInBytesPerMillisecond());
|
| break;
|
| case Event::START:
|
| break;
|
| @@ -706,6 +715,23 @@ intptr_t GCTracer::ScavengeSpeedInBytesPerMillisecond(
|
| }
|
|
|
|
|
| +intptr_t GCTracer::CompactionSpeedInBytesPerMillisecond() const {
|
| + if (compaction_events_.size() < kRingBufferMaxSize) return 0.0;
|
| + intptr_t bytes = 0;
|
| + double durations = 0.0;
|
| + CompactionEventBuffer::const_iterator iter = compaction_events_.begin();
|
| + while (iter != compaction_events_.end()) {
|
| + bytes += iter->live_bytes_compacted;
|
| + durations += iter->duration;
|
| + ++iter;
|
| + }
|
| +
|
| + if (durations == 0.0) return 0;
|
| + // Make sure the result is at least 1.
|
| + return Max<intptr_t>(static_cast<intptr_t>(bytes / durations + 0.5), 1);
|
| +}
|
| +
|
| +
|
| intptr_t GCTracer::MarkCompactSpeedInBytesPerMillisecond() const {
|
| intptr_t bytes = 0;
|
| double durations = 0.0;
|
|
|