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:
parent
ba8a7f374e
commit
4deaad3ccc
@ -517,7 +517,11 @@ void IncrementalMarking::UpdateMarkingDequeAfterScavenge() {
|
|||||||
array[new_top] = dest;
|
array[new_top] = dest;
|
||||||
new_top = ((new_top + 1) & mask);
|
new_top = ((new_top + 1) & mask);
|
||||||
ASSERT(new_top != marking_deque_.bottom());
|
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) {
|
} else if (obj->map() != filler_map) {
|
||||||
// Skip one word filler objects that appear on the
|
// Skip one word filler objects that appear on the
|
||||||
@ -525,7 +529,11 @@ void IncrementalMarking::UpdateMarkingDequeAfterScavenge() {
|
|||||||
array[new_top] = obj;
|
array[new_top] = obj;
|
||||||
new_top = ((new_top + 1) & mask);
|
new_top = ((new_top + 1) & mask);
|
||||||
ASSERT(new_top != marking_deque_.bottom());
|
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);
|
marking_deque_.set_top(new_top);
|
||||||
@ -710,7 +718,6 @@ void IncrementalMarking::Step(intptr_t allocated_bytes) {
|
|||||||
Map* map = obj->map();
|
Map* map = obj->map();
|
||||||
if (map == filler_map) continue;
|
if (map == filler_map) continue;
|
||||||
|
|
||||||
ASSERT(Marking::IsGrey(Marking::MarkBitFrom(obj)));
|
|
||||||
int size = obj->SizeFromMap(map);
|
int size = obj->SizeFromMap(map);
|
||||||
bytes_to_process -= size;
|
bytes_to_process -= size;
|
||||||
MarkBit map_mark_bit = Marking::MarkBitFrom(map);
|
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);
|
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);
|
Marking::MarkBlack(obj_mark_bit);
|
||||||
MemoryChunk::IncrementLiveBytes(obj->address(), size);
|
MemoryChunk::IncrementLiveBytes(obj->address(), size);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user