Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(215)

Unified Diff: runtime/vm/scavenger.cc

Issue 11428067: Merge the Merlin heap tracing to top-of-trunk. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: add yet another missing file Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/scavenger.cc
diff --git a/runtime/vm/scavenger.cc b/runtime/vm/scavenger.cc
index 44a5c7b850b957f8f24e65954b59133db436694d..dc321d9dea6a687f127a1be78d48377474f6734f 100644
--- a/runtime/vm/scavenger.cc
+++ b/runtime/vm/scavenger.cc
@@ -172,6 +172,9 @@ class ScavengerVisitor : public ObjectPointerVisitor {
// Not a survivor of a previous scavenge. Just copy the object into the
// to space.
new_addr = scavenger_->TryAllocate(size);
+ if (HeapTrace::is_enabled()) {
+ heap_->trace()->TraceCopy(raw_addr, new_addr);
+ }
} else {
// TODO(iposva): Experiment with less aggressive promotion. For example
// a coin toss determines if an object is promoted or whether it should
@@ -185,6 +188,9 @@ class ScavengerVisitor : public ObjectPointerVisitor {
// be traversed later.
scavenger_->PushToPromotedStack(new_addr);
bytes_promoted_ += size;
+ if (HeapTrace::is_enabled()) {
+ heap_->trace()->TracePromotion(raw_addr, new_addr);
+ }
} else if (!scavenger_->had_promotion_failure_) {
// Signal a promotion failure and set the growth policy for
// this, and all subsequent promotion allocations, to force
@@ -195,15 +201,24 @@ class ScavengerVisitor : public ObjectPointerVisitor {
if (new_addr != 0) {
scavenger_->PushToPromotedStack(new_addr);
bytes_promoted_ += size;
+ if (HeapTrace::is_enabled()) {
+ heap_->trace()->TracePromotion(raw_addr, new_addr);
+ }
} else {
// Promotion did not succeed. Copy into the to space
// instead.
new_addr = scavenger_->TryAllocate(size);
+ if (HeapTrace::is_enabled()) {
+ heap_->trace()->TraceCopy(raw_addr, new_addr);
+ }
}
} else {
ASSERT(growth_policy_ == PageSpace::kForceGrowth);
// Promotion did not succeed. Copy into the to space instead.
new_addr = scavenger_->TryAllocate(size);
+ if (HeapTrace::is_enabled()) {
+ heap_->trace()->TraceCopy(raw_addr, new_addr);
+ }
}
}
// During a scavenge we always succeed to at least copy all of the
@@ -635,6 +650,8 @@ void Scavenger::Scavenge(bool invoke_api_callbacks, const char* gc_reason) {
if (FLAG_verbose_gc) {
OS::PrintErr("Start scavenge for %s collection\n", gc_reason);
}
+ uword prev_first_obj_start = FirstObjectStart();
+ uword prev_top_addr = *(TopAddress());
Timer timer(FLAG_verbose_gc, "Scavenge");
timer.Start();
@@ -671,6 +688,10 @@ void Scavenger::Scavenge(bool invoke_api_callbacks, const char* gc_reason) {
OS::PrintErr(" done.\n");
}
+ if (HeapTrace::is_enabled()) {
+ heap_->trace()->TraceDeathRange(prev_first_obj_start, prev_top_addr);
+ }
+
count_++;
// Done scavenging. Reset the marker.
ASSERT(scavenging_);

Powered by Google App Engine
This is Rietveld 408576698