Chromium Code Reviews| Index: src/heap/incremental-marking.cc |
| diff --git a/src/heap/incremental-marking.cc b/src/heap/incremental-marking.cc |
| index 343542e8e53d4a65062a3cff1ccd83b1a9eeb02c..4036bf3e2613b19f83df1d871544b12ae1023837 100644 |
| --- a/src/heap/incremental-marking.cc |
| +++ b/src/heap/incremental-marking.cc |
| @@ -797,12 +797,13 @@ void IncrementalMarking::UpdateMarkingDequeAfterScavenge() { |
| }); |
| } |
| +bool IncrementalMarking::IsFixedArrayWithProgressBar(HeapObject* obj) { |
| + if (!obj->IsFixedArray()) return false; |
| + MemoryChunk* chunk = MemoryChunk::FromAddress(obj->address()); |
| + return chunk->IsFlagSet(MemoryChunk::HAS_PROGRESS_BAR); |
| +} |
| void IncrementalMarking::VisitObject(Map* map, HeapObject* obj, int size) { |
| - WhiteToGreyAndPush(map); |
| - |
| - IncrementalMarkingMarkingVisitor::IterateBody(map, obj); |
| - |
| #if ENABLE_SLOW_DCHECKS |
| MarkBit mark_bit = ObjectMarking::MarkBitFrom(obj, marking_state(obj)); |
| MemoryChunk* chunk = MemoryChunk::FromAddress(obj->address()); |
| @@ -810,7 +811,13 @@ void IncrementalMarking::VisitObject(Map* map, HeapObject* obj, int size) { |
| (chunk->IsFlagSet(MemoryChunk::HAS_PROGRESS_BAR) && |
| Marking::IsBlack<kAtomicity>(mark_bit))); |
| #endif |
| - ObjectMarking::GreyToBlack<kAtomicity>(obj, marking_state(obj)); |
| + if (ObjectMarking::GreyToBlack<kAtomicity>(obj, marking_state(obj))) { |
|
Michael Lippautz
2017/05/03 07:51:49
GreyToWhite?
Otherwise WhiteToGreyAndPush will be
ulan
2017/05/03 09:03:54
WhiteToGreyAndPush applies to the map.
The object
Michael Lippautz
2017/05/03 10:05:39
Thanks :)
|
| + WhiteToGreyAndPush(map); |
| + IncrementalMarkingMarkingVisitor::IterateBody(map, obj); |
| + } else if (IsFixedArrayWithProgressBar(obj)) { |
| + DCHECK(ObjectMarking::IsBlack<kAtomicity>(obj, marking_state(obj))); |
| + IncrementalMarkingMarkingVisitor::VisitFixedArrayIncremental(map, obj); |
| + } |
| } |
| intptr_t IncrementalMarking::ProcessMarkingDeque( |