Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(374)

Unified Diff: src/heap/mark-compact.cc

Issue 2795903004: Revert of [heap] Refactor evacuation verifier (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap/mark-compact.cc
diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc
index 00ede2998b2ae97efef99ca64cd78a230aadceb4..6651ad01698806dd70e99c411115e520df51bae0 100644
--- a/src/heap/mark-compact.cc
+++ b/src/heap/mark-compact.cc
@@ -43,13 +43,28 @@
// produce invalid {kImpossibleBitPattern} in the marking bitmap by overlapping.
STATIC_ASSERT(Heap::kMinObjectSizeInWords >= 2);
-// =============================================================================
-// Verifiers
-// =============================================================================
+
+// -------------------------------------------------------------------------
+// MarkCompactCollector
+
+MarkCompactCollector::MarkCompactCollector(Heap* heap)
+ : // NOLINT
+ heap_(heap),
+ page_parallel_job_semaphore_(0),
+#ifdef DEBUG
+ state_(IDLE),
+#endif
+ was_marked_incrementally_(false),
+ evacuation_(false),
+ compacting_(false),
+ black_allocation_(false),
+ have_code_to_deoptimize_(false),
+ marking_deque_(heap),
+ code_flusher_(nullptr),
+ sweeper_(heap) {
+}
#ifdef VERIFY_HEAP
-namespace {
-
class MarkingVerifier : public ObjectVisitor {
public:
virtual void Run() = 0;
@@ -205,10 +220,8 @@
}
};
-class EvacuationVerifier : public ObjectVisitor {
+class VerifyEvacuationVisitor : public ObjectVisitor {
public:
- virtual void Run() = 0;
-
void VisitPointers(Object** start, Object** end) override {
for (Object** current = start; current < end; current++) {
if ((*current)->IsHeapObject()) {
@@ -217,88 +230,61 @@
}
}
}
-
- protected:
- explicit EvacuationVerifier(Heap* heap) : heap_(heap) {}
-
- void VerifyRoots(VisitMode mode);
- void VerifyEvacuationOnPage(Address start, Address end);
- void VerifyEvacuation(NewSpace* new_space);
- void VerifyEvacuation(PagedSpace* paged_space);
-
- Heap* heap_;
};
-void EvacuationVerifier::VerifyRoots(VisitMode mode) {
- heap_->IterateStrongRoots(this, mode);
-}
-
-void EvacuationVerifier::VerifyEvacuationOnPage(Address start, Address end) {
- Address current = start;
- while (current < end) {
- HeapObject* object = HeapObject::FromAddress(current);
- if (!object->IsFiller()) object->Iterate(this);
- current += object->Size();
- }
-}
-
-void EvacuationVerifier::VerifyEvacuation(NewSpace* space) {
+
+static void VerifyEvacuation(Page* page) {
+ VerifyEvacuationVisitor visitor;
+ HeapObjectIterator iterator(page);
+ for (HeapObject* heap_object = iterator.Next(); heap_object != NULL;
+ heap_object = iterator.Next()) {
+ // We skip free space objects.
+ if (!heap_object->IsFiller()) {
+ heap_object->Iterate(&visitor);
+ }
+ }
+}
+
+
+static void VerifyEvacuation(NewSpace* space) {
+ VerifyEvacuationVisitor visitor;
PageRange range(space->bottom(), space->top());
for (auto it = range.begin(); it != range.end();) {
Page* page = *(it++);
Address current = page->area_start();
Address limit = it != range.end() ? page->area_end() : space->top();
CHECK(limit == space->top() || !page->Contains(space->top()));
- VerifyEvacuationOnPage(current, limit);
- }
-}
-
-void EvacuationVerifier::VerifyEvacuation(PagedSpace* space) {
- if (FLAG_use_allocation_folding && (space == heap_->old_space())) {
+ while (current < limit) {
+ HeapObject* object = HeapObject::FromAddress(current);
+ object->Iterate(&visitor);
+ current += object->Size();
+ }
+ }
+}
+
+
+static void VerifyEvacuation(Heap* heap, PagedSpace* space) {
+ if (FLAG_use_allocation_folding && (space == heap->old_space())) {
return;
}
for (Page* p : *space) {
if (p->IsEvacuationCandidate()) continue;
- VerifyEvacuationOnPage(p->area_start(), p->area_end());
- }
-}
-
-class FullEvacuationVerifier : public EvacuationVerifier {
- public:
- explicit FullEvacuationVerifier(Heap* heap) : EvacuationVerifier(heap) {}
-
- void Run() override {
- VerifyRoots(VISIT_ALL);
- VerifyEvacuation(heap_->new_space());
- VerifyEvacuation(heap_->old_space());
- VerifyEvacuation(heap_->code_space());
- VerifyEvacuation(heap_->map_space());
- }
-};
-
-} // namespace
+ VerifyEvacuation(p);
+ }
+}
+
+
+static void VerifyEvacuation(Heap* heap) {
+ VerifyEvacuation(heap, heap->old_space());
+ VerifyEvacuation(heap, heap->code_space());
+ VerifyEvacuation(heap, heap->map_space());
+ VerifyEvacuation(heap->new_space());
+
+ VerifyEvacuationVisitor visitor;
+ heap->IterateStrongRoots(&visitor, VISIT_ALL);
+}
#endif // VERIFY_HEAP
-// =============================================================================
-// MarkCompactCollector
-// =============================================================================
-
-MarkCompactCollector::MarkCompactCollector(Heap* heap)
- : // NOLINT
- heap_(heap),
- page_parallel_job_semaphore_(0),
-#ifdef DEBUG
- state_(IDLE),
-#endif
- was_marked_incrementally_(false),
- evacuation_(false),
- compacting_(false),
- black_allocation_(false),
- have_code_to_deoptimize_(false),
- marking_deque_(heap),
- code_flusher_(nullptr),
- sweeper_(heap) {
-}
void MarkCompactCollector::SetUp() {
DCHECK(strcmp(Marking::kWhiteBitPattern, "00") == 0);
@@ -600,8 +586,7 @@
#ifdef VERIFY_HEAP
if (FLAG_verify_heap && !evacuation()) {
- FullEvacuationVerifier verifier(heap_);
- verifier.Run();
+ VerifyEvacuation(heap_);
}
#endif
@@ -3726,8 +3711,7 @@
#ifdef VERIFY_HEAP
if (FLAG_verify_heap && !sweeper().sweeping_in_progress()) {
- FullEvacuationVerifier verifier(heap());
- verifier.Run();
+ VerifyEvacuation(heap());
}
#endif
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698