diff options
Diffstat (limited to 'deps/v8/src/heap/scavenger.cc')
-rw-r--r-- | deps/v8/src/heap/scavenger.cc | 50 |
1 files changed, 11 insertions, 39 deletions
diff --git a/deps/v8/src/heap/scavenger.cc b/deps/v8/src/heap/scavenger.cc index 31f1ee55b7..40aeb74aa9 100644 --- a/deps/v8/src/heap/scavenger.cc +++ b/deps/v8/src/heap/scavenger.cc @@ -67,23 +67,10 @@ class ScavengingVisitor : public StaticVisitorBase { table_.Register(kVisitJSWeakCollection, &ObjectEvacuationStrategy<POINTER_OBJECT>::Visit); - table_.Register(kVisitJSTypedArray, - &ObjectEvacuationStrategy<POINTER_OBJECT>::Visit); - - table_.Register(kVisitJSDataView, - &ObjectEvacuationStrategy<POINTER_OBJECT>::Visit); - table_.Register(kVisitJSRegExp, &ObjectEvacuationStrategy<POINTER_OBJECT>::Visit); - if (marks_handling == IGNORE_MARKS) { - table_.Register( - kVisitJSFunction, - &ObjectEvacuationStrategy<POINTER_OBJECT>::template VisitSpecialized< - JSFunction::kSize>); - } else { - table_.Register(kVisitJSFunction, &EvacuateJSFunction); - } + table_.Register(kVisitJSFunction, &EvacuateJSFunction); table_.RegisterSpecializations<ObjectEvacuationStrategy<DATA_OBJECT>, kVisitDataObject, kVisitDataObjectGeneric>(); @@ -199,12 +186,7 @@ class ScavengingVisitor : public StaticVisitorBase { *slot = target; if (object_contents == POINTER_OBJECT) { - if (map->instance_type() == JS_FUNCTION_TYPE) { - heap->promotion_queue()->insert(target, - JSFunction::kNonWeakFieldsEndOffset); - } else { - heap->promotion_queue()->insert(target, object_size); - } + heap->promotion_queue()->insert(target, object_size); } heap->IncrementPromotedObjectsSize(object_size); return true; @@ -242,8 +224,9 @@ class ScavengingVisitor : public StaticVisitorBase { static inline void EvacuateJSFunction(Map* map, HeapObject** slot, HeapObject* object) { - ObjectEvacuationStrategy<POINTER_OBJECT>::template VisitSpecialized< - JSFunction::kSize>(map, slot, object); + ObjectEvacuationStrategy<POINTER_OBJECT>::Visit(map, slot, object); + + if (marks_handling == IGNORE_MARKS) return; MapWord map_word = object->map_word(); DCHECK(map_word.IsForwardingAddress()); @@ -266,7 +249,8 @@ class ScavengingVisitor : public StaticVisitorBase { static inline void EvacuateFixedArray(Map* map, HeapObject** slot, HeapObject* object) { - int object_size = FixedArray::BodyDescriptor::SizeOf(map, object); + int length = reinterpret_cast<FixedArray*>(object)->synchronized_length(); + int object_size = FixedArray::SizeFor(length); EvacuateObject<POINTER_OBJECT, kWordAligned>(map, slot, object, object_size); } @@ -283,28 +267,16 @@ class ScavengingVisitor : public StaticVisitorBase { static inline void EvacuateFixedTypedArray(Map* map, HeapObject** slot, HeapObject* object) { int object_size = reinterpret_cast<FixedTypedArrayBase*>(object)->size(); - EvacuateObject<DATA_OBJECT, kWordAligned>(map, slot, object, object_size); - - MapWord map_word = object->map_word(); - DCHECK(map_word.IsForwardingAddress()); - FixedTypedArrayBase* target = - reinterpret_cast<FixedTypedArrayBase*>(map_word.ToForwardingAddress()); - if (target->base_pointer() != Smi::FromInt(0)) - target->set_base_pointer(target, SKIP_WRITE_BARRIER); + EvacuateObject<POINTER_OBJECT, kWordAligned>(map, slot, object, + object_size); } static inline void EvacuateFixedFloat64Array(Map* map, HeapObject** slot, HeapObject* object) { int object_size = reinterpret_cast<FixedFloat64Array*>(object)->size(); - EvacuateObject<DATA_OBJECT, kDoubleAligned>(map, slot, object, object_size); - - MapWord map_word = object->map_word(); - DCHECK(map_word.IsForwardingAddress()); - FixedTypedArrayBase* target = - reinterpret_cast<FixedTypedArrayBase*>(map_word.ToForwardingAddress()); - if (target->base_pointer() != Smi::FromInt(0)) - target->set_base_pointer(target, SKIP_WRITE_BARRIER); + EvacuateObject<POINTER_OBJECT, kDoubleAligned>(map, slot, object, + object_size); } |