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/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/heap/incremental-marking.h" | 7 #include "src/heap/incremental-marking.h" |
8 | 8 |
9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
10 #include "src/compilation-cache.h" | 10 #include "src/compilation-cache.h" |
(...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
818 | 818 |
819 | 819 |
820 void IncrementalMarking::Epilogue() { | 820 void IncrementalMarking::Epilogue() { |
821 was_activated_ = false; | 821 was_activated_ = false; |
822 weak_closure_was_overapproximated_ = false; | 822 weak_closure_was_overapproximated_ = false; |
823 weak_closure_approximation_rounds_ = 0; | 823 weak_closure_approximation_rounds_ = 0; |
824 } | 824 } |
825 | 825 |
826 | 826 |
827 void IncrementalMarking::OldSpaceStep(intptr_t allocated) { | 827 void IncrementalMarking::OldSpaceStep(intptr_t allocated) { |
| 828 // If we are stressing the GC, then always return the bump allocation area to |
| 829 // the free list here, which will cause a crash if the top and limit are not |
| 830 // up to date. |
| 831 if (FLAG_gc_interval != -1) { |
| 832 heap()->old_space()->ReturnLinearAllocationAreaToFreeList(); |
| 833 } |
828 if (IsStopped() && ShouldActivateEvenWithoutIdleNotification()) { | 834 if (IsStopped() && ShouldActivateEvenWithoutIdleNotification()) { |
829 Start(Heap::kNoGCFlags); | 835 Start(Heap::kNoGCFlags); |
830 } else { | 836 } else { |
831 Step(allocated * kFastMarking / kInitialMarkingSpeed, GC_VIA_STACK_GUARD); | 837 Step(allocated * kOldSpaceAllocationMarkingFactor, GC_VIA_STACK_GUARD); |
832 } | 838 } |
833 } | 839 } |
834 | 840 |
835 | 841 |
836 void IncrementalMarking::SpeedUp() { | 842 void IncrementalMarking::SpeedUp() { |
837 bool speed_up = false; | 843 bool speed_up = false; |
838 | 844 |
839 if ((steps_count_ % kMarkingSpeedAccellerationInterval) == 0) { | 845 if ((steps_count_ % kMarkingSpeedAccellerationInterval) == 0) { |
840 if (FLAG_trace_incremental_marking) { | 846 if (FLAG_trace_incremental_marking) { |
841 PrintIsolate(heap()->isolate(), "Speed up marking after %d steps\n", | 847 PrintIsolate(heap()->isolate(), "Speed up marking after %d steps\n", |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
903 } | 909 } |
904 } | 910 } |
905 } | 911 } |
906 | 912 |
907 | 913 |
908 intptr_t IncrementalMarking::Step(intptr_t allocated_bytes, | 914 intptr_t IncrementalMarking::Step(intptr_t allocated_bytes, |
909 CompletionAction action, | 915 CompletionAction action, |
910 ForceMarkingAction marking, | 916 ForceMarkingAction marking, |
911 ForceCompletionAction completion) { | 917 ForceCompletionAction completion) { |
912 if (heap_->gc_state() != Heap::NOT_IN_GC || !FLAG_incremental_marking || | 918 if (heap_->gc_state() != Heap::NOT_IN_GC || !FLAG_incremental_marking || |
913 !FLAG_incremental_marking_steps || | 919 !CanDoSteps()) { |
914 (state_ != SWEEPING && state_ != MARKING)) { | |
915 return 0; | 920 return 0; |
916 } | 921 } |
917 | 922 |
918 allocated_ += allocated_bytes; | 923 allocated_ += allocated_bytes; |
919 | 924 |
920 if (marking == DO_NOT_FORCE_MARKING && allocated_ < kAllocatedThreshold && | 925 if (marking == DO_NOT_FORCE_MARKING && allocated_ < kAllocatedThreshold && |
921 write_barriers_invoked_since_last_step_ < | 926 write_barriers_invoked_since_last_step_ < |
922 kWriteBarriersInvokedThreshold) { | 927 kWriteBarriersInvokedThreshold) { |
923 return 0; | 928 return 0; |
924 } | 929 } |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1023 void IncrementalMarking::IncrementIdleMarkingDelayCounter() { | 1028 void IncrementalMarking::IncrementIdleMarkingDelayCounter() { |
1024 idle_marking_delay_counter_++; | 1029 idle_marking_delay_counter_++; |
1025 } | 1030 } |
1026 | 1031 |
1027 | 1032 |
1028 void IncrementalMarking::ClearIdleMarkingDelayCounter() { | 1033 void IncrementalMarking::ClearIdleMarkingDelayCounter() { |
1029 idle_marking_delay_counter_ = 0; | 1034 idle_marking_delay_counter_ = 0; |
1030 } | 1035 } |
1031 } // namespace internal | 1036 } // namespace internal |
1032 } // namespace v8 | 1037 } // namespace v8 |
OLD | NEW |