Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(521)

Unified Diff: src/incremental-marking.h

Issue 6715028: Preserve marking bits across scavenges if incremental marker is running. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/gc
Patch Set: fix bugs introduced by merge Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/heap.cc ('K') | « src/heap.cc ('k') | src/incremental-marking.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_;
« src/heap.cc ('K') | « src/heap.cc ('k') | src/incremental-marking.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698