Index: src/heap/mark-compact.cc |
diff --git a/src/heap/mark-compact.cc b/src/heap/mark-compact.cc |
index 51d114a7ab047da667134fae6de4907d2f8d34f1..773ca919f157bee26b4ade253e96019684cc0570 100644 |
--- a/src/heap/mark-compact.cc |
+++ b/src/heap/mark-compact.cc |
@@ -37,9 +37,8 @@ const char* Marking::kBlackBitPattern = "11"; |
const char* Marking::kGreyBitPattern = "10"; |
const char* Marking::kImpossibleBitPattern = "01"; |
- |
-// The following has to hold in order for {Marking::MarkBitFrom} to not produce |
-// invalid {kImpossibleBitPattern} in the marking bitmap by overlapping. |
+// The following has to hold in order for {ObjectMarking::MarkBitFrom} to not |
+// produce invalid {kImpossibleBitPattern} in the marking bitmap by overlapping. |
STATIC_ASSERT(Heap::kMinObjectSizeInWords >= 2); |
@@ -109,7 +108,7 @@ static void VerifyMarking(Heap* heap, Address bottom, Address top) { |
for (Address current = bottom; current < top; current += kPointerSize) { |
object = HeapObject::FromAddress(current); |
if (MarkCompactCollector::IsMarked(object)) { |
- CHECK(Marking::IsBlack(Marking::MarkBitFrom(object))); |
+ CHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(object))); |
CHECK(current >= next_object_must_be_here_or_later); |
object->Iterate(&visitor); |
next_object_must_be_here_or_later = current + object->Size(); |
@@ -124,7 +123,7 @@ static void VerifyMarkingBlackPage(Heap* heap, Page* page) { |
VerifyMarkingVisitor visitor(heap); |
HeapObjectIterator it(page); |
for (HeapObject* object = it.Next(); object != NULL; object = it.Next()) { |
- CHECK(Marking::IsBlack(Marking::MarkBitFrom(object))); |
+ CHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(object))); |
object->Iterate(&visitor); |
} |
} |
@@ -377,7 +376,7 @@ void MarkCompactCollector::VerifyMarkbitsAreClean() { |
LargeObjectIterator it(heap_->lo_space()); |
for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) { |
- MarkBit mark_bit = Marking::MarkBitFrom(obj); |
+ MarkBit mark_bit = ObjectMarking::MarkBitFrom(obj); |
CHECK(Marking::IsWhite(mark_bit)); |
CHECK_EQ(0, Page::FromAddress(obj->address())->LiveBytes()); |
} |
@@ -408,7 +407,7 @@ void MarkCompactCollector::VerifyOmittedMapChecks() { |
static void ClearMarkbitsInPagedSpace(PagedSpace* space) { |
for (Page* p : *space) { |
- Bitmap::Clear(p); |
+ p->ClearLiveness(); |
if (p->IsFlagSet(Page::BLACK_PAGE)) { |
p->ClearFlag(Page::BLACK_PAGE); |
} |
@@ -418,7 +417,7 @@ static void ClearMarkbitsInPagedSpace(PagedSpace* space) { |
static void ClearMarkbitsInNewSpace(NewSpace* space) { |
for (Page* page : *space) { |
- Bitmap::Clear(page); |
+ page->ClearLiveness(); |
} |
} |
@@ -431,7 +430,7 @@ void MarkCompactCollector::ClearMarkbits() { |
LargeObjectIterator it(heap_->lo_space()); |
for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) { |
- Marking::MarkWhite(Marking::MarkBitFrom(obj)); |
+ Marking::MarkWhite(ObjectMarking::MarkBitFrom(obj)); |
MemoryChunk* chunk = MemoryChunk::FromAddress(obj->address()); |
chunk->ResetProgressBar(); |
chunk->ResetLiveBytes(); |
@@ -584,45 +583,6 @@ bool MarkCompactCollector::Sweeper::IsSweepingCompleted() { |
return num_sweeping_tasks_.Value() == 0; |
} |
-void Marking::TransferMark(Heap* heap, Address old_start, Address new_start) { |
- // This is only used when resizing an object. |
- DCHECK(MemoryChunk::FromAddress(old_start) == |
- MemoryChunk::FromAddress(new_start)); |
- |
- if (!heap->incremental_marking()->IsMarking() || |
- Page::FromAddress(old_start)->IsFlagSet(Page::BLACK_PAGE)) |
- return; |
- |
- // If the mark doesn't move, we don't check the color of the object. |
- // It doesn't matter whether the object is black, since it hasn't changed |
- // size, so the adjustment to the live data count will be zero anyway. |
- if (old_start == new_start) return; |
- |
- MarkBit new_mark_bit = MarkBitFrom(new_start); |
- MarkBit old_mark_bit = MarkBitFrom(old_start); |
- |
-#ifdef DEBUG |
- ObjectColor old_color = Color(old_mark_bit); |
-#endif |
- |
- if (Marking::IsBlack(old_mark_bit)) { |
- Marking::BlackToWhite(old_mark_bit); |
- Marking::MarkBlack(new_mark_bit); |
- return; |
- } else if (Marking::IsGrey(old_mark_bit)) { |
- Marking::GreyToWhite(old_mark_bit); |
- heap->incremental_marking()->WhiteToGreyAndPush( |
- HeapObject::FromAddress(new_start), new_mark_bit); |
- heap->incremental_marking()->RestartIfNotMarking(); |
- } |
- |
-#ifdef DEBUG |
- ObjectColor new_color = Color(new_mark_bit); |
- DCHECK(new_color == old_color); |
-#endif |
-} |
- |
- |
const char* AllocationSpaceName(AllocationSpace space) { |
switch (space) { |
case NEW_SPACE: |
@@ -972,7 +932,7 @@ void CodeFlusher::ProcessJSFunctionCandidates() { |
SharedFunctionInfo* shared = candidate->shared(); |
Code* code = shared->code(); |
- MarkBit code_mark = Marking::MarkBitFrom(code); |
+ MarkBit code_mark = ObjectMarking::MarkBitFrom(code); |
if (Marking::IsWhite(code_mark)) { |
if (FLAG_trace_code_flushing && shared->is_compiled()) { |
PrintF("[code-flushing clears: "); |
@@ -1019,7 +979,7 @@ void CodeFlusher::ProcessSharedFunctionInfoCandidates() { |
ClearNextCandidate(candidate); |
Code* code = candidate->code(); |
- MarkBit code_mark = Marking::MarkBitFrom(code); |
+ MarkBit code_mark = ObjectMarking::MarkBitFrom(code); |
if (Marking::IsWhite(code_mark)) { |
if (FLAG_trace_code_flushing && candidate->is_compiled()) { |
PrintF("[code-flushing clears: "); |
@@ -1156,14 +1116,14 @@ class MarkCompactMarkingVisitor |
// Marks the object black and pushes it on the marking stack. |
INLINE(static void MarkObject(Heap* heap, HeapObject* object)) { |
- MarkBit mark = Marking::MarkBitFrom(object); |
+ MarkBit mark = ObjectMarking::MarkBitFrom(object); |
heap->mark_compact_collector()->MarkObject(object, mark); |
} |
// Marks the object black without pushing it on the marking stack. |
// Returns true if object needed marking and false otherwise. |
INLINE(static bool MarkObjectWithoutPush(Heap* heap, HeapObject* object)) { |
- MarkBit mark_bit = Marking::MarkBitFrom(object); |
+ MarkBit mark_bit = ObjectMarking::MarkBitFrom(object); |
if (Marking::IsWhite(mark_bit)) { |
heap->mark_compact_collector()->SetMark(object, mark_bit); |
return true; |
@@ -1177,7 +1137,7 @@ class MarkCompactMarkingVisitor |
if (!(*p)->IsHeapObject()) return; |
HeapObject* target_object = HeapObject::cast(*p); |
collector->RecordSlot(object, p, target_object); |
- MarkBit mark = Marking::MarkBitFrom(target_object); |
+ MarkBit mark = ObjectMarking::MarkBitFrom(target_object); |
collector->MarkObject(target_object, mark); |
} |
@@ -1191,10 +1151,10 @@ class MarkCompactMarkingVisitor |
#endif |
Map* map = obj->map(); |
Heap* heap = obj->GetHeap(); |
- MarkBit mark = Marking::MarkBitFrom(obj); |
+ MarkBit mark = ObjectMarking::MarkBitFrom(obj); |
heap->mark_compact_collector()->SetMark(obj, mark); |
// Mark the map pointer and the body. |
- MarkBit map_mark = Marking::MarkBitFrom(map); |
+ MarkBit map_mark = ObjectMarking::MarkBitFrom(map); |
heap->mark_compact_collector()->MarkObject(map, map_mark); |
IterateBody(map, obj); |
} |
@@ -1214,7 +1174,7 @@ class MarkCompactMarkingVisitor |
if (!o->IsHeapObject()) continue; |
collector->RecordSlot(object, p, o); |
HeapObject* obj = HeapObject::cast(o); |
- MarkBit mark = Marking::MarkBitFrom(obj); |
+ MarkBit mark = ObjectMarking::MarkBitFrom(obj); |
if (Marking::IsBlackOrGrey(mark)) continue; |
VisitUnmarkedObject(collector, obj); |
} |
@@ -1248,7 +1208,7 @@ class MarkCompactMarkingVisitor |
// was marked through the compilation cache before marker reached JSRegExp |
// object. |
FixedArray* data = FixedArray::cast(re->data()); |
- if (Marking::IsBlackOrGrey(Marking::MarkBitFrom(data))) { |
+ if (Marking::IsBlackOrGrey(ObjectMarking::MarkBitFrom(data))) { |
Object** slot = |
data->data_start() + JSRegExp::saved_code_index(is_one_byte); |
heap->mark_compact_collector()->RecordSlot(data, slot, code); |
@@ -1336,8 +1296,8 @@ class SharedFunctionInfoMarkingVisitor : public ObjectVisitor { |
Object* obj = *slot; |
if (obj->IsSharedFunctionInfo()) { |
SharedFunctionInfo* shared = reinterpret_cast<SharedFunctionInfo*>(obj); |
- MarkBit shared_mark = Marking::MarkBitFrom(shared); |
- MarkBit code_mark = Marking::MarkBitFrom(shared->code()); |
+ MarkBit shared_mark = ObjectMarking::MarkBitFrom(shared); |
+ MarkBit code_mark = ObjectMarking::MarkBitFrom(shared->code()); |
collector_->MarkObject(shared->code(), code_mark); |
collector_->MarkObject(shared, shared_mark); |
} |
@@ -1357,11 +1317,11 @@ void MarkCompactCollector::PrepareThreadForCodeFlushing(Isolate* isolate, |
// actual optimized code object. |
StackFrame* frame = it.frame(); |
Code* code = frame->unchecked_code(); |
- MarkBit code_mark = Marking::MarkBitFrom(code); |
+ MarkBit code_mark = ObjectMarking::MarkBitFrom(code); |
MarkObject(code, code_mark); |
if (frame->is_optimized()) { |
Code* optimized_code = frame->LookupCode(); |
- MarkBit optimized_code_mark = Marking::MarkBitFrom(optimized_code); |
+ MarkBit optimized_code_mark = ObjectMarking::MarkBitFrom(optimized_code); |
MarkObject(optimized_code, optimized_code_mark); |
} |
} |
@@ -1413,7 +1373,7 @@ class RootMarkingVisitor : public ObjectVisitor { |
HeapObject* object = HeapObject::cast(*p); |
- MarkBit mark_bit = Marking::MarkBitFrom(object); |
+ MarkBit mark_bit = ObjectMarking::MarkBitFrom(object); |
if (Marking::IsBlackOrGrey(mark_bit)) return; |
Map* map = object->map(); |
@@ -1421,7 +1381,7 @@ class RootMarkingVisitor : public ObjectVisitor { |
collector_->SetMark(object, mark_bit); |
// Mark the map pointer and body, and push them on the marking stack. |
- MarkBit map_mark = Marking::MarkBitFrom(map); |
+ MarkBit map_mark = ObjectMarking::MarkBitFrom(map); |
collector_->MarkObject(map, map_mark); |
MarkCompactMarkingVisitor::IterateBody(map, object); |
@@ -1449,7 +1409,7 @@ class StringTableCleaner : public ObjectVisitor { |
for (Object** p = start; p < end; p++) { |
Object* o = *p; |
if (o->IsHeapObject()) { |
- if (Marking::IsWhite(Marking::MarkBitFrom(HeapObject::cast(o)))) { |
+ if (Marking::IsWhite(ObjectMarking::MarkBitFrom(HeapObject::cast(o)))) { |
if (finalize_external_strings) { |
DCHECK(o->IsExternalString()); |
heap_->FinalizeExternalString(String::cast(*p)); |
@@ -1486,7 +1446,7 @@ typedef StringTableCleaner<true, false> ExternalStringTableCleaner; |
class MarkCompactWeakObjectRetainer : public WeakObjectRetainer { |
public: |
virtual Object* RetainAs(Object* object) { |
- MarkBit mark_bit = Marking::MarkBitFrom(HeapObject::cast(object)); |
+ MarkBit mark_bit = ObjectMarking::MarkBitFrom(HeapObject::cast(object)); |
DCHECK(!Marking::IsGrey(mark_bit)); |
if (Marking::IsBlack(mark_bit)) { |
return object; |
@@ -1516,7 +1476,7 @@ void MarkCompactCollector::DiscoverGreyObjectsWithIterator(T* it) { |
Map* filler_map = heap()->one_pointer_filler_map(); |
for (HeapObject* object = it->Next(); object != NULL; object = it->Next()) { |
- MarkBit markbit = Marking::MarkBitFrom(object); |
+ MarkBit markbit = ObjectMarking::MarkBitFrom(object); |
if ((object->map() != filler_map) && Marking::IsGrey(markbit)) { |
Marking::GreyToBlack(markbit); |
PushBlack(object); |
@@ -1530,7 +1490,7 @@ void MarkCompactCollector::DiscoverGreyObjectsOnPage(MemoryChunk* p) { |
LiveObjectIterator<kGreyObjects> it(p); |
HeapObject* object = NULL; |
while ((object = it.Next()) != NULL) { |
- MarkBit markbit = Marking::MarkBitFrom(object); |
+ MarkBit markbit = ObjectMarking::MarkBitFrom(object); |
DCHECK(Marking::IsGrey(markbit)); |
Marking::GreyToBlack(markbit); |
PushBlack(object); |
@@ -1976,7 +1936,7 @@ bool MarkCompactCollector::IsUnmarkedHeapObject(Object** p) { |
Object* o = *p; |
if (!o->IsHeapObject()) return false; |
HeapObject* heap_object = HeapObject::cast(o); |
- MarkBit mark = Marking::MarkBitFrom(heap_object); |
+ MarkBit mark = ObjectMarking::MarkBitFrom(heap_object); |
return Marking::IsWhite(mark); |
} |
@@ -1986,7 +1946,7 @@ bool MarkCompactCollector::IsUnmarkedHeapObjectWithHeap(Heap* heap, |
Object* o = *p; |
DCHECK(o->IsHeapObject()); |
HeapObject* heap_object = HeapObject::cast(o); |
- MarkBit mark = Marking::MarkBitFrom(heap_object); |
+ MarkBit mark = ObjectMarking::MarkBitFrom(heap_object); |
return Marking::IsWhite(mark); |
} |
@@ -1994,7 +1954,7 @@ bool MarkCompactCollector::IsUnmarkedHeapObjectWithHeap(Heap* heap, |
void MarkCompactCollector::MarkStringTable(RootMarkingVisitor* visitor) { |
StringTable* string_table = heap()->string_table(); |
// Mark the string table itself. |
- MarkBit string_table_mark = Marking::MarkBitFrom(string_table); |
+ MarkBit string_table_mark = ObjectMarking::MarkBitFrom(string_table); |
if (Marking::IsWhite(string_table_mark)) { |
// String table could have already been marked by visiting the handles list. |
SetMark(string_table, string_table_mark); |
@@ -2006,7 +1966,7 @@ void MarkCompactCollector::MarkStringTable(RootMarkingVisitor* visitor) { |
void MarkCompactCollector::MarkAllocationSite(AllocationSite* site) { |
- MarkBit mark_bit = Marking::MarkBitFrom(site); |
+ MarkBit mark_bit = ObjectMarking::MarkBitFrom(site); |
SetMark(site, mark_bit); |
} |
@@ -2073,9 +2033,9 @@ void MarkCompactCollector::EmptyMarkingDeque() { |
DCHECK(object->IsHeapObject()); |
DCHECK(heap()->Contains(object)); |
- DCHECK(!Marking::IsWhite(Marking::MarkBitFrom(object))); |
+ DCHECK(!Marking::IsWhite(ObjectMarking::MarkBitFrom(object))); |
- MarkBit map_mark = Marking::MarkBitFrom(map); |
+ MarkBit map_mark = ObjectMarking::MarkBitFrom(map); |
MarkObject(map, map_mark); |
MarkCompactMarkingVisitor::IterateBody(map, object); |
@@ -2278,7 +2238,7 @@ void MarkCompactCollector::RegisterExternallyReferencedObject(Object** object) { |
DCHECK(in_use()); |
HeapObject* heap_object = HeapObject::cast(*object); |
DCHECK(heap_->Contains(heap_object)); |
- MarkBit mark_bit = Marking::MarkBitFrom(heap_object); |
+ MarkBit mark_bit = ObjectMarking::MarkBitFrom(heap_object); |
MarkObject(heap_object, mark_bit); |
} |
@@ -2521,11 +2481,11 @@ void MarkCompactCollector::ClearSimpleMapTransitions( |
while (weak_cell_obj != Smi::FromInt(0)) { |
WeakCell* weak_cell = WeakCell::cast(weak_cell_obj); |
Map* map = Map::cast(weak_cell->value()); |
- DCHECK(Marking::IsWhite(Marking::MarkBitFrom(map))); |
+ DCHECK(Marking::IsWhite(ObjectMarking::MarkBitFrom(map))); |
Object* potential_parent = map->constructor_or_backpointer(); |
if (potential_parent->IsMap()) { |
Map* parent = Map::cast(potential_parent); |
- if (Marking::IsBlackOrGrey(Marking::MarkBitFrom(parent)) && |
+ if (Marking::IsBlackOrGrey(ObjectMarking::MarkBitFrom(parent)) && |
parent->raw_transitions() == weak_cell) { |
ClearSimpleMapTransition(parent, map); |
} |
@@ -2565,7 +2525,7 @@ void MarkCompactCollector::ClearFullMapTransitions() { |
Map* map = array->GetTarget(0); |
Map* parent = Map::cast(map->constructor_or_backpointer()); |
bool parent_is_alive = |
- Marking::IsBlackOrGrey(Marking::MarkBitFrom(parent)); |
+ Marking::IsBlackOrGrey(ObjectMarking::MarkBitFrom(parent)); |
DescriptorArray* descriptors = |
parent_is_alive ? parent->instance_descriptors() : nullptr; |
bool descriptors_owner_died = |
@@ -2590,7 +2550,7 @@ bool MarkCompactCollector::CompactTransitionArray( |
for (int i = 0; i < num_transitions; ++i) { |
Map* target = transitions->GetTarget(i); |
DCHECK_EQ(target->constructor_or_backpointer(), map); |
- if (Marking::IsWhite(Marking::MarkBitFrom(target))) { |
+ if (Marking::IsWhite(ObjectMarking::MarkBitFrom(target))) { |
if (descriptors != nullptr && |
target->instance_descriptors() == descriptors) { |
descriptors_owner_died = true; |
@@ -2767,7 +2727,7 @@ void MarkCompactCollector::ClearWeakCells(Object** non_live_map_list, |
if (cell_value->IsHeapObject() && |
MarkCompactCollector::IsMarked(HeapObject::cast(cell_value))) { |
// Resurrect the cell. |
- MarkBit mark = Marking::MarkBitFrom(value); |
+ MarkBit mark = ObjectMarking::MarkBitFrom(value); |
SetMark(value, mark); |
Object** slot = HeapObject::RawField(value, Cell::kValueOffset); |
RecordSlot(value, slot, *slot); |
@@ -3002,7 +2962,7 @@ bool MarkCompactCollector::IsSlotInBlackObject(MemoryChunk* p, Address slot) { |
Bitmap::kBitsPerCell * kPointerSize; |
Address address = base_address + offset * kPointerSize; |
HeapObject* object = HeapObject::FromAddress(address); |
- CHECK(Marking::IsBlack(Marking::MarkBitFrom(object))); |
+ CHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(object))); |
CHECK(object->address() < reinterpret_cast<Address>(slot)); |
if ((object->address() + kPointerSize) <= slot && |
(object->address() + object->Size()) > slot) { |
@@ -3414,7 +3374,7 @@ int MarkCompactCollector::Sweeper::RawSweep( |
LiveObjectIterator<kBlackObjects> it(p); |
HeapObject* object = NULL; |
while ((object = it.Next()) != NULL) { |
- DCHECK(Marking::IsBlack(Marking::MarkBitFrom(object))); |
+ DCHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(object))); |
Address free_end = object->address(); |
if (free_end != free_start) { |
int size = static_cast<int>(free_end - free_start); |
@@ -3445,7 +3405,7 @@ int MarkCompactCollector::Sweeper::RawSweep( |
} |
// Clear the mark bits of that page and reset live bytes count. |
- Bitmap::Clear(p); |
+ p->ClearLiveness(); |
if (free_start != p->area_end()) { |
int size = static_cast<int>(p->area_end() - free_start); |
@@ -3478,7 +3438,7 @@ void MarkCompactCollector::InvalidateCode(Code* code) { |
DCHECK(compacting_); |
// If the object is white than no slots were recorded on it yet. |
- MarkBit mark_bit = Marking::MarkBitFrom(code); |
+ MarkBit mark_bit = ObjectMarking::MarkBitFrom(code); |
if (Marking::IsWhite(mark_bit)) return; |
// Ignore all slots that might have been recorded in the body of the |
@@ -3500,7 +3460,7 @@ static void VerifyAllBlackObjects(MemoryChunk* page) { |
LiveObjectIterator<kAllLiveObjects> it(page); |
HeapObject* object = NULL; |
while ((object = it.Next()) != NULL) { |
- CHECK(Marking::IsBlack(Marking::MarkBitFrom(object))); |
+ CHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(object))); |
} |
} |
#endif // VERIFY_HEAP |
@@ -3515,7 +3475,7 @@ bool MarkCompactCollector::VisitLiveObjects(MemoryChunk* page, Visitor* visitor, |
LiveObjectIterator<kBlackObjects> it(page); |
HeapObject* object = nullptr; |
while ((object = it.Next()) != nullptr) { |
- DCHECK(Marking::IsBlack(Marking::MarkBitFrom(object))); |
+ DCHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(object))); |
if (!visitor->Visit(object)) { |
if (mode == kClearMarkbits) { |
page->markbits()->ClearRange( |
@@ -3535,7 +3495,7 @@ bool MarkCompactCollector::VisitLiveObjects(MemoryChunk* page, Visitor* visitor, |
} |
} |
if (mode == kClearMarkbits) { |
- Bitmap::Clear(page); |
+ page->ClearLiveness(); |
} |
return true; |
} |
@@ -3561,7 +3521,7 @@ void MarkCompactCollector::VisitLiveObjectsBody(Page* page, |
LiveObjectIterator<kBlackObjects> it(page); |
HeapObject* object = NULL; |
while ((object = it.Next()) != NULL) { |
- DCHECK(Marking::IsBlack(Marking::MarkBitFrom(object))); |
+ DCHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(object))); |
Map* map = object->synchronized_map(); |
int size = object->SizeFromMap(map); |
object->IterateBody(map->instance_type(), size, visitor); |
@@ -3715,7 +3675,7 @@ class PointerUpdateJobTraits { |
// there is no forwarding information present we need to check the |
// markbits to determine liveness. |
if (Marking::IsBlack( |
- Marking::MarkBitFrom(reinterpret_cast<HeapObject*>(*slot)))) |
+ ObjectMarking::MarkBitFrom(reinterpret_cast<HeapObject*>(*slot)))) |
return KEEP_SLOT; |
} else { |
DCHECK(!heap->InNewSpace(*slot)); |
@@ -3961,7 +3921,7 @@ void MarkCompactCollector::StartSweepSpace(PagedSpace* space) { |
// We can not sweep black pages, since all mark bits are set for these |
// pages. |
if (p->IsFlagSet(Page::BLACK_PAGE)) { |
- Bitmap::Clear(p); |
+ p->ClearLiveness(); |
p->concurrent_sweeping_state().SetValue(Page::kSweepingDone); |
p->ClearFlag(Page::BLACK_PAGE); |
// Area above the high watermark is free. |
@@ -4080,7 +4040,7 @@ void MarkCompactCollector::RecordCodeTargetPatch(Address pc, Code* target) { |
Code* host = |
isolate()->inner_pointer_to_code_cache()->GcSafeFindCodeForInnerPointer( |
pc); |
- MarkBit mark_bit = Marking::MarkBitFrom(host); |
+ MarkBit mark_bit = ObjectMarking::MarkBitFrom(host); |
if (Marking::IsBlack(mark_bit)) { |
RelocInfo rinfo(isolate(), pc, RelocInfo::CODE_TARGET, 0, host); |
// The target is always in old space, we don't have to record the slot in |