| Index: src/incremental-marking.cc
|
| ===================================================================
|
| --- src/incremental-marking.cc (revision 9808)
|
| +++ src/incremental-marking.cc (working copy)
|
| @@ -50,7 +50,8 @@
|
| steps_took_since_last_gc_(0),
|
| should_hurry_(false),
|
| allocation_marking_factor_(0),
|
| - allocated_(0) {
|
| + allocated_(0),
|
| + no_marking_scope_depth_(0) {
|
| }
|
|
|
|
|
| @@ -87,6 +88,16 @@
|
| }
|
|
|
|
|
| +void IncrementalMarking::RecordCodeTargetPatch(Code* host,
|
| + Address pc,
|
| + HeapObject* value) {
|
| + if (IsMarking()) {
|
| + RelocInfo rinfo(pc, RelocInfo::CODE_TARGET, 0, host);
|
| + RecordWriteIntoCode(host, &rinfo, value);
|
| + }
|
| +}
|
| +
|
| +
|
| void IncrementalMarking::RecordCodeTargetPatch(Address pc, HeapObject* value) {
|
| if (IsMarking()) {
|
| Code* host = heap_->isolate()->inner_pointer_to_code_cache()->
|
| @@ -343,7 +354,8 @@
|
| static const intptr_t kActivationThreshold = 0;
|
| #endif
|
|
|
| - return FLAG_incremental_marking &&
|
| + return !FLAG_expose_gc &&
|
| + FLAG_incremental_marking &&
|
| !Serializer::enabled() &&
|
| heap_->PromotedSpaceSize() > kActivationThreshold;
|
| }
|
| @@ -461,7 +473,9 @@
|
|
|
| #ifdef DEBUG
|
| // Marking bits are cleared by the sweeper.
|
| - heap_->mark_compact_collector()->VerifyMarkbitsAreClean();
|
| + if (FLAG_verify_heap) {
|
| + heap_->mark_compact_collector()->VerifyMarkbitsAreClean();
|
| + }
|
| #endif
|
|
|
| heap_->CompletelyClearInstanceofCache();
|
| @@ -692,6 +706,8 @@
|
|
|
| if (allocated_ < kAllocatedThreshold) return;
|
|
|
| + if (state_ == MARKING && no_marking_scope_depth_ > 0) return;
|
| +
|
| intptr_t bytes_to_process = allocated_ * allocation_marking_factor_;
|
|
|
| double start = 0;
|
| @@ -739,8 +755,8 @@
|
| }
|
|
|
| MarkBit obj_mark_bit = Marking::MarkBitFrom(obj);
|
| - ASSERT(Marking::IsGrey(obj_mark_bit) ||
|
| - (obj->IsFiller() && Marking::IsWhite(obj_mark_bit)));
|
| + SLOW_ASSERT(Marking::IsGrey(obj_mark_bit) ||
|
| + (obj->IsFiller() && Marking::IsWhite(obj_mark_bit)));
|
| Marking::MarkBlack(obj_mark_bit);
|
| MemoryChunk::IncrementLiveBytes(obj->address(), size);
|
| }
|
|
|