Adjust assertions in the incremental marking.

Now we are completely transfering marks when shifting arrays in-place.

This might lead to white free space objects in the marking deque.

R=mstarzinger@chromium.org

Review URL: http://codereview.chromium.org/8230009

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9580 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
vegorov@chromium.org 2011-10-11 11:38:00 +00:00
parent ba8a7f374e
commit 4deaad3ccc

View File

@ -517,7 +517,11 @@ void IncrementalMarking::UpdateMarkingDequeAfterScavenge() {
array[new_top] = dest;
new_top = ((new_top + 1) & mask);
ASSERT(new_top != marking_deque_.bottom());
ASSERT(Marking::IsGrey(Marking::MarkBitFrom(obj)));
#ifdef DEBUG
MarkBit mark_bit = Marking::MarkBitFrom(obj);
ASSERT(Marking::IsGrey(mark_bit) ||
(obj->IsFiller() && Marking::IsWhite(mark_bit)));
#endif
}
} else if (obj->map() != filler_map) {
// Skip one word filler objects that appear on the
@ -525,7 +529,11 @@ void IncrementalMarking::UpdateMarkingDequeAfterScavenge() {
array[new_top] = obj;
new_top = ((new_top + 1) & mask);
ASSERT(new_top != marking_deque_.bottom());
ASSERT(Marking::IsGrey(Marking::MarkBitFrom(obj)));
#ifdef DEBUG
MarkBit mark_bit = Marking::MarkBitFrom(obj);
ASSERT(Marking::IsGrey(mark_bit) ||
(obj->IsFiller() && Marking::IsWhite(mark_bit)));
#endif
}
}
marking_deque_.set_top(new_top);
@ -710,7 +718,6 @@ void IncrementalMarking::Step(intptr_t allocated_bytes) {
Map* map = obj->map();
if (map == filler_map) continue;
ASSERT(Marking::IsGrey(Marking::MarkBitFrom(obj)));
int size = obj->SizeFromMap(map);
bytes_to_process -= size;
MarkBit map_mark_bit = Marking::MarkBitFrom(map);
@ -733,7 +740,8 @@ void IncrementalMarking::Step(intptr_t allocated_bytes) {
}
MarkBit obj_mark_bit = Marking::MarkBitFrom(obj);
ASSERT(!Marking::IsBlack(obj_mark_bit));
ASSERT(Marking::IsGrey(obj_mark_bit) ||
(obj->IsFiller() && Marking::IsWhite(obj_mark_bit)));
Marking::MarkBlack(obj_mark_bit);
MemoryChunk::IncrementLiveBytes(obj->address(), size);
}