[heap] Unify MarkingDeque push and unshift operations.

R=hpayer@chromium.org

Review URL: https://codereview.chromium.org/1294093003

Cr-Commit-Position: refs/heads/master@{#30202}
This commit is contained in:
mstarzinger 2015-08-17 09:58:16 -07:00 committed by Commit bot
parent 76dc58c936
commit 26241740bb
5 changed files with 14 additions and 31 deletions

View File

@ -105,13 +105,13 @@ void IncrementalMarking::BlackToGreyAndUnshift(HeapObject* obj,
}
}
heap_->mark_compact_collector()->marking_deque()->UnshiftGrey(obj);
heap_->mark_compact_collector()->marking_deque()->Unshift(obj);
}
void IncrementalMarking::WhiteToGreyAndPush(HeapObject* obj, MarkBit mark_bit) {
Marking::WhiteToGrey(mark_bit);
heap_->mark_compact_collector()->marking_deque()->PushGrey(obj);
heap_->mark_compact_collector()->marking_deque()->Push(obj);
}
}
} // namespace v8::internal

View File

@ -197,7 +197,7 @@ class IncrementalMarkingMarkingVisitor
chunk->set_progress_bar(start_offset);
if (start_offset < object_size) {
if (Marking::IsGrey(Marking::MarkBitFrom(object))) {
heap->mark_compact_collector()->marking_deque()->UnshiftGrey(object);
heap->mark_compact_collector()->marking_deque()->Unshift(object);
} else {
DCHECK(Marking::IsBlack(Marking::MarkBitFrom(object)));
heap->mark_compact_collector()->UnshiftBlack(object);

View File

@ -23,7 +23,8 @@ void MarkCompactCollector::SetFlags(int flags) {
void MarkCompactCollector::PushBlack(HeapObject* obj) {
if (marking_deque_.PushBlack(obj)) {
DCHECK(Marking::IsBlack(Marking::MarkBitFrom(obj)));
if (marking_deque_.Push(obj)) {
MemoryChunk::IncrementLiveBytesFromGC(obj, obj->Size());
} else {
Marking::BlackToGrey(obj);
@ -32,7 +33,8 @@ void MarkCompactCollector::PushBlack(HeapObject* obj) {
void MarkCompactCollector::UnshiftBlack(HeapObject* obj) {
if (!marking_deque_.UnshiftBlack(obj)) {
DCHECK(Marking::IsBlack(Marking::MarkBitFrom(obj)));
if (!marking_deque_.Unshift(obj)) {
MemoryChunk::IncrementLiveBytesFromGC(obj, -obj->Size());
Marking::BlackToGrey(obj);
}

View File

@ -205,9 +205,9 @@ class MarkingDeque {
void SetOverflowed() { overflowed_ = true; }
// Push the (marked) object on the marking stack if there is room, otherwise
// mark the deque as overflowed and wait for a rescan of the heap.
INLINE(bool PushBlack(HeapObject* object)) {
// Push the object on the marking stack if there is room, otherwise mark the
// deque as overflowed and wait for a rescan of the heap.
INLINE(bool Push(HeapObject* object)) {
DCHECK(object->IsHeapObject());
if (IsFull()) {
SetOverflowed();
@ -219,16 +219,6 @@ class MarkingDeque {
}
}
INLINE(void PushGrey(HeapObject* object)) {
DCHECK(object->IsHeapObject());
if (IsFull()) {
SetOverflowed();
} else {
array_[top_] = object;
top_ = ((top_ + 1) & mask_);
}
}
INLINE(HeapObject* Pop()) {
DCHECK(!IsEmpty());
top_ = ((top_ - 1) & mask_);
@ -237,19 +227,10 @@ class MarkingDeque {
return object;
}
INLINE(void UnshiftGrey(HeapObject* object)) {
// Unshift the object into the marking stack if there is room, otherwise mark
// the deque as overflowed and wait for a rescan of the heap.
INLINE(bool Unshift(HeapObject* object)) {
DCHECK(object->IsHeapObject());
if (IsFull()) {
SetOverflowed();
} else {
bottom_ = ((bottom_ - 1) & mask_);
array_[bottom_] = object;
}
}
INLINE(bool UnshiftBlack(HeapObject* object)) {
DCHECK(object->IsHeapObject());
DCHECK(Marking::IsBlack(Marking::MarkBitFrom(object)));
if (IsFull()) {
SetOverflowed();
return false;

View File

@ -59,7 +59,7 @@ TEST(MarkingDeque) {
Address original_address = reinterpret_cast<Address>(&s);
Address current_address = original_address;
while (!s.IsFull()) {
s.PushBlack(HeapObject::FromAddress(current_address));
s.Push(HeapObject::FromAddress(current_address));
current_address += kPointerSize;
}