| Index: src/heap/gc-tracer.cc
|
| diff --git a/src/heap/gc-tracer.cc b/src/heap/gc-tracer.cc
|
| index b4af3ff169f5c5864d5c20ce6a47655f74ef94fe..666a56818f8e78259eb7186572791de76aa19adb 100644
|
| --- a/src/heap/gc-tracer.cc
|
| +++ b/src/heap/gc-tracer.cc
|
| @@ -40,16 +40,6 @@ GCTracer::Scope::~Scope() {
|
| }
|
| }
|
|
|
| -void GCTracer::AddScopeSample(Scope::ScopeId scope, double duration) {
|
| - DCHECK(scope < Scope::NUMBER_OF_SCOPES);
|
| - if (scope >= Scope::FIRST_INCREMENTAL_SCOPE &&
|
| - scope <= Scope::LAST_INCREMENTAL_SCOPE) {
|
| - cumulative_incremental_scopes_[scope] += duration;
|
| - } else {
|
| - current_.scopes[scope] += duration;
|
| - }
|
| -}
|
| -
|
| const char* GCTracer::Scope::Name(ScopeId id) {
|
| #define CASE(scope) \
|
| case Scope::scope: \
|
| @@ -79,23 +69,10 @@ GCTracer::Event::Event(Type type, const char* gc_reason,
|
| end_holes_size(0),
|
| new_space_object_size(0),
|
| survived_new_space_object_size(0),
|
| - cumulative_incremental_marking_steps(0),
|
| - incremental_marking_steps(0),
|
| cumulative_incremental_marking_bytes(0),
|
| incremental_marking_bytes(0),
|
| - cumulative_incremental_marking_duration(0.0),
|
| - incremental_marking_duration(0.0),
|
| cumulative_pure_incremental_marking_duration(0.0),
|
| - pure_incremental_marking_duration(0.0),
|
| - longest_incremental_marking_step(0.0),
|
| - cumulative_incremental_marking_finalization_steps(0),
|
| - cumulative_incremental_marking_finalizaton_duration(0),
|
| - longest_incremental_marking_finalization_step(0),
|
| - incremental_marking_finalizaton_steps(0),
|
| - incremental_marking_finalization_duration(0) {
|
| - for (int i = 0; i < Scope::NUMBER_OF_INCREMENTAL_SCOPES; i++) {
|
| - cumulative_incremental_scopes[i] = 0;
|
| - }
|
| + pure_incremental_marking_duration(0.0) {
|
| for (int i = 0; i < Scope::NUMBER_OF_SCOPES; i++) {
|
| scopes[i] = 0;
|
| }
|
| @@ -127,17 +104,14 @@ const char* GCTracer::Event::TypeName(bool short_name) const {
|
| return "Unknown Event Type";
|
| }
|
|
|
| -
|
| GCTracer::GCTracer(Heap* heap)
|
| : heap_(heap),
|
| - cumulative_incremental_marking_steps_(0),
|
| + current_(Event::START, nullptr, nullptr),
|
| + previous_(current_),
|
| + previous_incremental_mark_compactor_event_(current_),
|
| cumulative_incremental_marking_bytes_(0),
|
| cumulative_incremental_marking_duration_(0.0),
|
| cumulative_pure_incremental_marking_duration_(0.0),
|
| - longest_incremental_marking_step_(0.0),
|
| - cumulative_incremental_marking_finalization_steps_(0),
|
| - cumulative_incremental_marking_finalization_duration_(0.0),
|
| - longest_incremental_marking_finalization_step_(0.0),
|
| cumulative_marking_duration_(0.0),
|
| cumulative_sweeping_duration_(0.0),
|
| allocation_time_ms_(0.0),
|
| @@ -148,20 +122,13 @@ GCTracer::GCTracer(Heap* heap)
|
| old_generation_allocation_in_bytes_since_gc_(0),
|
| combined_mark_compact_speed_cache_(0.0),
|
| start_counter_(0) {
|
| - current_ = Event(Event::START, NULL, NULL);
|
| current_.end_time = heap_->MonotonicallyIncreasingTimeInMs();
|
| - previous_ = previous_incremental_mark_compactor_event_ = current_;
|
| }
|
|
|
| void GCTracer::ResetForTesting() {
|
| - cumulative_incremental_marking_steps_ = 0.0;
|
| cumulative_incremental_marking_bytes_ = 0.0;
|
| cumulative_incremental_marking_duration_ = 0.0;
|
| cumulative_pure_incremental_marking_duration_ = 0.0;
|
| - longest_incremental_marking_step_ = 0.0;
|
| - cumulative_incremental_marking_finalization_steps_ = 0.0;
|
| - cumulative_incremental_marking_finalization_duration_ = 0.0;
|
| - longest_incremental_marking_finalization_step_ = 0.0;
|
| cumulative_marking_duration_ = 0.0;
|
| cumulative_sweeping_duration_ = 0.0;
|
| allocation_time_ms_ = 0.0;
|
| @@ -173,7 +140,9 @@ void GCTracer::ResetForTesting() {
|
| combined_mark_compact_speed_cache_ = 0.0;
|
| start_counter_ = 0;
|
| for (int i = 0; i < Scope::NUMBER_OF_INCREMENTAL_SCOPES; i++) {
|
| - cumulative_incremental_scopes_[i] = 0;
|
| + incremental_marking_scopes_[i].cumulative_duration = 0.0;
|
| + incremental_marking_scopes_[i].steps = 0;
|
| + incremental_marking_scopes_[i].longest_step = 0.0;
|
| }
|
| current_ = Event(Event::START, NULL, NULL);
|
| current_.end_time = heap_->MonotonicallyIncreasingTimeInMs();
|
| @@ -211,21 +180,10 @@ void GCTracer::Start(GarbageCollector collector, const char* gc_reason,
|
| current_.new_space_object_size =
|
| heap_->new_space()->top() - heap_->new_space()->bottom();
|
|
|
| - current_.cumulative_incremental_marking_steps =
|
| - cumulative_incremental_marking_steps_;
|
| current_.cumulative_incremental_marking_bytes =
|
| cumulative_incremental_marking_bytes_;
|
| - current_.cumulative_incremental_marking_duration =
|
| - cumulative_incremental_marking_duration_;
|
| current_.cumulative_pure_incremental_marking_duration =
|
| cumulative_pure_incremental_marking_duration_;
|
| - current_.longest_incremental_marking_step = longest_incremental_marking_step_;
|
| - current_.cumulative_incremental_marking_finalization_steps =
|
| - cumulative_incremental_marking_finalization_steps_;
|
| - current_.cumulative_incremental_marking_finalizaton_duration =
|
| - cumulative_incremental_marking_finalization_duration_;
|
| - current_.longest_incremental_marking_finalization_step =
|
| - longest_incremental_marking_finalization_step_;
|
|
|
| for (int i = 0; i < Scope::NUMBER_OF_SCOPES; i++) {
|
| current_.scopes[i] = 0;
|
| @@ -243,12 +201,27 @@ void GCTracer::Start(GarbageCollector collector, const char* gc_reason,
|
| }
|
| }
|
|
|
| +void GCTracer::MergeBaseline(const Event& baseline) {
|
| + current_.incremental_marking_bytes =
|
| + current_.cumulative_incremental_marking_bytes -
|
| + baseline.cumulative_incremental_marking_bytes;
|
| + current_.pure_incremental_marking_duration =
|
| + current_.cumulative_pure_incremental_marking_duration -
|
| + baseline.cumulative_pure_incremental_marking_duration;
|
| + for (int i = Scope::FIRST_INCREMENTAL_SCOPE;
|
| + i <= Scope::LAST_INCREMENTAL_SCOPE; i++) {
|
| + current_.scopes[i] =
|
| + current_.incremental_marking_scopes[i].cumulative_duration -
|
| + baseline.incremental_marking_scopes[i].cumulative_duration;
|
| + }
|
| +}
|
| +
|
| void GCTracer::Stop(GarbageCollector collector) {
|
| start_counter_--;
|
| if (start_counter_ != 0) {
|
| - Output("[Finished reentrant %s during %s.]\n",
|
| - collector == SCAVENGER ? "Scavenge" : "Mark-sweep",
|
| - current_.TypeName(false));
|
| + PrintIsolate(heap_->isolate(), "[Finished reentrant %s during %s.]\n",
|
| + collector == SCAVENGER ? "Scavenge" : "Mark-sweep",
|
| + current_.TypeName(false));
|
| return;
|
| }
|
|
|
| @@ -260,8 +233,7 @@ void GCTracer::Stop(GarbageCollector collector) {
|
|
|
| for (int i = Scope::FIRST_INCREMENTAL_SCOPE;
|
| i <= Scope::LAST_INCREMENTAL_SCOPE; i++) {
|
| - current_.cumulative_incremental_scopes[i] =
|
| - cumulative_incremental_scopes_[i];
|
| + current_.incremental_marking_scopes[i] = incremental_marking_scopes_[i];
|
| }
|
|
|
| current_.end_time = heap_->MonotonicallyIncreasingTimeInMs();
|
| @@ -281,57 +253,31 @@ void GCTracer::Stop(GarbageCollector collector) {
|
|
|
| double duration = current_.end_time - current_.start_time;
|
|
|
| - const Event* baseline = nullptr;
|
| if (current_.type == Event::SCAVENGER) {
|
| - baseline = &previous_;
|
| + MergeBaseline(previous_);
|
| recorded_scavenges_total_.Push(
|
| MakeBytesAndDuration(current_.new_space_object_size, duration));
|
| recorded_scavenges_survived_.Push(MakeBytesAndDuration(
|
| current_.survived_new_space_object_size, duration));
|
| } else if (current_.type == Event::INCREMENTAL_MARK_COMPACTOR) {
|
| - baseline = &previous_incremental_mark_compactor_event_;
|
| - longest_incremental_marking_step_ = 0.0;
|
| - longest_incremental_marking_finalization_step_ = 0.0;
|
| + MergeBaseline(previous_incremental_mark_compactor_event_);
|
| recorded_incremental_marking_steps_.Push(
|
| MakeBytesAndDuration(current_.incremental_marking_bytes,
|
| current_.pure_incremental_marking_duration));
|
| recorded_incremental_mark_compacts_.Push(
|
| MakeBytesAndDuration(current_.start_object_size, duration));
|
| combined_mark_compact_speed_cache_ = 0.0;
|
| + for (int i = 0; i <= Scope::NUMBER_OF_INCREMENTAL_SCOPES; i++) {
|
| + incremental_marking_scopes_[i].ResetCurrentCycle();
|
| + }
|
| } else {
|
| DCHECK(current_.incremental_marking_bytes == 0);
|
| - DCHECK(current_.incremental_marking_duration == 0);
|
| DCHECK(current_.pure_incremental_marking_duration == 0);
|
| - longest_incremental_marking_step_ = 0.0;
|
| - longest_incremental_marking_finalization_step_ = 0.0;
|
| recorded_mark_compacts_.Push(
|
| MakeBytesAndDuration(current_.start_object_size, duration));
|
| combined_mark_compact_speed_cache_ = 0.0;
|
| - }
|
| -
|
| - if (baseline != nullptr) {
|
| - current_.incremental_marking_steps =
|
| - current_.cumulative_incremental_marking_steps -
|
| - baseline->cumulative_incremental_marking_steps;
|
| - current_.incremental_marking_bytes =
|
| - current_.cumulative_incremental_marking_bytes -
|
| - baseline->cumulative_incremental_marking_bytes;
|
| - current_.incremental_marking_duration =
|
| - current_.cumulative_incremental_marking_duration -
|
| - baseline->cumulative_incremental_marking_duration;
|
| - current_.pure_incremental_marking_duration =
|
| - current_.cumulative_pure_incremental_marking_duration -
|
| - baseline->cumulative_pure_incremental_marking_duration;
|
| - current_.incremental_marking_finalizaton_steps =
|
| - current_.cumulative_incremental_marking_finalization_steps -
|
| - baseline->cumulative_incremental_marking_finalization_steps;
|
| - current_.incremental_marking_finalization_duration =
|
| - current_.cumulative_incremental_marking_finalizaton_duration -
|
| - baseline->cumulative_incremental_marking_finalizaton_duration;
|
| - for (int i = Scope::FIRST_INCREMENTAL_SCOPE;
|
| - i <= Scope::LAST_INCREMENTAL_SCOPE; i++) {
|
| - current_.scopes[i] = current_.cumulative_incremental_scopes[i] -
|
| - baseline->cumulative_incremental_scopes[i];
|
| + for (int i = 0; i <= Scope::NUMBER_OF_INCREMENTAL_SCOPES; i++) {
|
| + incremental_marking_scopes_[i].ResetCurrentCycle();
|
| }
|
| }
|
|
|
| @@ -420,26 +366,14 @@ void GCTracer::AddSurvivalRatio(double promotion_ratio) {
|
|
|
|
|
| void GCTracer::AddIncrementalMarkingStep(double duration, intptr_t bytes) {
|
| - cumulative_incremental_marking_steps_++;
|
| cumulative_incremental_marking_bytes_ += bytes;
|
| cumulative_incremental_marking_duration_ += duration;
|
| - longest_incremental_marking_step_ =
|
| - Max(longest_incremental_marking_step_, duration);
|
| cumulative_marking_duration_ += duration;
|
| if (bytes > 0) {
|
| cumulative_pure_incremental_marking_duration_ += duration;
|
| }
|
| }
|
|
|
| -
|
| -void GCTracer::AddIncrementalMarkingFinalizationStep(double duration) {
|
| - cumulative_incremental_marking_finalization_steps_++;
|
| - cumulative_incremental_marking_finalization_duration_ += duration;
|
| - longest_incremental_marking_finalization_step_ =
|
| - Max(longest_incremental_marking_finalization_step_, duration);
|
| -}
|
| -
|
| -
|
| void GCTracer::Output(const char* format, ...) const {
|
| if (FLAG_trace_gc) {
|
| va_list arguments;
|
| @@ -461,46 +395,46 @@ void GCTracer::Output(const char* format, ...) const {
|
|
|
|
|
| void GCTracer::Print() const {
|
| - if (FLAG_trace_gc) {
|
| - PrintIsolate(heap_->isolate(), "%s", "");
|
| - }
|
| - Output("%8.0f ms: ", heap_->isolate()->time_millis_since_init());
|
| -
|
| - Output("%s %.1f (%.1f) -> %.1f (%.1f) MB, ", current_.TypeName(false),
|
| - static_cast<double>(current_.start_object_size) / MB,
|
| - static_cast<double>(current_.start_memory_size) / MB,
|
| - static_cast<double>(current_.end_object_size) / MB,
|
| - static_cast<double>(current_.end_memory_size) / MB);
|
| -
|
| double duration = current_.end_time - current_.start_time;
|
| - Output("%.1f / %.1f ms", duration, TotalExternalTime());
|
| -
|
| - if (current_.type == Event::SCAVENGER) {
|
| - if (current_.incremental_marking_steps > 0) {
|
| - Output(" (+ %.1f ms in %d steps since last GC)",
|
| - current_.incremental_marking_duration,
|
| - current_.incremental_marking_steps);
|
| - }
|
| - } else {
|
| - if (current_.incremental_marking_steps > 0) {
|
| - Output(
|
| + const size_t kIncrementalStatsSize = 128;
|
| + char incremental_buffer[kIncrementalStatsSize] = {0};
|
| +
|
| + if (current_.incremental_marking_scopes[Scope::MC_INCREMENTAL].steps > 0) {
|
| + if (current_.type == Event::SCAVENGER) {
|
| + base::OS::SNPrintF(
|
| + incremental_buffer, kIncrementalStatsSize,
|
| + " (+ %.1f ms in %d steps since last GC)",
|
| + current_.scopes[Scope::MC_INCREMENTAL],
|
| + current_.incremental_marking_scopes[Scope::MC_INCREMENTAL].steps);
|
| + } else {
|
| + base::OS::SNPrintF(
|
| + incremental_buffer, kIncrementalStatsSize,
|
| " (+ %.1f ms in %d steps since start of marking, "
|
| "biggest step %.1f ms)",
|
| - current_.incremental_marking_duration,
|
| - current_.incremental_marking_steps,
|
| - current_.longest_incremental_marking_step);
|
| + current_.scopes[Scope::MC_INCREMENTAL],
|
| + current_.incremental_marking_scopes[Scope::MC_INCREMENTAL].steps,
|
| + current_.incremental_marking_scopes[Scope::MC_INCREMENTAL]
|
| + .longest_step);
|
| }
|
| }
|
|
|
| - if (current_.gc_reason != NULL) {
|
| - Output(" [%s]", current_.gc_reason);
|
| - }
|
| -
|
| - if (current_.collector_reason != NULL) {
|
| - Output(" [%s]", current_.collector_reason);
|
| - }
|
| -
|
| - Output(".\n");
|
| + // Avoid PrintF as Output also appends the string to the tracing ring buffer
|
| + // that gets printed on OOM failures.
|
| + Output(
|
| + "[%d:%p] "
|
| + "%8.0f ms: "
|
| + "%s %.1f (%.1f) -> %.1f (%.1f) MB, "
|
| + "%.1f / %.1f ms %s %s %s\n",
|
| + base::OS::GetCurrentProcessId(),
|
| + reinterpret_cast<void*>(heap_->isolate()),
|
| + heap_->isolate()->time_millis_since_init(), current_.TypeName(false),
|
| + static_cast<double>(current_.start_object_size) / MB,
|
| + static_cast<double>(current_.start_memory_size) / MB,
|
| + static_cast<double>(current_.end_object_size) / MB,
|
| + static_cast<double>(current_.end_memory_size) / MB, duration,
|
| + TotalExternalTime(), incremental_buffer,
|
| + current_.gc_reason != nullptr ? current_.gc_reason : "",
|
| + current_.collector_reason != nullptr ? current_.collector_reason : "");
|
| }
|
|
|
|
|
| @@ -512,74 +446,75 @@ void GCTracer::PrintNVP() const {
|
|
|
| switch (current_.type) {
|
| case Event::SCAVENGER:
|
| - PrintIsolate(heap_->isolate(),
|
| - "%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 "
|
| - "external_prologue=%.2f "
|
| - "external_epilogue=%.2f "
|
| - "external_weak_global_handles=%.2f "
|
| - "steps_count=%d "
|
| - "steps_took=%.1f "
|
| - "scavenge_throughput=%.f "
|
| - "total_size_before=%" V8PRIdPTR
|
| - " "
|
| - "total_size_after=%" V8PRIdPTR
|
| - " "
|
| - "holes_size_before=%" V8PRIdPTR
|
| - " "
|
| - "holes_size_after=%" V8PRIdPTR
|
| - " "
|
| - "allocated=%" V8PRIdPTR
|
| - " "
|
| - "promoted=%" V8PRIdPTR
|
| - " "
|
| - "semi_space_copied=%" V8PRIdPTR
|
| - " "
|
| - "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=%.1f "
|
| - "context_disposal_rate=%.1f\n",
|
| - 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_.scopes[Scope::SCAVENGER_EXTERNAL_PROLOGUE],
|
| - current_.scopes[Scope::SCAVENGER_EXTERNAL_EPILOGUE],
|
| - current_.scopes[Scope::EXTERNAL_WEAK_GLOBAL_HANDLES],
|
| - 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());
|
| + PrintIsolate(
|
| + heap_->isolate(),
|
| + "%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 "
|
| + "external_prologue=%.2f "
|
| + "external_epilogue=%.2f "
|
| + "external_weak_global_handles=%.2f "
|
| + "steps_count=%d "
|
| + "steps_took=%.1f "
|
| + "scavenge_throughput=%.f "
|
| + "total_size_before=%" V8PRIdPTR
|
| + " "
|
| + "total_size_after=%" V8PRIdPTR
|
| + " "
|
| + "holes_size_before=%" V8PRIdPTR
|
| + " "
|
| + "holes_size_after=%" V8PRIdPTR
|
| + " "
|
| + "allocated=%" V8PRIdPTR
|
| + " "
|
| + "promoted=%" V8PRIdPTR
|
| + " "
|
| + "semi_space_copied=%" V8PRIdPTR
|
| + " "
|
| + "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=%.1f "
|
| + "context_disposal_rate=%.1f\n",
|
| + 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_.scopes[Scope::SCAVENGER_EXTERNAL_PROLOGUE],
|
| + current_.scopes[Scope::SCAVENGER_EXTERNAL_EPILOGUE],
|
| + current_.scopes[Scope::EXTERNAL_WEAK_GLOBAL_HANDLES],
|
| + current_.incremental_marking_scopes[GCTracer::Scope::MC_INCREMENTAL]
|
| + .steps,
|
| + current_.scopes[Scope::MC_INCREMENTAL],
|
| + 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:
|
| @@ -632,15 +567,17 @@ void GCTracer::PrintNVP() const {
|
| "sweep.old=%.1f "
|
| "incremental=%.1f "
|
| "incremental.finalize=%.1f "
|
| + "incremental.finalize.body=%.1f "
|
| "incremental.finalize.external.prologue=%.1f "
|
| "incremental.finalize.external.epilogue=%.1f "
|
| "incremental.finalize.object_grouping=%.1f "
|
| "incremental.wrapper_prologue=%.1f "
|
| "incremental.wrapper_tracing=%.1f "
|
| + "incremental_wrapper_tracing_longest_step=%.1f "
|
| "incremental_finalize_longest_step=%.1f "
|
| "incremental_finalize_steps_count=%d "
|
| - "incremental_steps_count=%d "
|
| "incremental_longest_step=%.1f "
|
| + "incremental_steps_count=%d "
|
| "incremental_marking_throughput=%.f "
|
| "total_size_before=%" V8PRIdPTR
|
| " "
|
| @@ -707,17 +644,26 @@ void GCTracer::PrintNVP() const {
|
| current_.scopes[Scope::MC_SWEEP_CODE],
|
| current_.scopes[Scope::MC_SWEEP_MAP],
|
| current_.scopes[Scope::MC_SWEEP_OLD],
|
| - current_.incremental_marking_duration,
|
| + current_.scopes[Scope::MC_INCREMENTAL],
|
| current_.scopes[Scope::MC_INCREMENTAL_FINALIZE],
|
| + current_.scopes[Scope::MC_INCREMENTAL_FINALIZE_BODY],
|
| current_.scopes[Scope::MC_INCREMENTAL_EXTERNAL_PROLOGUE],
|
| current_.scopes[Scope::MC_INCREMENTAL_EXTERNAL_EPILOGUE],
|
| current_.scopes[Scope::MC_INCREMENTAL_FINALIZE_OBJECT_GROUPING],
|
| current_.scopes[Scope::MC_INCREMENTAL_WRAPPER_PROLOGUE],
|
| current_.scopes[Scope::MC_INCREMENTAL_WRAPPER_TRACING],
|
| - current_.longest_incremental_marking_finalization_step,
|
| - current_.incremental_marking_finalizaton_steps,
|
| - current_.incremental_marking_steps,
|
| - current_.longest_incremental_marking_step,
|
| + current_
|
| + .incremental_marking_scopes[Scope::MC_INCREMENTAL_WRAPPER_TRACING]
|
| + .longest_step,
|
| + current_
|
| + .incremental_marking_scopes[Scope::MC_INCREMENTAL_FINALIZE_BODY]
|
| + .longest_step,
|
| + current_
|
| + .incremental_marking_scopes[Scope::MC_INCREMENTAL_FINALIZE_BODY]
|
| + .steps,
|
| + current_.incremental_marking_scopes[Scope::MC_INCREMENTAL]
|
| + .longest_step,
|
| + current_.incremental_marking_scopes[Scope::MC_INCREMENTAL].steps,
|
| IncrementalMarkingSpeedInBytesPerMillisecond(),
|
| current_.start_object_size, current_.end_object_size,
|
| current_.start_holes_size, current_.end_holes_size,
|
|
|