Chromium Code Reviews| Index: src/heap/store-buffer.cc |
| diff --git a/src/heap/store-buffer.cc b/src/heap/store-buffer.cc |
| index 278e9f2f6ee11a6835d93e6b942e26ab5e16b98d..da501722882de868e89e6f8f57899123e63659cb 100644 |
| --- a/src/heap/store-buffer.cc |
| +++ b/src/heap/store-buffer.cc |
| @@ -507,11 +507,31 @@ void StoreBuffer::IteratePointersToNewSpace(ObjectSlotCallback slot_callback, |
| for (HeapObject* heap_object = iterator.Next(); heap_object != NULL; |
| heap_object = iterator.Next()) { |
| // We iterate over objects that contain new space pointers only. |
| - if (!heap_object->MayContainRawValues()) { |
| - FindPointersToNewSpaceInRegion( |
| - heap_object->address() + HeapObject::kHeaderSize, |
| - heap_object->address() + heap_object->Size(), slot_callback, |
| - clear_maps); |
| + bool may_contain_raw_values = heap_object->MayContainRawValues(); |
| + if (!may_contain_raw_values) { |
| + Address obj_address = heap_object->address(); |
| + Address start_address = obj_address + HeapObject::kHeaderSize; |
| + Address end_address = obj_address + heap_object->Size(); |
| +#if V8_DOUBLE_FIELDS_UNBOXING |
| + InobjectPropertiesHelper helper(heap_object->map()); |
| + bool has_only_tagged_fields = helper.all_fields_tagged(); |
| + |
| + if (!has_only_tagged_fields) { |
| + for (Address slot = start_address; slot < end_address; |
| + slot += kPointerSize) { |
| + if (helper.IsTagged(slot - obj_address)) { |
| + FindPointersToNewSpaceInRegion(slot, slot + kPointerSize, |
|
Hannes Payer (out of office)
2014/11/06 12:29:46
Similar as before, do you think maximum contiguous
Igor Sheludko
2014/11/07 08:03:52
I would prefer to implement that in a next CL.
Hannes Payer (out of office)
2014/11/10 15:26:08
Then please leave a todo.
Igor Sheludko
2014/11/10 15:43:54
Done.
|
| + slot_callback, clear_maps); |
| + } |
| + } |
| + } else { |
| +#endif |
| + // Object has only tagged fields. |
| + FindPointersToNewSpaceInRegion(start_address, end_address, |
| + slot_callback, clear_maps); |
| +#if V8_DOUBLE_FIELDS_UNBOXING |
| + } |
| +#endif |
| } |
| } |
| } |