Index: src/heap/incremental-marking.cc |
diff --git a/src/heap/incremental-marking.cc b/src/heap/incremental-marking.cc |
index 76c05de6065be5da1c51e8a7f7f8894f1eed82fb..a60e5bc93dd93d41cee85d0ce03ee5619154d3d8 100644 |
--- a/src/heap/incremental-marking.cc |
+++ b/src/heap/incremental-marking.cc |
@@ -559,6 +559,26 @@ void IncrementalMarking::StartMarking(CompactionFlag flag) { |
} |
+void IncrementalMarking::MarkObjectGroups() { |
+ DCHECK(FLAG_overapproximate_weak_closure); |
+ DCHECK(!weak_closure_was_overapproximated_); |
+ |
+ GCTracer::Scope gc_scope(heap_->tracer(), |
+ GCTracer::Scope::MC_INCREMENTAL_WEAKCLOSURE); |
+ |
+ heap_->mark_compact_collector()->MarkImplicitRefGroups(); |
jochen (gone - plz use gerrit)
2015/03/13 09:59:27
this might be wrong too, as it just marks the obje
|
+ |
+ IncrementalMarkingRootMarkingVisitor visitor(this); |
+ heap_->isolate()->global_handles()->IterateObjectGroups( |
+ &visitor, &MarkCompactCollector::IsUnmarkedHeapObjectWithHeap); |
+ |
+ heap_->isolate()->global_handles()->RemoveImplicitRefGroups(); |
+ heap_->isolate()->global_handles()->RemoveObjectGroups(); |
+ |
+ weak_closure_was_overapproximated_ = true; |
+} |
+ |
+ |
void IncrementalMarking::PrepareForScavenge() { |
if (!IsMarking()) return; |
NewSpacePageIterator it(heap_->new_space()->FromSpaceStart(), |
@@ -777,7 +797,6 @@ void IncrementalMarking::OverApproximateWeakClosure() { |
if (FLAG_trace_incremental_marking) { |
PrintF("[IncrementalMarking] requesting weak closure overapproximation.\n"); |
} |
- set_should_hurry(true); |
request_type_ = OVERAPPROXIMATION; |
heap_->isolate()->stack_guard()->RequestGC(); |
} |