src/hotspot/share/gc/g1/g1RedirtyCardsQueue.hpp
changeset 57890 6bb824c45df1
parent 57785 8d9362f3b8aa
child 58679 9c3209ff7550
equal deleted inserted replaced
57889:e6d7c5fbf09d 57890:6bb824c45df1
    23  */
    23  */
    24 
    24 
    25 #ifndef SHARE_GC_G1_G1REDIRTYCARDSQUEUE_HPP
    25 #ifndef SHARE_GC_G1_G1REDIRTYCARDSQUEUE_HPP
    26 #define SHARE_GC_G1_G1REDIRTYCARDSQUEUE_HPP
    26 #define SHARE_GC_G1_G1REDIRTYCARDSQUEUE_HPP
    27 
    27 
       
    28 #include "gc/g1/g1BufferNodeList.hpp"
    28 #include "gc/shared/ptrQueue.hpp"
    29 #include "gc/shared/ptrQueue.hpp"
    29 #include "memory/allocation.hpp"
    30 #include "memory/allocation.hpp"
    30 #include "memory/padded.hpp"
    31 #include "memory/padded.hpp"
    31 
    32 
    32 class G1CardTableEntryClosure;
    33 class G1CardTableEntryClosure;
    33 class G1RedirtyCardsQueue;
    34 class G1RedirtyCardsQueue;
    34 class G1RedirtyCardsQueueSet;
    35 class G1RedirtyCardsQueueSet;
    35 
       
    36 struct G1RedirtyCardsBufferList {
       
    37   BufferNode* _head;
       
    38   BufferNode* _tail;
       
    39   size_t _entry_count;
       
    40 
       
    41   G1RedirtyCardsBufferList();
       
    42   G1RedirtyCardsBufferList(BufferNode* head, BufferNode* tail, size_t entry_count);
       
    43 };
       
    44 
    36 
    45 // Provide G1RedirtyCardsQueue with a thread-local qset.  It provides an
    37 // Provide G1RedirtyCardsQueue with a thread-local qset.  It provides an
    46 // uncontended staging area for completed buffers, to be flushed to the
    38 // uncontended staging area for completed buffers, to be flushed to the
    47 // shared qset en masse.  Using the "base from member" idiom so the local
    39 // shared qset en masse.  Using the "base from member" idiom so the local
    48 // qset is constructed before being passed to the PtrQueue constructor.
    40 // qset is constructed before being passed to the PtrQueue constructor.
    50   friend class G1RedirtyCardsQueue;
    42   friend class G1RedirtyCardsQueue;
    51   friend class G1RedirtyCardsQueueSet;
    43   friend class G1RedirtyCardsQueueSet;
    52 
    44 
    53   class LocalQSet : public PtrQueueSet {
    45   class LocalQSet : public PtrQueueSet {
    54     G1RedirtyCardsQueueSet* _shared_qset;
    46     G1RedirtyCardsQueueSet* _shared_qset;
    55     G1RedirtyCardsBufferList _buffers;
    47     G1BufferNodeList _buffers;
    56 
    48 
    57   public:
    49   public:
    58     LocalQSet(G1RedirtyCardsQueueSet* shared_qset);
    50     LocalQSet(G1RedirtyCardsQueueSet* shared_qset);
    59     ~LocalQSet();
    51     ~LocalQSet();
    60 
    52 
    62     virtual void enqueue_completed_buffer(BufferNode* node);
    54     virtual void enqueue_completed_buffer(BufferNode* node);
    63 
    55 
    64     // Transfer all completed buffers to the shared qset.
    56     // Transfer all completed buffers to the shared qset.
    65     void flush();
    57     void flush();
    66 
    58 
    67     G1RedirtyCardsBufferList take_all_completed_buffers();
    59     G1BufferNodeList take_all_completed_buffers();
    68   };
    60   };
    69 
    61 
    70   G1RedirtyCardsQueueBase(G1RedirtyCardsQueueSet* shared_qset) :
    62   G1RedirtyCardsQueueBase(G1RedirtyCardsQueueSet* shared_qset) :
    71     _local_qset(shared_qset) {}
    63     _local_qset(shared_qset) {}
    72 
    64 
   121   void merge_bufferlist(LocalQSet* src);
   113   void merge_bufferlist(LocalQSet* src);
   122 
   114 
   123   // Processing phase operations.
   115   // Processing phase operations.
   124   // precondition: Must not be concurrent with buffer collection.
   116   // precondition: Must not be concurrent with buffer collection.
   125   BufferNode* all_completed_buffers() const;
   117   BufferNode* all_completed_buffers() const;
   126   G1RedirtyCardsBufferList take_all_completed_buffers();
   118   G1BufferNodeList take_all_completed_buffers();
   127 };
   119 };
   128 
   120 
   129 #endif // SHARE_GC_G1_G1REDIRTYCARDSQUEUE_HPP
   121 #endif // SHARE_GC_G1_G1REDIRTYCARDSQUEUE_HPP