| 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;
|
|
|