| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 | 35 |
| 36 namespace v8 { | 36 namespace v8 { |
| 37 namespace internal { | 37 namespace internal { |
| 38 | 38 |
| 39 | 39 |
| 40 // TODO(gc) rename into IncrementalMarker after merge. | 40 // TODO(gc) rename into IncrementalMarker after merge. |
| 41 class IncrementalMarking : public AllStatic { | 41 class IncrementalMarking : public AllStatic { |
| 42 public: | 42 public: |
| 43 enum State { | 43 enum State { |
| 44 STOPPED, | 44 STOPPED, |
| 45 SWEEPING, |
| 45 MARKING, | 46 MARKING, |
| 46 COMPLETE | 47 COMPLETE |
| 47 }; | 48 }; |
| 48 | 49 |
| 49 explicit IncrementalMarking(Heap* heap); | 50 explicit IncrementalMarking(Heap* heap); |
| 50 | 51 |
| 51 State state() { | 52 State state() { |
| 52 ASSERT(state_ == STOPPED || FLAG_incremental_marking); | 53 ASSERT(state_ == STOPPED || FLAG_incremental_marking); |
| 53 return state_; | 54 return state_; |
| 54 } | 55 } |
| 55 | 56 |
| 56 bool should_hurry() { return should_hurry_; } | 57 bool should_hurry() { return should_hurry_; } |
| 57 | 58 |
| 58 inline bool IsStopped() { return state() == STOPPED; } | 59 inline bool IsStopped() { return state() == STOPPED; } |
| 59 | 60 |
| 60 inline bool IsMarking() { return state() == MARKING; } | 61 inline bool IsMarking() { return state() >= MARKING; } |
| 62 |
| 63 inline bool IsMarkingIncomplete() { return state() == MARKING; } |
| 61 | 64 |
| 62 bool WorthActivating(); | 65 bool WorthActivating(); |
| 63 | 66 |
| 64 void Start(); | 67 void Start(); |
| 65 | 68 |
| 66 void Stop(); | 69 void Stop(); |
| 67 | 70 |
| 68 void PrepareForScavenge(); | 71 void PrepareForScavenge(); |
| 69 | 72 |
| 70 void UpdateMarkingDequeAfterScavenge(); | 73 void UpdateMarkingDequeAfterScavenge(); |
| 71 | 74 |
| 72 void Hurry(); | 75 void Hurry(); |
| 73 | 76 |
| 74 void Finalize(); | 77 void Finalize(); |
| 75 | 78 |
| 79 void Abort(); |
| 80 |
| 76 void MarkingComplete(); | 81 void MarkingComplete(); |
| 77 | 82 |
| 78 // It's hard to know how much work the incremental marker should do to make | 83 // It's hard to know how much work the incremental marker should do to make |
| 79 // progress in the face of the mutator creating new work for it. We start | 84 // progress in the face of the mutator creating new work for it. We start |
| 80 // of at a moderate rate of work and gradually increase the speed of the | 85 // of at a moderate rate of work and gradually increase the speed of the |
| 81 // incremental marker until it completes. | 86 // incremental marker until it completes. |
| 82 // Do some marking every time this much memory has been allocated. | 87 // Do some marking every time this much memory has been allocated. |
| 83 static const intptr_t kAllocatedThreshold = 8192; | 88 static const intptr_t kAllocatedThreshold = 8192; |
| 84 // Start off by marking this many times more memory than has been allocated. | 89 // Start off by marking this many times more memory than has been allocated. |
| 85 static const intptr_t kInitialAllocationMarkingFactor = 4; | 90 static const intptr_t kInitialAllocationMarkingFactor = 4; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 void set_should_hurry(bool val) { | 193 void set_should_hurry(bool val) { |
| 189 should_hurry_ = val; | 194 should_hurry_ = val; |
| 190 } | 195 } |
| 191 | 196 |
| 192 void ResetStepCounters() { | 197 void ResetStepCounters() { |
| 193 steps_count_ = 0; | 198 steps_count_ = 0; |
| 194 steps_took_ = 0; | 199 steps_took_ = 0; |
| 195 allocation_marking_factor_ = kInitialAllocationMarkingFactor; | 200 allocation_marking_factor_ = kInitialAllocationMarkingFactor; |
| 196 } | 201 } |
| 197 | 202 |
| 203 static void ClearMarkbits(PagedSpace* space); |
| 204 void ClearMarkbits(); |
| 205 |
| 206 #ifdef DEBUG |
| 207 void VerifyMarkbitsAreClean(); |
| 208 static void VerifyMarkbitsAreClean(PagedSpace* space); |
| 209 #endif |
| 210 |
| 211 void StartMarking(); |
| 212 |
| 198 | 213 |
| 199 Heap* heap_; | 214 Heap* heap_; |
| 200 | 215 |
| 201 State state_; | 216 State state_; |
| 202 MarkingDeque marking_deque_; | 217 MarkingDeque marking_deque_; |
| 203 | 218 |
| 204 int steps_count_; | 219 int steps_count_; |
| 205 double steps_took_; | 220 double steps_took_; |
| 206 bool should_hurry_; | 221 bool should_hurry_; |
| 207 intptr_t allocation_marking_factor_; | 222 intptr_t allocation_marking_factor_; |
| 208 intptr_t allocated_; | 223 intptr_t allocated_; |
| 209 }; | 224 }; |
| 210 | 225 |
| 211 } } // namespace v8::internal | 226 } } // namespace v8::internal |
| 212 | 227 |
| 213 #endif // V8_INCREMENTAL_MARKING_H_ | 228 #endif // V8_INCREMENTAL_MARKING_H_ |
| OLD | NEW |