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

Unified Diff: runtime/vm/scavenger.cc

Issue 10065005: Persist the scanning state across invocations of ProcessToSpace. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 8 months 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/scavenger.h ('k') | no next file » | 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 ba4b3db379090020e08ea29bfc8b88e62fd53afa..2410da2ff5e846b124a92f539ffa6b88541a5909 100644
--- a/runtime/vm/scavenger.cc
+++ b/runtime/vm/scavenger.cc
@@ -177,6 +177,7 @@ Scavenger::Scavenger(Heap* heap, intptr_t max_capacity, uword object_alignment)
// Setup local fields.
top_ = FirstObjectStart();
+ resolved_top_ = top_;
end_ = to_->end();
survivor_end_ = FirstObjectStart();
@@ -205,6 +206,7 @@ void Scavenger::Prologue(Isolate* isolate, bool invoke_api_callbacks) {
from_ = to_;
to_ = temp;
top_ = FirstObjectStart();
+ resolved_top_ = top_;
end_ = to_->end();
}
@@ -289,7 +291,7 @@ void Scavenger::IterateWeakReferences(Isolate* isolate,
state->DelayWeakReference(reference);
}
}
- if ((FirstObjectStart() < top_) || PromotedStackHasMore()) {
+ if ((resolved_top_ < top_) || PromotedStackHasMore()) {
ProcessToSpace(visitor);
} else {
// Break out of the loop if there has been no forward process.
@@ -316,12 +318,11 @@ void Scavenger::IterateWeakRoots(Isolate* isolate,
void Scavenger::ProcessToSpace(ObjectPointerVisitor* visitor) {
- uword resolved_top = FirstObjectStart();
// Iterate until all work has been drained.
- while ((resolved_top < top_) || PromotedStackHasMore()) {
- while (resolved_top < top_) {
- RawObject* raw_obj = RawObject::FromAddr(resolved_top);
- resolved_top += raw_obj->VisitPointers(visitor);
+ while ((resolved_top_ < top_) || PromotedStackHasMore()) {
+ while (resolved_top_ < top_) {
+ RawObject* raw_obj = RawObject::FromAddr(resolved_top_);
+ resolved_top_ += raw_obj->VisitPointers(visitor);
}
while (PromotedStackHasMore()) {
RawObject* raw_object = RawObject::FromAddr(PopFromPromotedStack());
« no previous file with comments | « runtime/vm/scavenger.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698