140 max_completed_queue,
141 fl_owner);
142 set_buffer_size(G1UpdateBufferSize);
143 _shared_dirty_card_queue.set_lock(lock);
144 if (init_free_ids) {
145 _free_ids = new FreeIdSet(num_par_ids(), _cbl_mon);
146 }
147 }
148
149 void DirtyCardQueueSet::handle_zero_index_for_thread(JavaThread* t) {
150 t->dirty_card_queue().handle_zero_index();
151 }
152
153 bool DirtyCardQueueSet::apply_closure_to_buffer(CardTableEntryClosure* cl,
154 BufferNode* node,
155 bool consume,
156 uint worker_i) {
157 if (cl == NULL) return true;
158 bool result = true;
159 void** buf = BufferNode::make_buffer_from_node(node);
160 size_t limit = DirtyCardQueue::byte_index_to_index(buffer_size());
161 size_t i = DirtyCardQueue::byte_index_to_index(node->index());
162 for ( ; i < limit; ++i) {
163 jbyte* card_ptr = static_cast<jbyte*>(buf[i]);
164 assert(card_ptr != NULL, "invariant");
165 if (!cl->do_card_ptr(card_ptr, worker_i)) {
166 result = false; // Incomplete processing.
167 break;
168 }
169 }
170 if (consume) {
171 size_t new_index = DirtyCardQueue::index_to_byte_index(i);
172 assert(new_index <= buffer_size(), "invariant");
173 node->set_index(new_index);
174 }
175 return result;
176 }
177
178 #ifndef ASSERT
179 #define assert_fully_consumed(node, buffer_size)
180 #else
181 #define assert_fully_consumed(node, buffer_size) \
182 do { \
183 size_t _afc_index = (node)->index(); \
184 size_t _afc_size = (buffer_size); \
185 assert(_afc_index == _afc_size, \
186 "Buffer was not fully consumed as claimed: index: " \
187 SIZE_FORMAT ", size: " SIZE_FORMAT, \
188 _afc_index, _afc_size); \
189 } while (0)
190 #endif // ASSERT
191
192 bool DirtyCardQueueSet::mut_process_buffer(BufferNode* node) {
193 guarantee(_free_ids != NULL, "must be");
|
140 max_completed_queue,
141 fl_owner);
142 set_buffer_size(G1UpdateBufferSize);
143 _shared_dirty_card_queue.set_lock(lock);
144 if (init_free_ids) {
145 _free_ids = new FreeIdSet(num_par_ids(), _cbl_mon);
146 }
147 }
148
149 void DirtyCardQueueSet::handle_zero_index_for_thread(JavaThread* t) {
150 t->dirty_card_queue().handle_zero_index();
151 }
152
153 bool DirtyCardQueueSet::apply_closure_to_buffer(CardTableEntryClosure* cl,
154 BufferNode* node,
155 bool consume,
156 uint worker_i) {
157 if (cl == NULL) return true;
158 bool result = true;
159 void** buf = BufferNode::make_buffer_from_node(node);
160 size_t i = node->index();
161 for (size_t limit = buffer_size(); i < limit; ++i) {
162 jbyte* card_ptr = static_cast<jbyte*>(buf[i]);
163 assert(card_ptr != NULL, "invariant");
164 if (!cl->do_card_ptr(card_ptr, worker_i)) {
165 result = false; // Incomplete processing.
166 break;
167 }
168 }
169 if (consume) {
170 assert(i <= buffer_size(), "invariant");
171 node->set_index(i);
172 }
173 return result;
174 }
175
176 #ifndef ASSERT
177 #define assert_fully_consumed(node, buffer_size)
178 #else
179 #define assert_fully_consumed(node, buffer_size) \
180 do { \
181 size_t _afc_index = (node)->index(); \
182 size_t _afc_size = (buffer_size); \
183 assert(_afc_index == _afc_size, \
184 "Buffer was not fully consumed as claimed: index: " \
185 SIZE_FORMAT ", size: " SIZE_FORMAT, \
186 _afc_index, _afc_size); \
187 } while (0)
188 #endif // ASSERT
189
190 bool DirtyCardQueueSet::mut_process_buffer(BufferNode* node) {
191 guarantee(_free_ids != NULL, "must be");
|