| Index: src/heap/gc-tracer.cc
|
| diff --git a/src/heap/gc-tracer.cc b/src/heap/gc-tracer.cc
|
| index 8fce990acf969a98cdae2e9db7b1408c8e2f1f92..1b94ecac96f53f6d001d4b669c4aacaee699ee87 100644
|
| --- a/src/heap/gc-tracer.cc
|
| +++ b/src/heap/gc-tracer.cc
|
| @@ -393,105 +393,169 @@ void GCTracer::Print() const {
|
|
|
|
|
| void GCTracer::PrintNVP() const {
|
| - PrintIsolate(heap_->isolate(), "[I:%p] %8.0f ms: ", heap_->isolate(),
|
| - heap_->isolate()->time_millis_since_init());
|
| -
|
| double duration = current_.end_time - current_.start_time;
|
| double spent_in_mutator = current_.start_time - previous_.end_time;
|
| -
|
| - PrintF("pause=%.1f ", duration);
|
| - PrintF("mutator=%.1f ", spent_in_mutator);
|
| - PrintF("gc=%s ", current_.TypeName(true));
|
| - PrintF("reduce_memory=%d ", current_.reduce_memory);
|
| + intptr_t allocated_since_last_gc =
|
| + current_.start_object_size - previous_.end_object_size;
|
|
|
| switch (current_.type) {
|
| case Event::SCAVENGER:
|
| - PrintF("scavenge=%.2f ", current_.scopes[Scope::SCAVENGER_SCAVENGE]);
|
| - PrintF("old_new=%.2f ",
|
| - current_.scopes[Scope::SCAVENGER_OLD_TO_NEW_POINTERS]);
|
| - PrintF("weak=%.2f ", current_.scopes[Scope::SCAVENGER_WEAK]);
|
| - PrintF("roots=%.2f ", current_.scopes[Scope::SCAVENGER_ROOTS]);
|
| - PrintF("code=%.2f ",
|
| - current_.scopes[Scope::SCAVENGER_CODE_FLUSH_CANDIDATES]);
|
| - PrintF("semispace=%.2f ", current_.scopes[Scope::SCAVENGER_SEMISPACE]);
|
| - PrintF("object_groups=%.2f ",
|
| - current_.scopes[Scope::SCAVENGER_OBJECT_GROUPS]);
|
| - PrintF("steps_count=%d ", current_.incremental_marking_steps);
|
| - PrintF("steps_took=%.1f ", current_.incremental_marking_duration);
|
| - PrintF("scavenge_throughput=%" V8_PTR_PREFIX "d ",
|
| - ScavengeSpeedInBytesPerMillisecond());
|
| + PrintIsolate(heap_->isolate(),
|
| + "[I:%p] %8.0f ms: "
|
| + "pause=%.1f "
|
| + "mutator=%.1f "
|
| + "gc=%s "
|
| + "reduce_memory=%d "
|
| + "scavenge=%.2f "
|
| + "old_new=%.2f "
|
| + "weak=%.2f "
|
| + "roots=%.2f "
|
| + "code=%.2f "
|
| + "semispace=%.2f "
|
| + "object_groups=%.2f "
|
| + "steps_count=%d "
|
| + "steps_took=%.1f "
|
| + "scavenge_throughput=%" V8_PTR_PREFIX "d "
|
| + "total_size_before=%" V8_PTR_PREFIX "d "
|
| + "total_size_after=%" V8_PTR_PREFIX "d "
|
| + "holes_size_before=%" V8_PTR_PREFIX "d "
|
| + "holes_size_after=%" V8_PTR_PREFIX "d "
|
| + "allocated=%" V8_PTR_PREFIX "d "
|
| + "promoted=%" V8_PTR_PREFIX "d "
|
| + "semi_space_copied=%" V8_PTR_PREFIX "d "
|
| + "nodes_died_in_new=%d "
|
| + "nodes_copied_in_new=%d "
|
| + "nodes_promoted=%d "
|
| + "promotion_ratio=%.1f%% "
|
| + "average_survival_ratio=%.1f%% "
|
| + "promotion_rate=%.1f%% "
|
| + "semi_space_copy_rate=%.1f%% "
|
| + "new_space_allocation_throughput=%" V8_PTR_PREFIX "d "
|
| + "context_disposal_rate=%.1f\n",
|
| + heap_->isolate(),
|
| + heap_->isolate()->time_millis_since_init(),
|
| + duration,
|
| + spent_in_mutator,
|
| + current_.TypeName(true),
|
| + current_.reduce_memory,
|
| + current_.scopes[Scope::SCAVENGER_SCAVENGE],
|
| + current_.scopes[Scope::SCAVENGER_OLD_TO_NEW_POINTERS],
|
| + current_.scopes[Scope::SCAVENGER_WEAK],
|
| + current_.scopes[Scope::SCAVENGER_ROOTS],
|
| + current_.scopes[Scope::SCAVENGER_CODE_FLUSH_CANDIDATES],
|
| + current_.scopes[Scope::SCAVENGER_SEMISPACE],
|
| + current_.scopes[Scope::SCAVENGER_OBJECT_GROUPS],
|
| + current_.incremental_marking_steps,
|
| + current_.incremental_marking_duration,
|
| + ScavengeSpeedInBytesPerMillisecond(),
|
| + current_.start_object_size, current_.end_object_size,
|
| + current_.start_holes_size, current_.end_holes_size,
|
| + allocated_since_last_gc, heap_->promoted_objects_size(),
|
| + heap_->semi_space_copied_object_size(),
|
| + heap_->nodes_died_in_new_space_,
|
| + heap_->nodes_copied_in_new_space_, heap_->nodes_promoted_,
|
| + heap_->promotion_ratio_, AverageSurvivalRatio(),
|
| + heap_->promotion_rate_, heap_->semi_space_copied_rate_,
|
| + NewSpaceAllocationThroughputInBytesPerMillisecond(),
|
| + ContextDisposalRateInMilliseconds());
|
| break;
|
| case Event::MARK_COMPACTOR:
|
| case Event::INCREMENTAL_MARK_COMPACTOR:
|
| - PrintF("external=%.1f ", current_.scopes[Scope::EXTERNAL]);
|
| - PrintF("mark=%.1f ", current_.scopes[Scope::MC_MARK]);
|
| - PrintF("sweep=%.2f ", current_.scopes[Scope::MC_SWEEP]);
|
| - PrintF("sweepns=%.2f ", current_.scopes[Scope::MC_SWEEP_NEWSPACE]);
|
| - PrintF("sweepos=%.2f ", current_.scopes[Scope::MC_SWEEP_OLDSPACE]);
|
| - PrintF("sweepcode=%.2f ", current_.scopes[Scope::MC_SWEEP_CODE]);
|
| - PrintF("sweepcell=%.2f ", current_.scopes[Scope::MC_SWEEP_CELL]);
|
| - PrintF("sweepmap=%.2f ", current_.scopes[Scope::MC_SWEEP_MAP]);
|
| - PrintF("evacuate=%.1f ", current_.scopes[Scope::MC_EVACUATE_PAGES]);
|
| - PrintF("new_new=%.1f ",
|
| - current_.scopes[Scope::MC_UPDATE_NEW_TO_NEW_POINTERS]);
|
| - PrintF("root_new=%.1f ",
|
| - current_.scopes[Scope::MC_UPDATE_ROOT_TO_NEW_POINTERS]);
|
| - PrintF("old_new=%.1f ",
|
| - current_.scopes[Scope::MC_UPDATE_OLD_TO_NEW_POINTERS]);
|
| - PrintF("compaction_ptrs=%.1f ",
|
| - current_.scopes[Scope::MC_UPDATE_POINTERS_TO_EVACUATED]);
|
| - PrintF("intracompaction_ptrs=%.1f ",
|
| - current_.scopes[Scope::MC_UPDATE_POINTERS_BETWEEN_EVACUATED]);
|
| - PrintF("misc_compaction=%.1f ",
|
| - current_.scopes[Scope::MC_UPDATE_MISC_POINTERS]);
|
| - PrintF("weak_closure=%.1f ", current_.scopes[Scope::MC_WEAKCLOSURE]);
|
| - PrintF("inc_weak_closure=%.1f ",
|
| - current_.scopes[Scope::MC_INCREMENTAL_WEAKCLOSURE]);
|
| - PrintF("weakcollection_process=%.1f ",
|
| - current_.scopes[Scope::MC_WEAKCOLLECTION_PROCESS]);
|
| - PrintF("weakcollection_clear=%.1f ",
|
| - current_.scopes[Scope::MC_WEAKCOLLECTION_CLEAR]);
|
| - PrintF("weakcollection_abort=%.1f ",
|
| - current_.scopes[Scope::MC_WEAKCOLLECTION_ABORT]);
|
| - PrintF("weakcells=%.1f ", current_.scopes[Scope::MC_WEAKCELL]);
|
| - PrintF("nonlive_refs=%.1f ",
|
| - current_.scopes[Scope::MC_NONLIVEREFERENCES]);
|
| -
|
| - PrintF("steps_count=%d ", current_.incremental_marking_steps);
|
| - PrintF("steps_took=%.1f ", current_.incremental_marking_duration);
|
| - PrintF("longest_step=%.1f ", current_.longest_incremental_marking_step);
|
| - PrintF("incremental_marking_throughput=%" V8_PTR_PREFIX "d ",
|
| - IncrementalMarkingSpeedInBytesPerMillisecond());
|
| + PrintIsolate(heap_->isolate(),
|
| + "[I:%p] %8.0f ms: "
|
| + "pause=%.1f "
|
| + "mutator=%.1f "
|
| + "gc=%s "
|
| + "reduce_memory=%d "
|
| + "external=%.1f "
|
| + "mark=%.1f "
|
| + "sweep=%.2f "
|
| + "sweepns=%.2f "
|
| + "sweepos=%.2f "
|
| + "sweepcode=%.2f "
|
| + "sweepcell=%.2f "
|
| + "sweepmap=%.2f "
|
| + "evacuate=%.1f "
|
| + "new_new=%.1f "
|
| + "root_new=%.1f "
|
| + "old_new=%.1f "
|
| + "compaction_ptrs=%.1f "
|
| + "intracompaction_ptrs=%.1f "
|
| + "misc_compaction=%.1f "
|
| + "weak_closure=%.1f "
|
| + "inc_weak_closure=%.1f "
|
| + "weakcollection_process=%.1f "
|
| + "weakcollection_clear=%.1f "
|
| + "weakcollection_abort=%.1f "
|
| + "weakcells=%.1f "
|
| + "nonlive_refs=%.1f "
|
| + "steps_count=%d "
|
| + "steps_took=%.1f "
|
| + "longest_step=%.1f "
|
| + "incremental_marking_throughput=%" V8_PTR_PREFIX "d "
|
| + "total_size_before=%" V8_PTR_PREFIX "d "
|
| + "total_size_after=%" V8_PTR_PREFIX "d "
|
| + "holes_size_before=%" V8_PTR_PREFIX "d "
|
| + "holes_size_after=%" V8_PTR_PREFIX "d "
|
| + "allocated=%" V8_PTR_PREFIX "d "
|
| + "promoted=%" V8_PTR_PREFIX "d "
|
| + "semi_space_copied=%" V8_PTR_PREFIX "d "
|
| + "nodes_died_in_new=%d "
|
| + "nodes_copied_in_new=%d "
|
| + "nodes_promoted=%d "
|
| + "promotion_ratio=%.1f%% "
|
| + "average_survival_ratio=%.1f%% "
|
| + "promotion_rate=%.1f%% "
|
| + "semi_space_copy_rate=%.1f%% "
|
| + "new_space_allocation_throughput=%" V8_PTR_PREFIX "d "
|
| + "context_disposal_rate=%.1f\n",
|
| + heap_->isolate(),
|
| + heap_->isolate()->time_millis_since_init(),
|
| + duration, spent_in_mutator,
|
| + current_.TypeName(true),
|
| + current_.reduce_memory,
|
| + current_.scopes[Scope::EXTERNAL],
|
| + current_.scopes[Scope::MC_MARK],
|
| + current_.scopes[Scope::MC_SWEEP],
|
| + current_.scopes[Scope::MC_SWEEP_NEWSPACE],
|
| + current_.scopes[Scope::MC_SWEEP_OLDSPACE],
|
| + current_.scopes[Scope::MC_SWEEP_CODE],
|
| + current_.scopes[Scope::MC_SWEEP_CELL],
|
| + current_.scopes[Scope::MC_SWEEP_MAP],
|
| + current_.scopes[Scope::MC_EVACUATE_PAGES],
|
| + current_.scopes[Scope::MC_UPDATE_NEW_TO_NEW_POINTERS],
|
| + current_.scopes[Scope::MC_UPDATE_ROOT_TO_NEW_POINTERS],
|
| + current_.scopes[Scope::MC_UPDATE_OLD_TO_NEW_POINTERS],
|
| + current_.scopes[Scope::MC_UPDATE_POINTERS_TO_EVACUATED],
|
| + current_.scopes[Scope::MC_UPDATE_POINTERS_BETWEEN_EVACUATED],
|
| + current_.scopes[Scope::MC_UPDATE_MISC_POINTERS],
|
| + current_.scopes[Scope::MC_WEAKCLOSURE],
|
| + current_.scopes[Scope::MC_INCREMENTAL_WEAKCLOSURE],
|
| + current_.scopes[Scope::MC_WEAKCOLLECTION_PROCESS],
|
| + current_.scopes[Scope::MC_WEAKCOLLECTION_CLEAR],
|
| + current_.scopes[Scope::MC_WEAKCOLLECTION_ABORT],
|
| + current_.scopes[Scope::MC_WEAKCELL],
|
| + current_.scopes[Scope::MC_NONLIVEREFERENCES],
|
| + current_.incremental_marking_steps,
|
| + current_.incremental_marking_duration,
|
| + current_.longest_incremental_marking_step,
|
| + IncrementalMarkingSpeedInBytesPerMillisecond(),
|
| + current_.start_object_size, current_.end_object_size,
|
| + current_.start_holes_size, current_.end_holes_size,
|
| + allocated_since_last_gc, heap_->promoted_objects_size(),
|
| + heap_->semi_space_copied_object_size(),
|
| + heap_->nodes_died_in_new_space_,
|
| + heap_->nodes_copied_in_new_space_, heap_->nodes_promoted_,
|
| + heap_->promotion_ratio_, AverageSurvivalRatio(),
|
| + heap_->promotion_rate_, heap_->semi_space_copied_rate_,
|
| + NewSpaceAllocationThroughputInBytesPerMillisecond(),
|
| + ContextDisposalRateInMilliseconds());
|
| break;
|
| case Event::START:
|
| break;
|
| default:
|
| UNREACHABLE();
|
| }
|
| -
|
| - PrintF("total_size_before=%" V8_PTR_PREFIX "d ", current_.start_object_size);
|
| - PrintF("total_size_after=%" V8_PTR_PREFIX "d ", current_.end_object_size);
|
| - PrintF("holes_size_before=%" V8_PTR_PREFIX "d ", current_.start_holes_size);
|
| - PrintF("holes_size_after=%" V8_PTR_PREFIX "d ", current_.end_holes_size);
|
| -
|
| - intptr_t allocated_since_last_gc =
|
| - current_.start_object_size - previous_.end_object_size;
|
| - PrintF("allocated=%" V8_PTR_PREFIX "d ", allocated_since_last_gc);
|
| - PrintF("promoted=%" V8_PTR_PREFIX "d ", heap_->promoted_objects_size());
|
| - PrintF("semi_space_copied=%" V8_PTR_PREFIX "d ",
|
| - heap_->semi_space_copied_object_size());
|
| - PrintF("nodes_died_in_new=%d ", heap_->nodes_died_in_new_space_);
|
| - PrintF("nodes_copied_in_new=%d ", heap_->nodes_copied_in_new_space_);
|
| - PrintF("nodes_promoted=%d ", heap_->nodes_promoted_);
|
| - PrintF("promotion_ratio=%.1f%% ", heap_->promotion_ratio_);
|
| - PrintF("average_survival_ratio=%.1f%% ", AverageSurvivalRatio());
|
| - PrintF("promotion_rate=%.1f%% ", heap_->promotion_rate_);
|
| - PrintF("semi_space_copy_rate=%.1f%% ", heap_->semi_space_copied_rate_);
|
| - PrintF("new_space_allocation_throughput=%" V8_PTR_PREFIX "d ",
|
| - NewSpaceAllocationThroughputInBytesPerMillisecond());
|
| - PrintF("context_disposal_rate=%.1f ", ContextDisposalRateInMilliseconds());
|
| -
|
| - PrintF("\n");
|
| }
|
|
|
|
|
|
|