OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 #ifndef V8_STORE_BUFFER_H_ | 5 #ifndef V8_STORE_BUFFER_H_ |
6 #define V8_STORE_BUFFER_H_ | 6 #define V8_STORE_BUFFER_H_ |
7 | 7 |
8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
9 #include "src/base/logging.h" | 9 #include "src/base/logging.h" |
10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 Object*** Top() { return reinterpret_cast<Object***>(old_top_); } | 76 Object*** Top() { return reinterpret_cast<Object***>(old_top_); } |
77 void SetTop(Object*** top) { | 77 void SetTop(Object*** top) { |
78 DCHECK(top >= Start()); | 78 DCHECK(top >= Start()); |
79 DCHECK(top <= Limit()); | 79 DCHECK(top <= Limit()); |
80 old_top_ = reinterpret_cast<Address*>(top); | 80 old_top_ = reinterpret_cast<Address*>(top); |
81 } | 81 } |
82 | 82 |
83 bool old_buffer_is_sorted() { return old_buffer_is_sorted_; } | 83 bool old_buffer_is_sorted() { return old_buffer_is_sorted_; } |
84 bool old_buffer_is_filtered() { return old_buffer_is_filtered_; } | 84 bool old_buffer_is_filtered() { return old_buffer_is_filtered_; } |
85 | 85 |
86 // Goes through the store buffer removing pointers to things that have | |
87 // been promoted. Rebuilds the store buffer completely if it overflowed. | |
88 void SortUniq(); | |
89 | |
90 void EnsureSpace(intptr_t space_needed); | 86 void EnsureSpace(intptr_t space_needed); |
91 void Verify(); | 87 void Verify(); |
92 | 88 |
93 bool PrepareForIteration(); | 89 bool PrepareForIteration(); |
94 | 90 |
95 #ifdef DEBUG | |
96 void Clean(); | |
97 // Slow, for asserts only. | |
98 bool CellIsInStoreBuffer(Address cell); | |
99 #endif | |
100 | |
101 void Filter(int flag); | 91 void Filter(int flag); |
102 | 92 |
103 // Eliminates all stale store buffer entries from the store buffer, i.e., | 93 // Eliminates all stale store buffer entries from the store buffer, i.e., |
104 // slots that are not part of live objects anymore. This method must be | 94 // slots that are not part of live objects anymore. This method must be |
105 // called after marking, when the whole transitive closure is known and | 95 // called after marking, when the whole transitive closure is known and |
106 // must be called before sweeping when mark bits are still intact. | 96 // must be called before sweeping when mark bits are still intact. |
107 void ClearInvalidStoreBufferEntries(); | 97 void ClearInvalidStoreBufferEntries(); |
108 void VerifyValidStoreBufferEntries(); | 98 void VerifyValidStoreBufferEntries(); |
109 | 99 |
110 private: | 100 private: |
(...skipping 26 matching lines...) Expand all Loading... |
137 // Two hash sets used for filtering. | 127 // Two hash sets used for filtering. |
138 // If address is in the hash set then it is guaranteed to be in the | 128 // If address is in the hash set then it is guaranteed to be in the |
139 // old part of the store buffer. | 129 // old part of the store buffer. |
140 uintptr_t* hash_set_1_; | 130 uintptr_t* hash_set_1_; |
141 uintptr_t* hash_set_2_; | 131 uintptr_t* hash_set_2_; |
142 bool hash_sets_are_empty_; | 132 bool hash_sets_are_empty_; |
143 | 133 |
144 void ClearFilteringHashSets(); | 134 void ClearFilteringHashSets(); |
145 | 135 |
146 bool SpaceAvailable(intptr_t space_needed); | 136 bool SpaceAvailable(intptr_t space_needed); |
147 void Uniq(); | |
148 void ExemptPopularPages(int prime_sample_step, int threshold); | 137 void ExemptPopularPages(int prime_sample_step, int threshold); |
149 | 138 |
150 void ProcessOldToNewSlot(Address slot_address, | 139 void ProcessOldToNewSlot(Address slot_address, |
151 ObjectSlotCallback slot_callback); | 140 ObjectSlotCallback slot_callback); |
152 | 141 |
153 void FindPointersToNewSpaceInRegion(Address start, Address end, | 142 void FindPointersToNewSpaceInRegion(Address start, Address end, |
154 ObjectSlotCallback slot_callback); | 143 ObjectSlotCallback slot_callback); |
155 | 144 |
156 // For each region of pointers on a page in use from an old space call | 145 // For each region of pointers on a page in use from an old space call |
157 // visit_pointer_region callback. | 146 // visit_pointer_region callback. |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 } | 199 } |
211 | 200 |
212 private: | 201 private: |
213 StoreBuffer* store_buffer_; | 202 StoreBuffer* store_buffer_; |
214 bool stored_state_; | 203 bool stored_state_; |
215 }; | 204 }; |
216 } | 205 } |
217 } // namespace v8::internal | 206 } // namespace v8::internal |
218 | 207 |
219 #endif // V8_STORE_BUFFER_H_ | 208 #endif // V8_STORE_BUFFER_H_ |
OLD | NEW |