Chromium Code Reviews| Index: src/incremental-marking-inl.h |
| diff --git a/src/incremental-marking-inl.h b/src/incremental-marking-inl.h |
| index c82d67845622451f958950b75a3445429d4cf8aa..2185153bdd04b2146536dd0569cf1560f65dd8b3 100644 |
| --- a/src/incremental-marking-inl.h |
| +++ b/src/incremental-marking-inl.h |
| @@ -34,7 +34,9 @@ namespace v8 { |
| namespace internal { |
| -void IncrementalMarking::RecordWrite(HeapObject* obj, Object* value) { |
| +void IncrementalMarking::RecordWrite(HeapObject* obj, |
| + Object** slot, |
| + Object* value) { |
| if (IsMarking() && value->IsHeapObject()) { |
| MarkBit value_bit = Marking::MarkBitFrom(HeapObject::cast(value)); |
| if (Marking::IsWhite(value_bit)) { |
| @@ -43,6 +45,18 @@ void IncrementalMarking::RecordWrite(HeapObject* obj, Object* value) { |
| BlackToGreyAndUnshift(obj, obj_bit); |
| RestartIfNotMarking(); |
| } |
| + |
| + // Object is either grey or white it will be scanned if survives. |
| + return; |
| + } |
| + |
| + if (is_compacting_ && slot != NULL) { |
| + MarkBit obj_bit = Marking::MarkBitFrom(obj); |
| + if (Marking::IsBlack(obj_bit)) { |
| + // Object is not going to be rescaned we need to record slot. |
|
Erik Corry
2011/07/04 11:04:11
rescaned -> rescanned,
slot -> the slot
Vyacheslav Egorov (Chromium)
2011/08/05 12:50:28
Done.
|
| + heap_->mark_compact_collector()->RecordSlot( |
| + HeapObject::RawField(obj, 0), slot, value); |
| + } |
| } |
| } |
| } |
| @@ -50,6 +64,8 @@ void IncrementalMarking::RecordWrite(HeapObject* obj, Object* value) { |
| void IncrementalMarking::RecordWriteOf(HeapObject* value) { |
| if (IsMarking()) { |
| + ASSERT(!MarkCompactCollector::IsOnEvacuationCandidate(value)); |
| + |
| MarkBit value_bit = Marking::MarkBitFrom(value); |
| if (Marking::IsWhite(value_bit)) { |
| WhiteToGreyAndPush(value, value_bit); |