| Index: src/incremental-marking.h
|
| diff --git a/src/incremental-marking.h b/src/incremental-marking.h
|
| index 98a87e0bd83f5b9c9d157ab34a89e4c92a101833..122f53771488084e3b847a929ea70f6d05455017 100644
|
| --- a/src/incremental-marking.h
|
| +++ b/src/incremental-marking.h
|
| @@ -58,6 +58,10 @@ class IncrementalMarking : public AllStatic {
|
|
|
| static void Stop();
|
|
|
| + static void PrepareForScavenge();
|
| +
|
| + static void UpdateMarkingStackAfterScavenge();
|
| +
|
| static void Hurry();
|
|
|
| static void Finalize();
|
| @@ -160,6 +164,16 @@ class IncrementalMarking : public AllStatic {
|
| ASSERT(!marking_stack_.overflowed());
|
| }
|
|
|
| + static inline void MarkWhiteObjectGrey(HeapObject* obj, MarkBit mark_bit) {
|
| + ASSERT(Marking::MarkBitFrom(obj) == mark_bit);
|
| + ASSERT(obj->Size() >= 2*kPointerSize);
|
| + ASSERT(!IsStopped());
|
| + ASSERT(IsWhite(mark_bit));
|
| + mark_bit.Set();
|
| + mark_bit.Next().Set();
|
| + ASSERT(IsGrey(mark_bit));
|
| + }
|
| +
|
| static inline void MarkBlack(MarkBit mark_bit) {
|
| mark_bit.Set();
|
| mark_bit.Next().Clear();
|
| @@ -174,6 +188,22 @@ class IncrementalMarking : public AllStatic {
|
| return "???";
|
| }
|
|
|
| + enum ObjectColor {
|
| + BLACK_OBJECT,
|
| + WHITE_OBJECT,
|
| + GREY_OBJECT,
|
| + IMPOSSIBLE_COLOR
|
| + };
|
| +
|
| + static inline ObjectColor Color(HeapObject* obj) {
|
| + MarkBit mark_bit = Marking::MarkBitFrom(obj);
|
| + if (IsBlack(mark_bit)) return BLACK_OBJECT;
|
| + if (IsWhite(mark_bit)) return WHITE_OBJECT;
|
| + if (IsGrey(mark_bit)) return GREY_OBJECT;
|
| + UNREACHABLE();
|
| + return IMPOSSIBLE_COLOR;
|
| + }
|
| +
|
| private:
|
| static State state_;
|
| static MarkingStack marking_stack_;
|
|
|