From: mstarzinger@chromium.org Date: Wed, 1 Aug 2012 11:29:48 +0000 (+0000) Subject: Refactor marking to share embedded pointer visitor. X-Git-Tag: upstream/4.7.83~16200 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d4e6aa33fcfc52bd49740c66bb58bfa0172c7fd6;p=platform%2Fupstream%2Fv8.git Refactor marking to share embedded pointer visitor. R=ulan@chromium.org Review URL: https://chromiumcodereview.appspot.com/10826079 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@12246 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/incremental-marking.cc b/src/incremental-marking.cc index e3040ee..1be7aff 100644 --- a/src/incremental-marking.cc +++ b/src/incremental-marking.cc @@ -175,15 +175,6 @@ class IncrementalMarkingMarkingVisitor table_.Register(kVisitJSRegExp, &VisitJSRegExp); } - static inline void VisitEmbeddedPointer(Heap* heap, RelocInfo* rinfo) { - ASSERT(rinfo->rmode() == RelocInfo::EMBEDDED_OBJECT); - Object* target = rinfo->target_object(); - if (target->NonFailureIsHeapObject()) { - heap->mark_compact_collector()->RecordRelocSlot(rinfo, target); - MarkObject(heap, target); - } - } - static inline void VisitCodeTarget(Heap* heap, RelocInfo* rinfo) { ASSERT(RelocInfo::IsCodeTarget(rinfo->rmode())); Code* target = Code::GetCodeFromTargetAddress(rinfo->target_address()); diff --git a/src/mark-compact.cc b/src/mark-compact.cc index 0ba8a24..f9ea3e6 100644 --- a/src/mark-compact.cc +++ b/src/mark-compact.cc @@ -1078,15 +1078,6 @@ class MarkCompactMarkingVisitor heap->mark_compact_collector()->MarkObject(object, mark); } - static inline void VisitEmbeddedPointer(Heap* heap, RelocInfo* rinfo) { - ASSERT(rinfo->rmode() == RelocInfo::EMBEDDED_OBJECT); - // TODO(mstarzinger): We do not short-circuit cons strings here, verify - // that there can be no such embedded pointers and add assertion here. - HeapObject* object = HeapObject::cast(rinfo->target_object()); - heap->mark_compact_collector()->RecordRelocSlot(rinfo, object); - MarkObject(heap, object); - } - static inline void VisitCodeTarget(Heap* heap, RelocInfo* rinfo) { ASSERT(RelocInfo::IsCodeTarget(rinfo->rmode())); Code* target = Code::GetCodeFromTargetAddress(rinfo->target_address()); diff --git a/src/objects-visiting-inl.h b/src/objects-visiting-inl.h index 80662cc..61fcbec 100644 --- a/src/objects-visiting-inl.h +++ b/src/objects-visiting-inl.h @@ -176,6 +176,17 @@ void StaticMarkingVisitor::VisitCodeEntry( template +void StaticMarkingVisitor::VisitEmbeddedPointer( + Heap* heap, RelocInfo* rinfo) { + ASSERT(rinfo->rmode() == RelocInfo::EMBEDDED_OBJECT); + ASSERT(!rinfo->target_object()->IsConsString()); + HeapObject* object = HeapObject::cast(rinfo->target_object()); + heap->mark_compact_collector()->RecordRelocSlot(rinfo, object); + StaticVisitor::MarkObject(heap, object); +} + + +template void StaticMarkingVisitor::VisitGlobalPropertyCell( Heap* heap, RelocInfo* rinfo) { ASSERT(rinfo->rmode() == RelocInfo::GLOBAL_PROPERTY_CELL); diff --git a/src/objects-visiting.h b/src/objects-visiting.h index fa81978..67b3af8 100644 --- a/src/objects-visiting.h +++ b/src/objects-visiting.h @@ -387,6 +387,7 @@ class StaticMarkingVisitor : public StaticVisitorBase { } static inline void VisitCodeEntry(Heap* heap, Address entry_address); + static inline void VisitEmbeddedPointer(Heap* heap, RelocInfo* rinfo); static inline void VisitGlobalPropertyCell(Heap* heap, RelocInfo* rinfo); static inline void VisitDebugTarget(Heap* heap, RelocInfo* rinfo); static inline void VisitExternalReference(RelocInfo* rinfo) { }