Chromium Code Reviews| Index: runtime/vm/object.cc |
| =================================================================== |
| --- runtime/vm/object.cc (revision 20732) |
| +++ runtime/vm/object.cc (working copy) |
| @@ -1201,20 +1201,26 @@ |
| class StoreBufferUpdateVisitor : public ObjectPointerVisitor { |
| public: |
| - explicit StoreBufferUpdateVisitor(Isolate* isolate) : |
| - ObjectPointerVisitor(isolate) { } |
| + explicit StoreBufferUpdateVisitor(Isolate* isolate, RawObject* obj) : |
| + ObjectPointerVisitor(isolate), old_obj_(obj) { |
| + ASSERT(old_obj_->IsOldObject()); |
| + } |
| void VisitPointers(RawObject** first, RawObject** last) { |
| for (RawObject** curr = first; curr <= last; ++curr) { |
| RawObject* raw_obj = *curr; |
| if (raw_obj->IsHeapObject() && raw_obj->IsNewObject()) { |
| - uword ptr = reinterpret_cast<uword>(curr); |
| + uword ptr = reinterpret_cast<uword>(old_obj_); |
| isolate()->store_buffer()->AddPointer(ptr); |
| + // Remembered this object. There is not need to continue searching. |
|
siva
2013/04/02 20:20:22
no need ...
Ivan Posva
2013/04/02 23:23:11
Done.
Ivan Posva
2013/04/02 23:23:11
Done.
|
| + return; |
| } |
| } |
| } |
| private: |
| + RawObject* old_obj_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(StoreBufferUpdateVisitor); |
| }; |
| @@ -1237,7 +1243,7 @@ |
| NoGCScope no_gc; |
| memmove(raw_obj->ptr(), src.raw()->ptr(), size); |
| if (space == Heap::kOld) { |
| - StoreBufferUpdateVisitor visitor(Isolate::Current()); |
| + StoreBufferUpdateVisitor visitor(Isolate::Current(), raw_obj); |
| raw_obj->VisitPointers(&visitor); |
| } |
| return raw_obj; |