73 static void print(const char* name, void** buf, size_t index, size_t sz); |
73 static void print(const char* name, void** buf, size_t index, size_t sz); |
74 #endif // PRODUCT |
74 #endif // PRODUCT |
75 }; |
75 }; |
76 |
76 |
77 class SATBMarkQueueSet: public PtrQueueSet { |
77 class SATBMarkQueueSet: public PtrQueueSet { |
78 ObjectClosure** _closures; // One per ParGCThread. |
|
79 |
|
80 ObjPtrQueue _shared_satb_queue; |
78 ObjPtrQueue _shared_satb_queue; |
81 |
79 |
82 #ifdef ASSERT |
80 #ifdef ASSERT |
83 void dump_active_states(bool expected_active); |
81 void dump_active_states(bool expected_active); |
84 void verify_active_states(bool expected_active); |
82 void verify_active_states(bool expected_active); |
100 void set_active_all_threads(bool active, bool expected_active); |
98 void set_active_all_threads(bool active, bool expected_active); |
101 |
99 |
102 // Filter all the currently-active SATB buffers. |
100 // Filter all the currently-active SATB buffers. |
103 void filter_thread_buffers(); |
101 void filter_thread_buffers(); |
104 |
102 |
105 // Register closure for the given worker thread. The "apply_closure_to_completed_buffer" |
|
106 // method will apply this closure to a completed buffer, and "iterate_closure_all_threads" |
|
107 // applies it to partially-filled buffers (the latter should only be done |
|
108 // with the world stopped). |
|
109 void set_closure(uint worker, ObjectClosure* closure); |
|
110 |
|
111 // If there exists some completed buffer, pop it, then apply the |
103 // If there exists some completed buffer, pop it, then apply the |
112 // registered closure to all its elements, and return true. If no |
104 // closure to all its elements, and return true. If no |
113 // completed buffers exist, return false. |
105 // completed buffers exist, return false. |
114 bool apply_closure_to_completed_buffer(uint worker); |
106 bool apply_closure_to_completed_buffer(ObjectClosure* closure); |
115 |
107 |
116 // Apply the given closure on enqueued and currently-active buffers |
108 // Apply the given closure on enqueued and currently-active buffers |
117 // respectively. Both methods are read-only, i.e., they do not |
109 // respectively. Both methods are read-only, i.e., they do not |
118 // modify any of the buffers. |
110 // modify any of the buffers. |
119 void iterate_completed_buffers_read_only(ObjectClosure* cl); |
111 void iterate_completed_buffers_read_only(ObjectClosure* cl); |