Index: runtime/vm/scavenger.cc |
diff --git a/runtime/vm/scavenger.cc b/runtime/vm/scavenger.cc |
index 959a7f35e7f0cd8c96d866e193a3543a22329fbc..abd9f24def279d43e82ce2b4e59eed29ed6b5d94 100644 |
--- a/runtime/vm/scavenger.cc |
+++ b/runtime/vm/scavenger.cc |
@@ -420,6 +420,7 @@ void Scavenger::Epilogue(Isolate* isolate, |
// Remember the limit to which objects have been copied. |
survivor_end_ = top_; |
} else { |
+ OS::Print("early tenuring!\n"); |
// Move survivor end to the end of the to_ space, making all surviving |
// objects candidates for promotion next time. |
survivor_end_ = end_; |
@@ -842,6 +843,9 @@ void Scavenger::Scavenge(bool invoke_api_callbacks) { |
// The API prologue/epilogue may create/destroy zones, so we must not |
// depend on zone allocations surviving beyond the epilogue callback. |
{ |
+ intptr_t scavenge_rate = ScavengeRateInBytesPerMicro(); |
+ intptr_t est_time = usage_before.used_in_words * kWordSize / scavenge_rate; |
+ |
StackZone zone(thread); |
// Setup the visitor and run the scavenge. |
ScavengerVisitor visitor(isolate, this, from); |
@@ -862,9 +866,33 @@ void Scavenger::Scavenge(bool invoke_api_callbacks) { |
int64_t end = OS::GetCurrentMonotonicMicros(); |
heap_->RecordTime(kProcessToSpace, middle - start); |
heap_->RecordTime(kIterateWeaks, end - middle); |
+ SpaceUsage usage_after = GetCurrentUsage(); |
stats_history_.Add(ScavengeStats( |
- start, end, usage_before, GetCurrentUsage(), promo_candidate_words, |
+ start, end, usage_before, usage_after, promo_candidate_words, |
visitor.bytes_promoted() >> kWordSizeLog2)); |
+ |
+ intptr_t size_before = usage_before.used_in_words * kWordSize; |
+ intptr_t survivor_tenured = visitor.bytes_promoted(); |
+ intptr_t survivor_nontenured = usage_after.used_in_words * kWordSize; |
+ intptr_t actual_time = end - start; |
+ |
+ OS::Print("rate=%7" Pd "B/us, " |
+ "size=%5" Pd "kB, " |
+ "survivor=%lf, " |
+ "tenured=%lf, " |
+ "nontenured=%lf, " |
+ "estimated=%5" Pd "ms, " |
+ "actual=%5" Pd "ms, " |
+ "headroom=%5" Pd "us\n", |
+ scavenge_rate, |
+ size_before / KB, |
+ (double)(survivor_tenured+survivor_nontenured)/(double)size_before, |
+ (double)(survivor_tenured)/(double)size_before, |
+ (double)(survivor_nontenured)/(double)size_before, |
+ est_time / 1000, |
+ actual_time / 1000, |
+ (est_time - actual_time) |
+ ); |
} |
Epilogue(isolate, from, invoke_api_callbacks); |