| Index: src/heap/incremental-marking.cc
|
| diff --git a/src/heap/incremental-marking.cc b/src/heap/incremental-marking.cc
|
| index b9f198ea6294224e4a9c96dfe9e3b558f918fc7c..ec7594159ba63476e2cb69db8fb4876991eb4506 100644
|
| --- a/src/heap/incremental-marking.cc
|
| +++ b/src/heap/incremental-marking.cc
|
| @@ -195,14 +195,6 @@ void IncrementalMarking::TransferMark(Heap* heap, Address old_start,
|
| #endif
|
| }
|
|
|
| -static inline void MarkBlackOrKeepBlack(HeapObject* heap_object,
|
| - MarkBit mark_bit, int size) {
|
| - DCHECK(!Marking::IsImpossible(mark_bit));
|
| - if (Marking::IsBlack(mark_bit)) return;
|
| - Marking::MarkBlack(mark_bit);
|
| - MemoryChunk::IncrementLiveBytesFromGC(heap_object, size);
|
| -}
|
| -
|
| class IncrementalMarkingMarkingVisitor
|
| : public StaticMarkingVisitor<IncrementalMarkingMarkingVisitor> {
|
| public:
|
| @@ -294,7 +286,7 @@ class IncrementalMarkingMarkingVisitor
|
|
|
| // Marks the object grey and pushes it on the marking stack.
|
| INLINE(static void MarkObject(Heap* heap, Object* obj)) {
|
| - IncrementalMarking::MarkObject(heap, HeapObject::cast(obj));
|
| + IncrementalMarking::MarkGrey(heap, HeapObject::cast(obj));
|
| }
|
|
|
| // Marks the object black without pushing it on the marking stack.
|
| @@ -339,7 +331,7 @@ class IncrementalMarkingRootMarkingVisitor : public ObjectVisitor {
|
| Object* obj = *p;
|
| if (!obj->IsHeapObject()) return;
|
|
|
| - IncrementalMarking::MarkObject(heap_, HeapObject::cast(obj));
|
| + IncrementalMarking::MarkGrey(heap_, HeapObject::cast(obj));
|
| }
|
|
|
| Heap* heap_;
|
| @@ -633,7 +625,7 @@ void IncrementalMarking::MarkObjectGroups() {
|
| DCHECK(IsMarking());
|
|
|
| IncrementalMarkingRootMarkingVisitor visitor(this);
|
| - heap_->mark_compact_collector()->MarkImplicitRefGroups(&MarkObject);
|
| + heap_->mark_compact_collector()->MarkImplicitRefGroups(&MarkGrey);
|
| heap_->isolate()->global_handles()->IterateObjectGroups(
|
| &visitor, &MarkCompactCollector::IsUnmarkedHeapObjectWithHeap);
|
| heap_->isolate()->global_handles()->RemoveImplicitRefGroups();
|
| @@ -720,7 +712,7 @@ void IncrementalMarking::RetainMaps() {
|
| if (i >= number_of_disposed_maps && !map_retaining_is_disabled &&
|
| Marking::IsWhite(map_mark)) {
|
| if (ShouldRetainMap(map, age)) {
|
| - MarkObject(heap(), map);
|
| + MarkGrey(heap(), map);
|
| }
|
| Object* prototype = map->prototype();
|
| if (age > 0 && prototype->IsHeapObject() &&
|
| @@ -863,29 +855,35 @@ void IncrementalMarking::UpdateMarkingDequeAfterScavenge() {
|
|
|
|
|
| void IncrementalMarking::VisitObject(Map* map, HeapObject* obj, int size) {
|
| - MarkObject(heap_, map);
|
| + MarkGrey(heap_, map);
|
|
|
| IncrementalMarkingMarkingVisitor::IterateBody(map, obj);
|
|
|
| - MarkBit mark_bit = ObjectMarking::MarkBitFrom(obj);
|
| #if ENABLE_SLOW_DCHECKS
|
| + MarkBit mark_bit = ObjectMarking::MarkBitFrom(obj);
|
| MemoryChunk* chunk = MemoryChunk::FromAddress(obj->address());
|
| SLOW_DCHECK(Marking::IsGrey(mark_bit) ||
|
| (obj->IsFiller() && Marking::IsWhite(mark_bit)) ||
|
| (chunk->IsFlagSet(MemoryChunk::HAS_PROGRESS_BAR) &&
|
| Marking::IsBlack(mark_bit)));
|
| #endif
|
| - MarkBlackOrKeepBlack(obj, mark_bit, size);
|
| + MarkBlack(obj, size);
|
| }
|
|
|
| -
|
| -void IncrementalMarking::MarkObject(Heap* heap, HeapObject* obj) {
|
| - MarkBit mark_bit = ObjectMarking::MarkBitFrom(obj);
|
| +void IncrementalMarking::MarkGrey(Heap* heap, HeapObject* object) {
|
| + MarkBit mark_bit = ObjectMarking::MarkBitFrom(object);
|
| if (Marking::IsWhite(mark_bit)) {
|
| - heap->incremental_marking()->WhiteToGreyAndPush(obj, mark_bit);
|
| + heap->incremental_marking()->WhiteToGreyAndPush(object, mark_bit);
|
| }
|
| }
|
|
|
| +void IncrementalMarking::MarkBlack(HeapObject* obj, int size) {
|
| + MarkBit mark_bit = ObjectMarking::MarkBitFrom(obj);
|
| + if (Marking::IsBlack(mark_bit)) return;
|
| + Marking::GreyToBlack(mark_bit);
|
| + MemoryChunk::IncrementLiveBytesFromGC(obj, size);
|
| +}
|
| +
|
| intptr_t IncrementalMarking::ProcessMarkingDeque(
|
| intptr_t bytes_to_process, ForceCompletionAction completion) {
|
| intptr_t bytes_processed = 0;
|
|
|