Chromium Code Reviews| Index: src/heap/mark-compact.cc |
| diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc |
| index 89ca782c267b317fc64bcb27f4c9442bb6424a7d..a7982d14b2ccf9341adbd5bccc57829788da77b0 100644 |
| --- a/src/heap/mark-compact.cc |
| +++ b/src/heap/mark-compact.cc |
| @@ -1675,7 +1675,8 @@ class MarkCompactCollector::EvacuateNewSpaceVisitor final |
| // If we end up needing more special cases, we should factor this out. |
| if (V8_UNLIKELY(target_object->IsJSArrayBuffer())) { |
| heap_->array_buffer_tracker()->Promote( |
| - JSArrayBuffer::cast(target_object)); |
| + JSArrayBuffer::cast(target_object), |
| + reinterpret_cast<JSArrayBuffer*>(object)); |
|
Michael Lippautz
2016/05/09 17:09:14
We cannot use ::cast() for old_buffer (the 2nd par
|
| } |
| promoted_size_ += size; |
| return true; |
| @@ -1684,7 +1685,9 @@ class MarkCompactCollector::EvacuateNewSpaceVisitor final |
| AllocationSpace space = AllocateTargetObject(object, &target); |
| MigrateObject(HeapObject::cast(target), object, size, space); |
| if (V8_UNLIKELY(target->IsJSArrayBuffer())) { |
| - heap_->array_buffer_tracker()->MarkLive(JSArrayBuffer::cast(target)); |
| + heap_->array_buffer_tracker()->SemiSpaceCopy( |
| + JSArrayBuffer::cast(target), |
| + reinterpret_cast<JSArrayBuffer*>(object)); |
| } |
| semispace_copied_size_ += size; |
| return true; |
| @@ -1811,7 +1814,7 @@ class MarkCompactCollector::EvacuateNewSpacePageVisitor final |
| inline bool Visit(HeapObject* object) { |
| if (V8_UNLIKELY(object->IsJSArrayBuffer())) { |
| object->GetHeap()->array_buffer_tracker()->Promote( |
| - JSArrayBuffer::cast(object)); |
| + JSArrayBuffer::cast(object), JSArrayBuffer::cast(object)); |
| } |
| RecordMigratedSlotVisitor visitor; |
| object->IterateBodyFast(&visitor); |
| @@ -1838,8 +1841,16 @@ class MarkCompactCollector::EvacuateOldSpaceVisitor final |
| HeapObject* target_object = nullptr; |
| if (TryEvacuateObject(target_space, object, &target_object)) { |
| DCHECK(object->map_word().IsForwardingAddress()); |
| + if (V8_UNLIKELY(target_object->IsJSArrayBuffer())) { |
| + heap_->array_buffer_tracker()->Compact( |
| + JSArrayBuffer::cast(target_object), |
| + reinterpret_cast<JSArrayBuffer*>(object)); |
| + } |
| return true; |
| } |
| + if (V8_UNLIKELY(object->IsJSArrayBuffer())) { |
| + heap_->array_buffer_tracker()->MarkLive(JSArrayBuffer::cast(object)); |
| + } |
| return false; |
| } |
| }; |