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

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: address review comments 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
« no previous file with comments | « runtime/vm/raw_object.h ('k') | runtime/vm/vm_sources.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/scavenger.cc
diff --git a/runtime/vm/scavenger.cc b/runtime/vm/scavenger.cc
index 8953e7c941d017de6e0169dae2a4f5b00bc5fe5d..7daa940d01dd50b2466ecc36db3bb503eeda1472 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();
@@ -680,6 +697,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_);
« no previous file with comments | « runtime/vm/raw_object.h ('k') | runtime/vm/vm_sources.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698