217 CLEAR_PENDING_EXCEPTION;
218 }
219 }
220
221 // Wrapper to trace JVM functions
222
223 #ifdef ASSERT
224 Histogram* JVMHistogram;
225 volatile int JVMHistogram_lock = 0;
226
227 class JVMHistogramElement : public HistogramElement {
228 public:
229 JVMHistogramElement(const char* name);
230 };
231
232 JVMHistogramElement::JVMHistogramElement(const char* elementName) {
233 _name = elementName;
234 uintx count = 0;
235
236 while (Atomic::cmpxchg(1, &JVMHistogram_lock, 0) != 0) {
237 while (OrderAccess::load_acquire(&JVMHistogram_lock) != 0) {
238 count +=1;
239 if ( (WarnOnStalledSpinLock > 0)
240 && (count % WarnOnStalledSpinLock == 0)) {
241 warning("JVMHistogram_lock seems to be stalled");
242 }
243 }
244 }
245
246 if(JVMHistogram == NULL)
247 JVMHistogram = new Histogram("JVM Call Counts",100);
248
249 JVMHistogram->add_element(this);
250 Atomic::dec(&JVMHistogram_lock);
251 }
252
253 #define JVMCountWrapper(arg) \
254 static JVMHistogramElement* e = new JVMHistogramElement(arg); \
255 if (e != NULL) e->increment_count(); // Due to bug in VC++, we need a NULL check here eventhough it should never happen!
256
257 #define JVMWrapper(arg) JVMCountWrapper(arg);
|
217 CLEAR_PENDING_EXCEPTION;
218 }
219 }
220
221 // Wrapper to trace JVM functions
222
223 #ifdef ASSERT
224 Histogram* JVMHistogram;
225 volatile int JVMHistogram_lock = 0;
226
227 class JVMHistogramElement : public HistogramElement {
228 public:
229 JVMHistogramElement(const char* name);
230 };
231
232 JVMHistogramElement::JVMHistogramElement(const char* elementName) {
233 _name = elementName;
234 uintx count = 0;
235
236 while (Atomic::cmpxchg(1, &JVMHistogram_lock, 0) != 0) {
237 while (Atomic::load_acquire(&JVMHistogram_lock) != 0) {
238 count +=1;
239 if ( (WarnOnStalledSpinLock > 0)
240 && (count % WarnOnStalledSpinLock == 0)) {
241 warning("JVMHistogram_lock seems to be stalled");
242 }
243 }
244 }
245
246 if(JVMHistogram == NULL)
247 JVMHistogram = new Histogram("JVM Call Counts",100);
248
249 JVMHistogram->add_element(this);
250 Atomic::dec(&JVMHistogram_lock);
251 }
252
253 #define JVMCountWrapper(arg) \
254 static JVMHistogramElement* e = new JVMHistogramElement(arg); \
255 if (e != NULL) e->increment_count(); // Due to bug in VC++, we need a NULL check here eventhough it should never happen!
256
257 #define JVMWrapper(arg) JVMCountWrapper(arg);
|