| Index: src/heap/scavenger.cc
|
| diff --git a/src/heap/scavenger.cc b/src/heap/scavenger.cc
|
| index ab0848a4c0c82f6cfa245dcb3e3ecf916ab5b317..7fba1da3bb9e60b11b0c9c7d61143b6130f482b9 100644
|
| --- a/src/heap/scavenger.cc
|
| +++ b/src/heap/scavenger.cc
|
| @@ -36,8 +36,7 @@
|
| table_.Register(kVisitFixedDoubleArray, &EvacuateFixedDoubleArray);
|
| table_.Register(kVisitFixedTypedArray, &EvacuateFixedTypedArray);
|
| table_.Register(kVisitFixedFloat64Array, &EvacuateFixedFloat64Array);
|
| - table_.Register(kVisitJSArrayBuffer,
|
| - &ObjectEvacuationStrategy<POINTER_OBJECT>::Visit);
|
| + table_.Register(kVisitJSArrayBuffer, &EvacuateJSArrayBuffer);
|
|
|
| table_.Register(
|
| kVisitNativeContext,
|
| @@ -282,6 +281,19 @@
|
| object_size);
|
| }
|
|
|
| + static inline void EvacuateJSArrayBuffer(Map* map, HeapObject** slot,
|
| + HeapObject* object) {
|
| + ObjectEvacuationStrategy<POINTER_OBJECT>::Visit(map, slot, object);
|
| +
|
| + Heap* heap = map->GetHeap();
|
| + MapWord map_word = object->map_word();
|
| + DCHECK(map_word.IsForwardingAddress());
|
| + HeapObject* target = map_word.ToForwardingAddress();
|
| + if (!heap->InNewSpace(target)) {
|
| + heap->array_buffer_tracker()->Promote(JSArrayBuffer::cast(target));
|
| + }
|
| + }
|
| +
|
| static inline void EvacuateByteArray(Map* map, HeapObject** slot,
|
| HeapObject* object) {
|
| int object_size = reinterpret_cast<ByteArray*>(object)->ByteArraySize();
|
|
|