Index: src/heap/heap-inl.h |
diff --git a/src/heap/heap-inl.h b/src/heap/heap-inl.h |
index f9c9235320b25df45a116cd08fd04fe7b4692451..052eda88be369f89326aa85e5b772095c7b37ff7 100644 |
--- a/src/heap/heap-inl.h |
+++ b/src/heap/heap-inl.h |
@@ -393,14 +393,30 @@ bool Heap::OldGenerationAllocationLimitReached() { |
return OldGenerationSpaceAvailable() < 0; |
} |
- |
+template <PromotionMode promotion_mode> |
bool Heap::ShouldBePromoted(Address old_address, int object_size) { |
Page* page = Page::FromAddress(old_address); |
Address age_mark = new_space_.age_mark(); |
+ |
+ if (promotion_mode == PROMOTE_MARKED) { |
+ MarkBit mark_bit = Marking::MarkBitFrom(old_address); |
+ if (!Marking::IsWhite(mark_bit)) { |
+ return true; |
+ } |
+ } |
+ |
return page->IsFlagSet(MemoryChunk::NEW_SPACE_BELOW_AGE_MARK) && |
(!page->ContainsLimit(age_mark) || old_address < age_mark); |
} |
+PromotionMode Heap::CurrentPromotionMode() { |
+ if (incremental_marking()->IsMarking()) { |
+ return PROMOTE_MARKED; |
+ } else { |
+ return DEFAULT_PROMOTION; |
+ } |
+} |
+ |
void Heap::RecordWrite(Object* object, int offset, Object* o) { |
if (!InNewSpace(o) || !object->IsHeapObject() || InNewSpace(object)) { |
return; |