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

Reply via email to