| Index: src/mark-compact-inl.h
|
| diff --git a/src/mark-compact-inl.h b/src/mark-compact-inl.h
|
| index faa75b632a905b769f967b5149a45c45d74b494a..2f7e31fea53571fa1c21c8b764c1decdadfe9103 100644
|
| --- a/src/mark-compact-inl.h
|
| +++ b/src/mark-compact-inl.h
|
| @@ -52,23 +52,43 @@ void MarkCompactCollector::SetFlags(int flags) {
|
| }
|
|
|
|
|
| +bool MarkCompactCollector::MarkObjectAndPush(HeapObject* obj) {
|
| + if (MarkObjectWithoutPush(obj)) {
|
| + marking_deque_.PushBlack(obj);
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +
|
| void MarkCompactCollector::MarkObject(HeapObject* obj, MarkBit mark_bit) {
|
| ASSERT(Marking::MarkBitFrom(obj) == mark_bit);
|
| if (!mark_bit.Get()) {
|
| mark_bit.Set();
|
| MemoryChunk::IncrementLiveBytesFromGC(obj->address(), obj->Size());
|
| - ASSERT(IsMarked(obj));
|
| - ASSERT(HEAP->Contains(obj));
|
| - marking_deque_.PushBlack(obj);
|
| + ProcessNewlyMarkedObject(obj);
|
| }
|
| }
|
|
|
|
|
| +bool MarkCompactCollector::MarkObjectWithoutPush(HeapObject* obj) {
|
| + MarkBit mark_bit = Marking::MarkBitFrom(obj);
|
| + if (!mark_bit.Get()) {
|
| + SetMark(obj, mark_bit);
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +
|
| void MarkCompactCollector::SetMark(HeapObject* obj, MarkBit mark_bit) {
|
| ASSERT(!mark_bit.Get());
|
| ASSERT(Marking::MarkBitFrom(obj) == mark_bit);
|
| mark_bit.Set();
|
| MemoryChunk::IncrementLiveBytesFromGC(obj->address(), obj->Size());
|
| + if (obj->IsMap()) {
|
| + heap_->ClearCacheOnMap(Map::cast(obj));
|
| + }
|
| }
|
|
|
|
|
| @@ -83,9 +103,6 @@ void MarkCompactCollector::RecordSlot(Object** anchor_slot,
|
| Object** slot,
|
| Object* object) {
|
| Page* object_page = Page::FromAddress(reinterpret_cast<Address>(object));
|
| - // Ensure the anchor slot is on the first 'page' of a large object.
|
| - ASSERT(Page::FromAddress(reinterpret_cast<Address>(anchor_slot))->owner() !=
|
| - NULL);
|
| if (object_page->IsEvacuationCandidate() &&
|
| !ShouldSkipEvacuationSlotRecording(anchor_slot)) {
|
| if (!SlotsBuffer::AddTo(&slots_buffer_allocator_,
|
|
|