Commit dd5a93cd authored by erikcorry's avatar erikcorry Committed by Commit bot

Don't UnshiftGrey any black objects

R=hpayer@chromium.org
BUG=

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

Cr-Commit-Position: refs/heads/master@{#28582}
parent a326691c
...@@ -188,7 +188,12 @@ class IncrementalMarkingMarkingVisitor ...@@ -188,7 +188,12 @@ class IncrementalMarkingMarkingVisitor
} while (scan_until_end && start_offset < object_size); } while (scan_until_end && start_offset < object_size);
chunk->set_progress_bar(start_offset); chunk->set_progress_bar(start_offset);
if (start_offset < object_size) { if (start_offset < object_size) {
heap->mark_compact_collector()->marking_deque()->UnshiftGrey(object); if (Marking::IsGrey(Marking::MarkBitFrom(object))) {
heap->mark_compact_collector()->marking_deque()->UnshiftGrey(object);
} else {
DCHECK(Marking::IsBlack(Marking::MarkBitFrom(object)));
heap->mark_compact_collector()->marking_deque()->UnshiftBlack(object);
}
heap->incremental_marking()->NotifyIncompleteScanOfObject( heap->incremental_marking()->NotifyIncompleteScanOfObject(
object_size - (start_offset - already_scanned_offset)); object_size - (start_offset - already_scanned_offset));
} }
......
...@@ -242,6 +242,7 @@ class MarkingDeque { ...@@ -242,6 +242,7 @@ class MarkingDeque {
INLINE(void UnshiftGrey(HeapObject* object)) { INLINE(void UnshiftGrey(HeapObject* object)) {
DCHECK(object->IsHeapObject()); DCHECK(object->IsHeapObject());
DCHECK(Marking::IsGrey(Marking::MarkBitFrom(object)));
if (IsFull()) { if (IsFull()) {
SetOverflowed(); SetOverflowed();
} else { } else {
...@@ -250,6 +251,19 @@ class MarkingDeque { ...@@ -250,6 +251,19 @@ class MarkingDeque {
} }
} }
INLINE(void UnshiftBlack(HeapObject* object)) {
DCHECK(object->IsHeapObject());
DCHECK(Marking::IsBlack(Marking::MarkBitFrom(object)));
if (IsFull()) {
Marking::BlackToGrey(object);
MemoryChunk::IncrementLiveBytesFromGC(object->address(), -object->Size());
SetOverflowed();
} else {
bottom_ = ((bottom_ - 1) & mask_);
array_[bottom_] = object;
}
}
HeapObject** array() { return array_; } HeapObject** array() { return array_; }
int bottom() { return bottom_; } int bottom() { return bottom_; }
int top() { return top_; } int top() { return top_; }
......
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