< prev index next >
src/share/vm/gc/g1/dirtyCardQueue.hpp
Print this page
rev 13241 : imported patch 8183128-erikd-review
*** 66,78 ****
};
class DirtyCardQueueSet: public PtrQueueSet {
- // The closure used in mut_process_buffer().
- CardTableEntryClosure* _mut_process_closure;
-
DirtyCardQueue _shared_dirty_card_queue;
// Apply the closure to the elements of "node" from it's index to
// buffer_size. If all closure applications return true, then
// returns true. Stops processing after the first closure
--- 66,75 ----
*** 83,92 ****
--- 80,106 ----
bool apply_closure_to_buffer(CardTableEntryClosure* cl,
BufferNode* node,
bool consume,
uint worker_i = 0);
+ // If there are more than stop_at completed buffers, pop one, apply
+ // the specified closure to its active elements, and return true.
+ // Otherwise return false.
+ //
+ // A completely processed buffer is freed. However, if a closure
+ // invocation returns false, processing is stopped and the partially
+ // processed buffer (with its index updated to exclude the processed
+ // elements, e.g. up to the element for which the closure returned
+ // false) is returned to the completed buffer set.
+ //
+ // If during_pause is true, stop_at must be zero, and the closure
+ // must never return false.
+ bool apply_closure_to_completed_buffer(CardTableEntryClosure* cl,
+ uint worker_i,
+ size_t stop_at,
+ bool during_pause);
+
bool mut_process_buffer(BufferNode* node);
// Protected by the _cbl_mon.
FreeIdSet* _free_ids;
*** 101,112 ****
void concatenate_log(DirtyCardQueue& dcq);
public:
DirtyCardQueueSet(bool notify_when_complete = true);
! void initialize(CardTableEntryClosure* cl,
! Monitor* cbl_mon,
Mutex* fl_lock,
int process_completed_threshold,
int max_completed_queue,
Mutex* lock,
DirtyCardQueueSet* fl_owner,
--- 115,125 ----
void concatenate_log(DirtyCardQueue& dcq);
public:
DirtyCardQueueSet(bool notify_when_complete = true);
! void initialize(Monitor* cbl_mon,
Mutex* fl_lock,
int process_completed_threshold,
int max_completed_queue,
Mutex* lock,
DirtyCardQueueSet* fl_owner,
*** 116,141 ****
// mutator threads to do card-processing work.
static uint num_par_ids();
static void handle_zero_index_for_thread(JavaThread* t);
! // If there are more than stop_at completed buffers, pop one, apply
! // the specified closure to its active elements, and return true.
! // Otherwise return false.
! //
! // A completely processed buffer is freed. However, if a closure
! // invocation returns false, processing is stopped and the partially
! // processed buffer (with its index updated to exclude the processed
! // elements, e.g. up to the element for which the closure returned
! // false) is returned to the completed buffer set.
! //
! // If during_pause is true, stop_at must be zero, and the closure
! // must never return false.
! bool apply_closure_to_completed_buffer(CardTableEntryClosure* cl,
! uint worker_i,
! size_t stop_at,
! bool during_pause);
BufferNode* get_completed_buffer(size_t stop_at);
void reset_for_par_iteration() { _cur_par_buffer_node = _completed_buffers_head; }
// Applies the current closure to all completed buffers, non-consumptively.
--- 129,145 ----
// mutator threads to do card-processing work.
static uint num_par_ids();
static void handle_zero_index_for_thread(JavaThread* t);
! // Apply G1RefineCardConcurrentlyClosure to completed buffers until there are stop_at
! // completed buffers remaining.
! bool refine_completed_buffer_concurrently(uint worker_i, size_t stop_at);
!
! // Apply the given closure to all completed buffers. The given closure's do_card_ptr
! // must never return false. Must only be called during GC.
! bool apply_closure_during_gc(CardTableEntryClosure* cl, uint worker_i);
BufferNode* get_completed_buffer(size_t stop_at);
void reset_for_par_iteration() { _cur_par_buffer_node = _completed_buffers_head; }
// Applies the current closure to all completed buffers, non-consumptively.
< prev index next >