| Index: src/heap/mark-compact.cc
|
| diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc
|
| index 9b986ce2f3b5d167ad80719937461a0dc4bdc0de..7f918107d5802d459558edf4fc7022d5085ea820 100644
|
| --- a/src/heap/mark-compact.cc
|
| +++ b/src/heap/mark-compact.cc
|
| @@ -66,13 +66,11 @@ MarkCompactCollector::MarkCompactCollector(Heap* heap)
|
| #ifdef VERIFY_HEAP
|
| class VerifyMarkingVisitor : public ObjectVisitor {
|
| public:
|
| - explicit VerifyMarkingVisitor(Heap* heap) : heap_(heap) {}
|
| -
|
| void VisitPointers(Object** start, Object** end) override {
|
| for (Object** current = start; current < end; current++) {
|
| if ((*current)->IsHeapObject()) {
|
| HeapObject* object = HeapObject::cast(*current);
|
| - CHECK(heap_->mark_compact_collector()->IsMarked(object));
|
| + CHECK(ObjectMarking::IsBlackOrGrey(object));
|
| }
|
| }
|
| }
|
| @@ -92,20 +90,17 @@ class VerifyMarkingVisitor : public ObjectVisitor {
|
| ObjectVisitor::VisitCell(rinfo);
|
| }
|
| }
|
| -
|
| - private:
|
| - Heap* heap_;
|
| };
|
|
|
|
|
| static void VerifyMarking(Heap* heap, Address bottom, Address top) {
|
| - VerifyMarkingVisitor visitor(heap);
|
| + VerifyMarkingVisitor visitor;
|
| HeapObject* object;
|
| Address next_object_must_be_here_or_later = bottom;
|
| for (Address current = bottom; current < top;) {
|
| object = HeapObject::FromAddress(current);
|
| // One word fillers at the end of a black area can be grey.
|
| - if (MarkCompactCollector::IsMarked(object) &&
|
| + if (ObjectMarking::IsBlackOrGrey(object) &&
|
| object->map() != heap->one_pointer_filler_map()) {
|
| CHECK(ObjectMarking::IsBlack(object));
|
| CHECK(current >= next_object_must_be_here_or_later);
|
| @@ -157,11 +152,11 @@ static void VerifyMarking(Heap* heap) {
|
| VerifyMarking(heap->map_space());
|
| VerifyMarking(heap->new_space());
|
|
|
| - VerifyMarkingVisitor visitor(heap);
|
| + VerifyMarkingVisitor visitor;
|
|
|
| LargeObjectIterator it(heap->lo_space());
|
| for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) {
|
| - if (MarkCompactCollector::IsMarked(obj)) {
|
| + if (ObjectMarking::IsBlackOrGrey(obj)) {
|
| obj->Iterate(&visitor);
|
| }
|
| }
|
| @@ -1101,7 +1096,7 @@ class StaticYoungGenerationMarkingVisitor
|
| if (check.HasOverflowed()) return false;
|
|
|
| if (ObjectMarking::IsBlackOrGrey(object)) return true;
|
| - heap->mark_compact_collector()->SetMark(object);
|
| + ObjectMarking::WhiteToBlack(object);
|
| IterateBody(object->map(), object);
|
| return true;
|
| }
|
| @@ -1140,7 +1135,7 @@ class MarkCompactMarkingVisitor
|
| // Returns true if object needed marking and false otherwise.
|
| INLINE(static bool MarkObjectWithoutPush(Heap* heap, HeapObject* object)) {
|
| if (ObjectMarking::IsWhite(object)) {
|
| - heap->mark_compact_collector()->SetMark(object);
|
| + ObjectMarking::WhiteToBlack(object);
|
| return true;
|
| }
|
| return false;
|
| @@ -1162,11 +1157,11 @@ class MarkCompactMarkingVisitor
|
| HeapObject* obj)) {
|
| #ifdef DEBUG
|
| DCHECK(collector->heap()->Contains(obj));
|
| - DCHECK(!collector->heap()->mark_compact_collector()->IsMarked(obj));
|
| + DCHECK(ObjectMarking::IsWhite(obj));
|
| #endif
|
| Map* map = obj->map();
|
| Heap* heap = obj->GetHeap();
|
| - heap->mark_compact_collector()->SetMark(obj);
|
| + ObjectMarking::WhiteToBlack(obj);
|
| // Mark the map pointer and the body.
|
| MarkBit map_mark = ObjectMarking::MarkBitFrom(map);
|
| heap->mark_compact_collector()->MarkObject(map, map_mark);
|
| @@ -1391,7 +1386,7 @@ class RootMarkingVisitor : public ObjectVisitor {
|
|
|
| Map* map = object->map();
|
| // Mark the object.
|
| - collector_->SetMark(object);
|
| + ObjectMarking::WhiteToBlack(object);
|
|
|
| switch (mode) {
|
| case MarkCompactMode::FULL: {
|
| @@ -1479,7 +1474,7 @@ class MarkCompactWeakObjectRetainer : public WeakObjectRetainer {
|
| // space. These sites get a one-time reprieve.
|
| AllocationSite* site = AllocationSite::cast(object);
|
| site->MarkZombie();
|
| - site->GetHeap()->mark_compact_collector()->MarkAllocationSite(site);
|
| + ObjectMarking::WhiteToBlack(site);
|
| return object;
|
| } else {
|
| return NULL;
|
| @@ -1980,18 +1975,13 @@ void MarkCompactCollector::MarkStringTable(
|
| // Mark the string table itself.
|
| if (ObjectMarking::IsWhite(string_table)) {
|
| // String table could have already been marked by visiting the handles list.
|
| - SetMark(string_table);
|
| + ObjectMarking::WhiteToBlack(string_table);
|
| }
|
| // Explicitly mark the prefix.
|
| string_table->IteratePrefix(visitor);
|
| ProcessMarkingDeque<MarkCompactMode::FULL>();
|
| }
|
|
|
| -
|
| -void MarkCompactCollector::MarkAllocationSite(AllocationSite* site) {
|
| - SetMark(site);
|
| -}
|
| -
|
| void MarkCompactCollector::MarkRoots(
|
| RootMarkingVisitor<MarkCompactMode::FULL>* visitor) {
|
| // Mark the heap roots including global variables, stack variables,
|
| @@ -2019,7 +2009,7 @@ void MarkCompactCollector::MarkImplicitRefGroups(
|
| ImplicitRefGroup* entry = ref_groups->at(i);
|
| DCHECK(entry != NULL);
|
|
|
| - if (!IsMarked(*entry->parent)) {
|
| + if (ObjectMarking::IsWhite(*entry->parent)) {
|
| (*ref_groups)[last++] = entry;
|
| continue;
|
| }
|
| @@ -2325,7 +2315,7 @@ SlotCallbackResult MarkCompactCollector::CheckAndMarkObject(
|
| if (ObjectMarking::IsBlackOrGrey(heap_object)) {
|
| return KEEP_SLOT;
|
| }
|
| - heap->mark_compact_collector()->SetMark(heap_object);
|
| + ObjectMarking::WhiteToBlack(heap_object);
|
| StaticYoungGenerationMarkingVisitor::IterateBody(heap_object->map(),
|
| heap_object);
|
| return KEEP_SLOT;
|
| @@ -2777,11 +2767,11 @@ void MarkCompactCollector::ProcessWeakCollections() {
|
| while (weak_collection_obj != Smi::kZero) {
|
| JSWeakCollection* weak_collection =
|
| reinterpret_cast<JSWeakCollection*>(weak_collection_obj);
|
| - DCHECK(MarkCompactCollector::IsMarked(weak_collection));
|
| + DCHECK(ObjectMarking::IsBlackOrGrey(weak_collection));
|
| if (weak_collection->table()->IsHashTable()) {
|
| ObjectHashTable* table = ObjectHashTable::cast(weak_collection->table());
|
| for (int i = 0; i < table->Capacity(); i++) {
|
| - if (MarkCompactCollector::IsMarked(HeapObject::cast(table->KeyAt(i)))) {
|
| + if (ObjectMarking::IsBlackOrGrey(HeapObject::cast(table->KeyAt(i)))) {
|
| Object** key_slot =
|
| table->RawFieldOfElementAt(ObjectHashTable::EntryToIndex(i));
|
| RecordSlot(table, key_slot, *key_slot);
|
| @@ -2803,12 +2793,12 @@ void MarkCompactCollector::ClearWeakCollections() {
|
| while (weak_collection_obj != Smi::kZero) {
|
| JSWeakCollection* weak_collection =
|
| reinterpret_cast<JSWeakCollection*>(weak_collection_obj);
|
| - DCHECK(MarkCompactCollector::IsMarked(weak_collection));
|
| + DCHECK(ObjectMarking::IsBlackOrGrey(weak_collection));
|
| if (weak_collection->table()->IsHashTable()) {
|
| ObjectHashTable* table = ObjectHashTable::cast(weak_collection->table());
|
| for (int i = 0; i < table->Capacity(); i++) {
|
| HeapObject* key = HeapObject::cast(table->KeyAt(i));
|
| - if (!MarkCompactCollector::IsMarked(key)) {
|
| + if (!ObjectMarking::IsBlackOrGrey(key)) {
|
| table->RemoveEntry(i);
|
| }
|
| }
|
| @@ -2849,7 +2839,7 @@ void MarkCompactCollector::ClearWeakCells(Object** non_live_map_list,
|
| // We do not insert cleared weak cells into the list, so the value
|
| // cannot be a Smi here.
|
| HeapObject* value = HeapObject::cast(weak_cell->value());
|
| - if (!MarkCompactCollector::IsMarked(value)) {
|
| + if (!ObjectMarking::IsBlackOrGrey(value)) {
|
| // Cells for new-space objects embedded in optimized code are wrapped in
|
| // WeakCell and put into Heap::weak_object_to_code_table.
|
| // Such cells do not have any strong references but we want to keep them
|
| @@ -2858,9 +2848,9 @@ void MarkCompactCollector::ClearWeakCells(Object** non_live_map_list,
|
| if (value->IsCell()) {
|
| Object* cell_value = Cell::cast(value)->value();
|
| if (cell_value->IsHeapObject() &&
|
| - MarkCompactCollector::IsMarked(HeapObject::cast(cell_value))) {
|
| + ObjectMarking::IsBlackOrGrey(HeapObject::cast(cell_value))) {
|
| // Resurrect the cell.
|
| - SetMark(value);
|
| + ObjectMarking::WhiteToBlack(value);
|
| Object** slot = HeapObject::RawField(value, Cell::kValueOffset);
|
| RecordSlot(value, slot, *slot);
|
| slot = HeapObject::RawField(weak_cell, WeakCell::kValueOffset);
|
|
|