hotspot/src/share/vm/gc/g1/g1CollectedHeap.hpp
changeset 34296 ef50f39866b5
parent 34241 78486dc87f38
child 34302 c932a347d579
--- a/hotspot/src/share/vm/gc/g1/g1CollectedHeap.hpp	Wed Nov 25 06:33:28 2015 +0000
+++ b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.hpp	Tue Nov 24 15:46:45 2015 +0100
@@ -1518,4 +1518,40 @@
   size_t _max_heap_capacity;
 };
 
+class G1ParEvacuateFollowersClosure : public VoidClosure {
+private:
+  double _start_term;
+  double _term_time;
+  size_t _term_attempts;
+
+  void start_term_time() { _term_attempts++; _start_term = os::elapsedTime(); }
+  void end_term_time() { _term_time += os::elapsedTime() - _start_term; }
+protected:
+  G1CollectedHeap*              _g1h;
+  G1ParScanThreadState*         _par_scan_state;
+  RefToScanQueueSet*            _queues;
+  ParallelTaskTerminator*       _terminator;
+
+  G1ParScanThreadState*   par_scan_state() { return _par_scan_state; }
+  RefToScanQueueSet*      queues()         { return _queues; }
+  ParallelTaskTerminator* terminator()     { return _terminator; }
+
+public:
+  G1ParEvacuateFollowersClosure(G1CollectedHeap* g1h,
+                                G1ParScanThreadState* par_scan_state,
+                                RefToScanQueueSet* queues,
+                                ParallelTaskTerminator* terminator)
+    : _g1h(g1h), _par_scan_state(par_scan_state),
+      _queues(queues), _terminator(terminator),
+      _start_term(0.0), _term_time(0.0), _term_attempts(0) {}
+
+  void do_void();
+
+  double term_time() const { return _term_time; }
+  size_t term_attempts() const { return _term_attempts; }
+
+private:
+  inline bool offer_termination();
+};
+
 #endif // SHARE_VM_GC_G1_G1COLLECTEDHEAP_HPP