Revision: 9408 Author: [email protected] Date: Fri Sep 23 00:30:57 2011 Log: Implement verification of new space evacuation.
[email protected] Review URL: http://codereview.chromium.org/7935013 http://code.google.com/p/v8/source/detail?r=9408 Modified: /branches/bleeding_edge/src/mark-compact.cc ======================================= --- /branches/bleeding_edge/src/mark-compact.cc Thu Sep 22 09:01:35 2011 +++ /branches/bleeding_edge/src/mark-compact.cc Fri Sep 23 00:30:57 2011 @@ -109,11 +109,6 @@ } } } - - -static void VerifyMarking(Page* p) { - VerifyMarking(p->ObjectAreaStart(), p->ObjectAreaEnd()); -} static void VerifyMarking(NewSpace* space) { @@ -136,7 +131,8 @@ PageIterator it(space); while (it.has_next()) { - VerifyMarking(it.next()); + Page* p = it.next(); + VerifyMarking(p->ObjectAreaStart(), p->ObjectAreaEnd()); } } @@ -168,14 +164,10 @@ for (Object** current = start; current < end; current++) { if ((*current)->IsHeapObject()) { HeapObject* object = HeapObject::cast(*current); - if (MarkCompactCollector::IsOnEvacuationCandidate(object)) { - CHECK(false); - } + CHECK(!MarkCompactCollector::IsOnEvacuationCandidate(object)); } } } - - HeapObject* source_; }; @@ -190,7 +182,6 @@ object = HeapObject::FromAddress(current); if (MarkCompactCollector::IsMarked(object)) { ASSERT(current >= next_object_must_be_here_or_later); - visitor.source_ = object; object->Iterate(&visitor); next_object_must_be_here_or_later = current + object->Size(); } @@ -198,15 +189,21 @@ } -static void VerifyEvacuation(Page* p) { - if (p->IsEvacuationCandidate()) return; - - VerifyEvacuation(p->ObjectAreaStart(), p->ObjectAreaEnd()); -} - - -static void VerifyEvacuation(NewSpace* space) { - // TODO(gc) Verify evacution for new space. +static void VerifyEvacuation(NewSpace* space) { + NewSpacePageIterator it(space->bottom(), space->top()); + VerifyEvacuationVisitor visitor; + + while (it.has_next()) { + NewSpacePage* page = it.next(); + Address current = page->body(); + Address limit = it.has_next() ? page->body_limit() : space->top(); + ASSERT(limit == space->top() || !page->Contains(space->top())); + while (current < limit) { + HeapObject* object = HeapObject::FromAddress(current); + object->Iterate(&visitor); + current += object->Size(); + } + } } @@ -214,7 +211,9 @@ PageIterator it(space); while (it.has_next()) { - VerifyEvacuation(it.next()); + Page* p = it.next(); + if (p->IsEvacuationCandidate()) continue; + VerifyEvacuation(p->ObjectAreaStart(), p->ObjectAreaEnd()); } } -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
