| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "src/heap/incremental-marking.h" | 5 #include "src/heap/incremental-marking.h" | 
| 6 | 6 | 
| 7 #include "src/code-stubs.h" | 7 #include "src/code-stubs.h" | 
| 8 #include "src/compilation-cache.h" | 8 #include "src/compilation-cache.h" | 
| 9 #include "src/conversions.h" | 9 #include "src/conversions.h" | 
| 10 #include "src/heap/gc-tracer.h" | 10 #include "src/heap/gc-tracer.h" | 
| (...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 479 | 479 | 
| 480   if (!heap_->mark_compact_collector()->sweeping_in_progress()) { | 480   if (!heap_->mark_compact_collector()->sweeping_in_progress()) { | 
| 481     StartMarking(); | 481     StartMarking(); | 
| 482   } else { | 482   } else { | 
| 483     if (FLAG_trace_incremental_marking) { | 483     if (FLAG_trace_incremental_marking) { | 
| 484       PrintF("[IncrementalMarking] Start sweeping.\n"); | 484       PrintF("[IncrementalMarking] Start sweeping.\n"); | 
| 485     } | 485     } | 
| 486     state_ = SWEEPING; | 486     state_ = SWEEPING; | 
| 487   } | 487   } | 
| 488 | 488 | 
| 489   heap_->new_space()->LowerInlineAllocationLimit(kAllocatedThreshold); | 489   heap_->LowerInlineAllocationLimit(kAllocatedThreshold); | 
| 490   incremental_marking_job()->Start(heap_); | 490   incremental_marking_job()->Start(heap_); | 
| 491 } | 491 } | 
| 492 | 492 | 
| 493 | 493 | 
| 494 void IncrementalMarking::StartMarking() { | 494 void IncrementalMarking::StartMarking() { | 
| 495   if (FLAG_trace_incremental_marking) { | 495   if (FLAG_trace_incremental_marking) { | 
| 496     PrintF("[IncrementalMarking] Start marking\n"); | 496     PrintF("[IncrementalMarking] Start marking\n"); | 
| 497   } | 497   } | 
| 498 | 498 | 
| 499   is_compacting_ = !FLAG_never_compact && | 499   is_compacting_ = !FLAG_never_compact && | 
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 731     context = Context::cast(context)->get(Context::NEXT_CONTEXT_LINK); | 731     context = Context::cast(context)->get(Context::NEXT_CONTEXT_LINK); | 
| 732   } | 732   } | 
| 733 } | 733 } | 
| 734 | 734 | 
| 735 | 735 | 
| 736 void IncrementalMarking::Stop() { | 736 void IncrementalMarking::Stop() { | 
| 737   if (IsStopped()) return; | 737   if (IsStopped()) return; | 
| 738   if (FLAG_trace_incremental_marking) { | 738   if (FLAG_trace_incremental_marking) { | 
| 739     PrintF("[IncrementalMarking] Stopping.\n"); | 739     PrintF("[IncrementalMarking] Stopping.\n"); | 
| 740   } | 740   } | 
| 741   heap_->new_space()->LowerInlineAllocationLimit(0); | 741   heap_->ResetInlineAllocationLimit(); | 
| 742   IncrementalMarking::set_should_hurry(false); | 742   IncrementalMarking::set_should_hurry(false); | 
| 743   ResetStepCounters(); | 743   ResetStepCounters(); | 
| 744   if (IsMarking()) { | 744   if (IsMarking()) { | 
| 745     PatchIncrementalMarkingRecordWriteStubs(heap_, | 745     PatchIncrementalMarkingRecordWriteStubs(heap_, | 
| 746                                             RecordWriteStub::STORE_BUFFER_ONLY); | 746                                             RecordWriteStub::STORE_BUFFER_ONLY); | 
| 747     DeactivateIncrementalWriteBarrier(); | 747     DeactivateIncrementalWriteBarrier(); | 
| 748 | 748 | 
| 749     if (is_compacting_) { | 749     if (is_compacting_) { | 
| 750       LargeObjectIterator it(heap_->lo_space()); | 750       LargeObjectIterator it(heap_->lo_space()); | 
| 751       for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) { | 751       for (HeapObject* obj = it.Next(); obj != NULL; obj = it.Next()) { | 
| 752         Page* p = Page::FromAddress(obj->address()); | 752         Page* p = Page::FromAddress(obj->address()); | 
| 753         if (p->IsFlagSet(Page::RESCAN_ON_EVACUATION)) { | 753         if (p->IsFlagSet(Page::RESCAN_ON_EVACUATION)) { | 
| 754           p->ClearFlag(Page::RESCAN_ON_EVACUATION); | 754           p->ClearFlag(Page::RESCAN_ON_EVACUATION); | 
| 755         } | 755         } | 
| 756       } | 756       } | 
| 757     } | 757     } | 
| 758   } | 758   } | 
| 759   heap_->isolate()->stack_guard()->ClearGC(); | 759   heap_->isolate()->stack_guard()->ClearGC(); | 
| 760   state_ = STOPPED; | 760   state_ = STOPPED; | 
| 761   is_compacting_ = false; | 761   is_compacting_ = false; | 
| 762 } | 762 } | 
| 763 | 763 | 
| 764 | 764 | 
| 765 void IncrementalMarking::Finalize() { | 765 void IncrementalMarking::Finalize() { | 
| 766   Hurry(); | 766   Hurry(); | 
| 767   state_ = STOPPED; | 767   state_ = STOPPED; | 
| 768   is_compacting_ = false; | 768   is_compacting_ = false; | 
| 769   heap_->new_space()->LowerInlineAllocationLimit(0); | 769   heap_->ResetInlineAllocationLimit(); | 
| 770   IncrementalMarking::set_should_hurry(false); | 770   IncrementalMarking::set_should_hurry(false); | 
| 771   ResetStepCounters(); | 771   ResetStepCounters(); | 
| 772   PatchIncrementalMarkingRecordWriteStubs(heap_, | 772   PatchIncrementalMarkingRecordWriteStubs(heap_, | 
| 773                                           RecordWriteStub::STORE_BUFFER_ONLY); | 773                                           RecordWriteStub::STORE_BUFFER_ONLY); | 
| 774   DeactivateIncrementalWriteBarrier(); | 774   DeactivateIncrementalWriteBarrier(); | 
| 775   DCHECK(heap_->mark_compact_collector()->marking_deque()->IsEmpty()); | 775   DCHECK(heap_->mark_compact_collector()->marking_deque()->IsEmpty()); | 
| 776   heap_->isolate()->stack_guard()->ClearGC(); | 776   heap_->isolate()->stack_guard()->ClearGC(); | 
| 777 } | 777 } | 
| 778 | 778 | 
| 779 | 779 | 
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1016 void IncrementalMarking::IncrementIdleMarkingDelayCounter() { | 1016 void IncrementalMarking::IncrementIdleMarkingDelayCounter() { | 
| 1017   idle_marking_delay_counter_++; | 1017   idle_marking_delay_counter_++; | 
| 1018 } | 1018 } | 
| 1019 | 1019 | 
| 1020 | 1020 | 
| 1021 void IncrementalMarking::ClearIdleMarkingDelayCounter() { | 1021 void IncrementalMarking::ClearIdleMarkingDelayCounter() { | 
| 1022   idle_marking_delay_counter_ = 0; | 1022   idle_marking_delay_counter_ = 0; | 
| 1023 } | 1023 } | 
| 1024 }  // namespace internal | 1024 }  // namespace internal | 
| 1025 }  // namespace v8 | 1025 }  // namespace v8 | 
| OLD | NEW | 
|---|