102 } 103 104 void add_narrowOop(narrowOop* p) { 105 assert(!is_buffer_full(), "Buffer should not be full"); 106 *_narrowOop_bottom = (OopOrNarrowOopStar)p; 107 _narrowOop_bottom--; 108 } 109 110 void add_oop(oop* p) { 111 assert(!is_buffer_full(), "Buffer should not be full"); 112 *_oop_top = (OopOrNarrowOopStar)p; 113 _oop_top++; 114 } 115 116 public: 117 virtual void do_oop(narrowOop* p) { 118 process_buffer_if_full(); 119 add_narrowOop(p); 120 } 121 122 virtual void do_oop(oop* p) { 123 process_buffer_if_full(); 124 add_oop(p); 125 } 126 127 void done() { 128 if (!is_buffer_empty()) { 129 process_buffer(); 130 } 131 } 132 133 double closure_app_seconds() { 134 return _closure_app_seconds; 135 } 136 137 BufferingOopClosure(OopClosure *oc) : 138 _oc(oc), 139 _oop_top(_buffer), 140 _narrowOop_bottom(_buffer + BufferLength - 1), 141 _closure_app_seconds(0.0) { } 142 }; 143 144 #endif // SHARE_VM_GC_G1_BUFFERINGOOPCLOSURE_HPP | 102 } 103 104 void add_narrowOop(narrowOop* p) { 105 assert(!is_buffer_full(), "Buffer should not be full"); 106 *_narrowOop_bottom = (OopOrNarrowOopStar)p; 107 _narrowOop_bottom--; 108 } 109 110 void add_oop(oop* p) { 111 assert(!is_buffer_full(), "Buffer should not be full"); 112 *_oop_top = (OopOrNarrowOopStar)p; 113 _oop_top++; 114 } 115 116 public: 117 virtual void do_oop(narrowOop* p) { 118 process_buffer_if_full(); 119 add_narrowOop(p); 120 } 121 122 virtual void do_oop_no_buffering(narrowOop* o) { 123 _oc->do_oop(o); 124 } 125 126 virtual void do_oop(oop* p) { 127 process_buffer_if_full(); 128 add_oop(p); 129 } 130 131 virtual void do_oop_no_buffering(oop* o) { 132 _oc->do_oop(o); 133 } 134 135 void done() { 136 if (!is_buffer_empty()) { 137 process_buffer(); 138 } 139 } 140 141 double closure_app_seconds() { 142 return _closure_app_seconds; 143 } 144 145 BufferingOopClosure(OopClosure *oc) : 146 _oc(oc), 147 _oop_top(_buffer), 148 _narrowOop_bottom(_buffer + BufferLength - 1), 149 _closure_app_seconds(0.0) { } 150 }; 151 152 #endif // SHARE_VM_GC_G1_BUFFERINGOOPCLOSURE_HPP |