From b8a784591fa2e01192ce2cd3fae810c44a5b198f Mon Sep 17 00:00:00 2001 From: "cshapiro@google.com" Date: Mon, 7 Jan 2013 23:16:44 +0000 Subject: [PATCH] Restore the bytes promoted counter. Review URL: https://codereview.chromium.org//11783015 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@16764 260f80e4-7a28-3924-810f-c04153c831b5 --- runtime/vm/scavenger.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/runtime/vm/scavenger.cc b/runtime/vm/scavenger.cc index f6273457278..0cc302c5859 100644 --- a/runtime/vm/scavenger.cc +++ b/runtime/vm/scavenger.cc @@ -74,6 +74,7 @@ class ScavengerVisitor : public ObjectPointerVisitor { vm_heap_(Dart::vm_isolate()->heap()), delayed_weak_stack_(), growth_policy_(PageSpace::kControlGrowth), + bytes_promoted_(0), visiting_old_pointers_(false), in_scavenge_pointer_(false) {} @@ -108,6 +109,8 @@ class ScavengerVisitor : public ObjectPointerVisitor { } } + intptr_t bytes_promoted() const { return bytes_promoted_; } + private: void UpdateStoreBuffer(RawObject** p, RawObject* obj) { uword ptr = reinterpret_cast(p); @@ -184,6 +187,7 @@ class ScavengerVisitor : public ObjectPointerVisitor { // If promotion succeeded then we need to remember it so that it can // be traversed later. scavenger_->PushToPromotedStack(new_addr); + bytes_promoted_ += size; if (HeapTrace::is_enabled()) { heap_->trace()->TracePromotion(raw_addr, new_addr); } @@ -196,6 +200,7 @@ class ScavengerVisitor : public ObjectPointerVisitor { new_addr = heap_->TryAllocate(size, Heap::kOld, growth_policy_); if (new_addr != 0) { scavenger_->PushToPromotedStack(new_addr); + bytes_promoted_ += size; if (HeapTrace::is_enabled()) { heap_->trace()->TracePromotion(raw_addr, new_addr); } @@ -242,6 +247,9 @@ class ScavengerVisitor : public ObjectPointerVisitor { DelaySet delay_set_; GrowableArray delayed_weak_stack_; PageSpace::GrowthPolicy growth_policy_; + // TODO(cshapiro): use this value to compute survival statistics for + // new space growth policy. + intptr_t bytes_promoted_; bool visiting_old_pointers_; bool in_scavenge_pointer_;