| Index: src/heap/mark-compact.cc
|
| diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc
|
| index e34dbfd2337cc0bec932e2729d51ae1aeb5d1787..95f762c05cc09b6d23400f02114e0a1f1623cd97 100644
|
| --- a/src/heap/mark-compact.cc
|
| +++ b/src/heap/mark-compact.cc
|
| @@ -1734,21 +1734,18 @@ class MarkCompactWeakObjectRetainer : public WeakObjectRetainer {
|
| // iterator. Stop when the marking stack is filled or the end of the space
|
| // is reached, whichever comes first.
|
| template <class T>
|
| -static void DiscoverGreyObjectsWithIterator(Heap* heap,
|
| - MarkingDeque* marking_deque,
|
| - T* it) {
|
| +void MarkCompactCollector::DiscoverGreyObjectsWithIterator(T* it) {
|
| // The caller should ensure that the marking stack is initially not full,
|
| // so that we don't waste effort pointlessly scanning for objects.
|
| - DCHECK(!marking_deque->IsFull());
|
| + DCHECK(!marking_deque()->IsFull());
|
|
|
| - Map* filler_map = heap->one_pointer_filler_map();
|
| + Map* filler_map = heap()->one_pointer_filler_map();
|
| for (HeapObject* object = it->Next(); object != NULL; object = it->Next()) {
|
| MarkBit markbit = Marking::MarkBitFrom(object);
|
| if ((object->map() != filler_map) && Marking::IsGrey(markbit)) {
|
| Marking::GreyToBlack(markbit);
|
| - MemoryChunk::IncrementLiveBytesFromGC(object, object->Size());
|
| - marking_deque->PushBlack(object);
|
| - if (marking_deque->IsFull()) return;
|
| + PushBlack(object);
|
| + if (marking_deque()->IsFull()) return;
|
| }
|
| }
|
| }
|
| @@ -1757,9 +1754,8 @@ static void DiscoverGreyObjectsWithIterator(Heap* heap,
|
| static inline int MarkWordToObjectStarts(uint32_t mark_bits, int* starts);
|
|
|
|
|
| -static void DiscoverGreyObjectsOnPage(MarkingDeque* marking_deque,
|
| - MemoryChunk* p) {
|
| - DCHECK(!marking_deque->IsFull());
|
| +void MarkCompactCollector::DiscoverGreyObjectsOnPage(MemoryChunk* p) {
|
| + DCHECK(!marking_deque()->IsFull());
|
| DCHECK(strcmp(Marking::kWhiteBitPattern, "00") == 0);
|
| DCHECK(strcmp(Marking::kBlackBitPattern, "10") == 0);
|
| DCHECK(strcmp(Marking::kGreyBitPattern, "11") == 0);
|
| @@ -1791,9 +1787,8 @@ static void DiscoverGreyObjectsOnPage(MarkingDeque* marking_deque,
|
| Marking::GreyToBlack(markbit);
|
| Address addr = cell_base + offset * kPointerSize;
|
| HeapObject* object = HeapObject::FromAddress(addr);
|
| - MemoryChunk::IncrementLiveBytesFromGC(object, object->Size());
|
| - marking_deque->PushBlack(object);
|
| - if (marking_deque->IsFull()) return;
|
| + PushBlack(object);
|
| + if (marking_deque()->IsFull()) return;
|
| offset += 2;
|
| grey_objects >>= 2;
|
| }
|
| @@ -1866,25 +1861,23 @@ int MarkCompactCollector::DiscoverAndEvacuateBlackObjectsOnPage(
|
| }
|
|
|
|
|
| -static void DiscoverGreyObjectsInSpace(Heap* heap, MarkingDeque* marking_deque,
|
| - PagedSpace* space) {
|
| +void MarkCompactCollector::DiscoverGreyObjectsInSpace(PagedSpace* space) {
|
| PageIterator it(space);
|
| while (it.has_next()) {
|
| Page* p = it.next();
|
| - DiscoverGreyObjectsOnPage(marking_deque, p);
|
| - if (marking_deque->IsFull()) return;
|
| + DiscoverGreyObjectsOnPage(p);
|
| + if (marking_deque()->IsFull()) return;
|
| }
|
| }
|
|
|
|
|
| -static void DiscoverGreyObjectsInNewSpace(Heap* heap,
|
| - MarkingDeque* marking_deque) {
|
| - NewSpace* space = heap->new_space();
|
| +void MarkCompactCollector::DiscoverGreyObjectsInNewSpace() {
|
| + NewSpace* space = heap()->new_space();
|
| NewSpacePageIterator it(space->bottom(), space->top());
|
| while (it.has_next()) {
|
| NewSpacePage* page = it.next();
|
| - DiscoverGreyObjectsOnPage(marking_deque, page);
|
| - if (marking_deque->IsFull()) return;
|
| + DiscoverGreyObjectsOnPage(page);
|
| + if (marking_deque()->IsFull()) return;
|
| }
|
| }
|
|
|
| @@ -2009,20 +2002,20 @@ void MarkCompactCollector::RefillMarkingDeque() {
|
| isolate()->CountUsage(v8::Isolate::UseCounterFeature::kMarkDequeOverflow);
|
| DCHECK(marking_deque_.overflowed());
|
|
|
| - DiscoverGreyObjectsInNewSpace(heap(), &marking_deque_);
|
| + DiscoverGreyObjectsInNewSpace();
|
| if (marking_deque_.IsFull()) return;
|
|
|
| - DiscoverGreyObjectsInSpace(heap(), &marking_deque_, heap()->old_space());
|
| + DiscoverGreyObjectsInSpace(heap()->old_space());
|
| if (marking_deque_.IsFull()) return;
|
|
|
| - DiscoverGreyObjectsInSpace(heap(), &marking_deque_, heap()->code_space());
|
| + DiscoverGreyObjectsInSpace(heap()->code_space());
|
| if (marking_deque_.IsFull()) return;
|
|
|
| - DiscoverGreyObjectsInSpace(heap(), &marking_deque_, heap()->map_space());
|
| + DiscoverGreyObjectsInSpace(heap()->map_space());
|
| if (marking_deque_.IsFull()) return;
|
|
|
| LargeObjectIterator lo_it(heap()->lo_space());
|
| - DiscoverGreyObjectsWithIterator(heap(), &marking_deque_, &lo_it);
|
| + DiscoverGreyObjectsWithIterator(&lo_it);
|
| if (marking_deque_.IsFull()) return;
|
|
|
| marking_deque_.ClearOverflowed();
|
|
|