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

Unified Diff: runtime/vm/gc_marker.cc

Issue 13406004: - Remember objects (not addresses) in the old generation containing new pointers. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 9 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
Index: runtime/vm/gc_marker.cc
===================================================================
--- runtime/vm/gc_marker.cc (revision 20732)
+++ runtime/vm/gc_marker.cc (working copy)
@@ -128,7 +128,7 @@
vm_heap_(Dart::vm_isolate()->heap()),
page_space_(page_space),
marking_stack_(marking_stack),
- update_store_buffers_(false) {
+ visiting_old_object_(NULL) {
ASSERT(heap_ != vm_heap_);
}
@@ -159,7 +159,10 @@
}
}
- void set_update_store_buffers(bool val) { update_store_buffers_ = val; }
+ void VisitingOldObject(RawObject* obj) {
+ ASSERT((obj == NULL) || obj->IsOldObject());
+ visiting_old_object_ = obj;
+ }
private:
void MarkAndPush(RawObject* raw_obj) {
@@ -202,9 +205,10 @@
// Skip over new objects, but verify consistency of heap while at it.
if (raw_obj->IsNewObject()) {
// TODO(iposva): Add consistency check.
- if (update_store_buffers_) {
+ if (visiting_old_object_ != NULL) {
ASSERT(p != NULL);
- isolate()->store_buffer()->AddPointer(reinterpret_cast<uword>(p));
+ isolate()->store_buffer()->AddPointer(
+ reinterpret_cast<uword>(visiting_old_object_));
}
return;
}
@@ -216,9 +220,9 @@
Heap* vm_heap_;
PageSpace* page_space_;
MarkingStack* marking_stack_;
+ RawObject* visiting_old_object_;
typedef std::multimap<RawObject*, RawWeakProperty*> DelaySet;
DelaySet delay_set_;
- bool update_store_buffers_;
DISALLOW_IMPLICIT_CONSTRUCTORS(MarkingVisitor);
};
@@ -348,9 +352,9 @@
void GCMarker::DrainMarkingStack(Isolate* isolate,
MarkingVisitor* visitor) {
- visitor->set_update_store_buffers(true);
while (!visitor->marking_stack()->IsEmpty()) {
RawObject* raw_obj = visitor->marking_stack()->Pop();
+ visitor->VisitingOldObject(raw_obj);
if (raw_obj->GetClassId() != kWeakPropertyCid) {
raw_obj->VisitPointers(visitor);
} else {
@@ -358,7 +362,7 @@
ProcessWeakProperty(raw_weak, visitor);
}
}
- visitor->set_update_store_buffers(false);
+ visitor->VisitingOldObject(NULL);
}
« no previous file with comments | « runtime/vm/assembler_x64.cc ('k') | runtime/vm/object.h » ('j') | runtime/vm/object.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698