< prev index next >

src/hotspot/share/gc/g1/g1DirtyCardQueue.cpp

Print this page
rev 54044 : [mq]: new_shared_dcq

*** 54,78 **** // Otherwise, we finished successfully; return true. return true; } }; ! G1DirtyCardQueue::G1DirtyCardQueue(G1DirtyCardQueueSet* qset, bool permanent) : // Dirty card queues are always active, so we create them with their // active field set to true. ! PtrQueue(qset, permanent, true /* active */) { } G1DirtyCardQueue::~G1DirtyCardQueue() { - if (!is_permanent()) { flush(); - } } G1DirtyCardQueueSet::G1DirtyCardQueueSet(bool notify_when_complete) : PtrQueueSet(notify_when_complete), - _shared_dirty_card_queue(this, true /* permanent */), _free_ids(NULL), _processed_buffers_mut(0), _processed_buffers_rs_thread(0), _cur_par_buffer_node(NULL) { --- 54,75 ---- // Otherwise, we finished successfully; return true. return true; } }; ! G1DirtyCardQueue::G1DirtyCardQueue(G1DirtyCardQueueSet* qset) : // Dirty card queues are always active, so we create them with their // active field set to true. ! PtrQueue(qset, true /* active */) { } G1DirtyCardQueue::~G1DirtyCardQueue() { flush(); } G1DirtyCardQueueSet::G1DirtyCardQueueSet(bool notify_when_complete) : PtrQueueSet(notify_when_complete), _free_ids(NULL), _processed_buffers_mut(0), _processed_buffers_rs_thread(0), _cur_par_buffer_node(NULL) {
*** 88,101 **** return (uint)os::initial_active_processor_count(); } void G1DirtyCardQueueSet::initialize(Monitor* cbl_mon, BufferNode::Allocator* allocator, - Mutex* lock, bool init_free_ids) { PtrQueueSet::initialize(cbl_mon, allocator); - _shared_dirty_card_queue.set_lock(lock); if (init_free_ids) { _free_ids = new G1FreeIdSet(0, num_par_ids()); } } --- 85,96 ----
*** 215,249 **** G1ThreadLocalData::dirty_card_queue(t).reset(); } } closure; Threads::threads_do(&closure); ! shared_dirty_card_queue()->reset(); ! } ! ! void G1DirtyCardQueueSet::concatenate_log(G1DirtyCardQueue& dcq) { ! if (!dcq.is_empty()) { ! dcq.flush(); ! } } void G1DirtyCardQueueSet::concatenate_logs() { // Iterate over all the threads, if we find a partial log add it to // the global list of logs. Temporarily turn off the limit on the number // of outstanding buffers. assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint."); size_t old_limit = max_completed_buffers(); set_max_completed_buffers(MaxCompletedBuffersUnlimited); ! class ConcatenateThreadLogClosure : public ThreadClosure { ! G1DirtyCardQueueSet* _qset; ! public: ! ConcatenateThreadLogClosure(G1DirtyCardQueueSet* qset) : _qset(qset) {} virtual void do_thread(Thread* t) { ! _qset->concatenate_log(G1ThreadLocalData::dirty_card_queue(t)); } ! } closure(this); Threads::threads_do(&closure); ! concatenate_log(_shared_dirty_card_queue); set_max_completed_buffers(old_limit); } --- 210,238 ---- G1ThreadLocalData::dirty_card_queue(t).reset(); } } closure; Threads::threads_do(&closure); ! G1BarrierSet::shared_dirty_card_queue().reset(); } void G1DirtyCardQueueSet::concatenate_logs() { // Iterate over all the threads, if we find a partial log add it to // the global list of logs. Temporarily turn off the limit on the number // of outstanding buffers. assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint."); size_t old_limit = max_completed_buffers(); set_max_completed_buffers(MaxCompletedBuffersUnlimited); ! struct ConcatenateThreadLogClosure : public ThreadClosure { virtual void do_thread(Thread* t) { ! G1DirtyCardQueue& dcq = G1ThreadLocalData::dirty_card_queue(t); ! if (!dcq.is_empty()) { ! dcq.flush(); } ! } ! } closure; Threads::threads_do(&closure); ! G1BarrierSet::shared_dirty_card_queue().flush(); set_max_completed_buffers(old_limit); }
< prev index next >