Fix incremental marking to be off during heap snapshots.

The heap snapshot generator uses the UnreachableObjectsFilter which in
turn messes with marking bits. This requires incremental marking to be
turned off while the snapshot is being generated.

R=verwaest@chromium.org
TEST=cctest/test-heap-profiler --stress-compaction

Review URL: https://codereview.chromium.org/11413183

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13066 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 77dcc8da
...@@ -615,7 +615,7 @@ bool Heap::CollectGarbage(AllocationSpace space, ...@@ -615,7 +615,7 @@ bool Heap::CollectGarbage(AllocationSpace space,
} }
if (collector == MARK_COMPACTOR && if (collector == MARK_COMPACTOR &&
!mark_compact_collector()->abort_incremental_marking_ && !mark_compact_collector()->abort_incremental_marking() &&
!incremental_marking()->IsStopped() && !incremental_marking()->IsStopped() &&
!incremental_marking()->should_hurry() && !incremental_marking()->should_hurry() &&
FLAG_incremental_marking_steps) { FLAG_incremental_marking_steps) {
...@@ -657,10 +657,13 @@ bool Heap::CollectGarbage(AllocationSpace space, ...@@ -657,10 +657,13 @@ bool Heap::CollectGarbage(AllocationSpace space,
GarbageCollectionEpilogue(); GarbageCollectionEpilogue();
} }
if (incremental_marking()->IsStopped()) { // Start incremental marking for the next cycle. The heap snapshot
if (incremental_marking()->WorthActivating() && NextGCIsLikelyToBeFull()) { // generator needs incremental marking to stay off after it aborted.
incremental_marking()->Start(); if (!mark_compact_collector()->abort_incremental_marking() &&
} incremental_marking()->IsStopped() &&
incremental_marking()->WorthActivating() &&
NextGCIsLikelyToBeFull()) {
incremental_marking()->Start();
} }
return next_gc_likely_to_collect_more; return next_gc_likely_to_collect_more;
......
...@@ -658,6 +658,8 @@ class MarkCompactCollector { ...@@ -658,6 +658,8 @@ class MarkCompactCollector {
void ClearMarkbits(); void ClearMarkbits();
bool abort_incremental_marking() const { return abort_incremental_marking_; }
bool is_compacting() const { return compacting_; } bool is_compacting() const { return compacting_; }
MarkingParity marking_parity() { return marking_parity_; } MarkingParity marking_parity() { return marking_parity_; }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment