Chromium Code Reviews| Index: src/store-buffer.cc |
| diff --git a/src/store-buffer.cc b/src/store-buffer.cc |
| index d1a04d292fb2cb0f79282972caa0b26c8d3b8c2f..16fa43a7fc68b11af772f7efa0591d77a300acd2 100644 |
| --- a/src/store-buffer.cc |
| +++ b/src/store-buffer.cc |
| @@ -515,8 +515,25 @@ void StoreBuffer::IteratePointersToNewSpace(ObjectSlotCallback slot_callback, |
| heap_->mark_compact_collector()->EnsureSweepingCompleted(); |
| } |
| } |
| - FindPointersToNewSpaceInRegion( |
| - start, end, slot_callback, clear_maps); |
| + // TODO(hpayer): remove the special casing and merge map and pointer |
| + // space handling as soon as we removed conservative sweeping. |
| + CHECK(page->owner() == heap_->old_pointer_space()); |
| + if (heap_->old_pointer_space()->swept_precisely()) { |
| + HeapObjectIterator iterator(page, NULL); |
| + for (HeapObject* heap_object = iterator.Next(); |
| + heap_object != NULL; heap_object = iterator.Next()) { |
| + // We iterate over objects that contain pointers only. |
|
rmcilroy
2014/07/24 10:24:48
nit - new space pointers only.
Hannes Payer (out of office)
2014/07/24 10:40:08
Done.
|
| + if (heap_object->MayContainNewSpacePointers()) { |
| + FindPointersToNewSpaceInRegion( |
| + heap_object->address() + HeapObject::kHeaderSize, |
| + heap_object->address() + heap_object->Size(), |
| + slot_callback, clear_maps); |
| + } |
| + } |
| + } else { |
| + FindPointersToNewSpaceInRegion(start, end, slot_callback, |
| + clear_maps); |
| + } |
| } |
| } |
| } |