Chromium Code Reviews| Index: runtime/vm/pages.cc |
| =================================================================== |
| --- runtime/vm/pages.cc (revision 31392) |
| +++ runtime/vm/pages.cc (working copy) |
| @@ -82,16 +82,23 @@ |
| RawObject* HeapPage::FindObject(FindObjectVisitor* visitor) const { |
| + uword filter_addr = visitor->filter_addr(); |
| uword obj_addr = object_start(); |
| uword end_addr = object_end(); |
| - while (obj_addr < end_addr) { |
| - RawObject* raw_obj = RawObject::FromAddr(obj_addr); |
| - if (raw_obj->FindObject(visitor)) { |
| - return raw_obj; // Found object, return it. |
| + if ((filter_addr == 0) || |
| + ((filter_addr >= obj_addr) && (filter_addr < end_addr))) { |
|
siva
2013/12/30 22:15:12
Instead of a filter_addr method in the visitor int
Ivan Posva
2013/12/31 00:26:59
Redone as discussed.
On 2013/12/30 22:15:12, siva
|
| + while (obj_addr < end_addr) { |
| + RawObject* raw_obj = RawObject::FromAddr(obj_addr); |
| + uword next_obj_addr = obj_addr + raw_obj->Size(); |
| + if (((filter_addr == 0) || |
| + ((filter_addr >= obj_addr) && (filter_addr < end_addr))) && |
|
siva
2013/12/30 22:15:12
next_obj_addr ?
Ivan Posva
2013/12/31 00:26:59
Done.
|
| + raw_obj->FindObject(visitor)) { |
| + return raw_obj; // Found object, return it. |
| + } |
| + obj_addr = next_obj_addr; |
| } |
| - obj_addr += raw_obj->Size(); |
| + ASSERT(obj_addr == end_addr); |
| } |
| - ASSERT(obj_addr == end_addr); |
| return Object::null(); |
| } |