1309 BiasedLockingCounters* blc = ((BiasedLockingNamedCounter*)c)->counters(); |
1309 BiasedLockingCounters* blc = ((BiasedLockingNamedCounter*)c)->counters(); |
1310 if (blc->nonzero()) { |
1310 if (blc->nonzero()) { |
1311 tty->print_cr("%s", c->name()); |
1311 tty->print_cr("%s", c->name()); |
1312 blc->print_on(tty); |
1312 blc->print_on(tty); |
1313 } |
1313 } |
|
1314 #if INCLUDE_RTM_OPT |
|
1315 } else if (c->tag() == NamedCounter::RTMLockingCounter) { |
|
1316 RTMLockingCounters* rlc = ((RTMLockingNamedCounter*)c)->counters(); |
|
1317 if (rlc->nonzero()) { |
|
1318 tty->print_cr("%s", c->name()); |
|
1319 rlc->print_on(tty); |
|
1320 } |
|
1321 #endif |
1314 } |
1322 } |
1315 c = c->next(); |
1323 c = c->next(); |
1316 } |
1324 } |
1317 if (total_lock_count > 0) { |
1325 if (total_lock_count > 0) { |
1318 tty->print_cr("dynamic locks: %d", total_lock_count); |
1326 tty->print_cr("dynamic locks: %d", total_lock_count); |
1348 // To print linenumbers instead of bci use: m->line_number_from_bci(bci) |
1356 // To print linenumbers instead of bci use: m->line_number_from_bci(bci) |
1349 } |
1357 } |
1350 NamedCounter* c; |
1358 NamedCounter* c; |
1351 if (tag == NamedCounter::BiasedLockingCounter) { |
1359 if (tag == NamedCounter::BiasedLockingCounter) { |
1352 c = new BiasedLockingNamedCounter(strdup(st.as_string())); |
1360 c = new BiasedLockingNamedCounter(strdup(st.as_string())); |
|
1361 } else if (tag == NamedCounter::RTMLockingCounter) { |
|
1362 c = new RTMLockingNamedCounter(strdup(st.as_string())); |
1353 } else { |
1363 } else { |
1354 c = new NamedCounter(strdup(st.as_string()), tag); |
1364 c = new NamedCounter(strdup(st.as_string()), tag); |
1355 } |
1365 } |
1356 |
1366 |
1357 // atomically add the new counter to the head of the list. We only |
1367 // atomically add the new counter to the head of the list. We only |
1358 // add counters so this is safe. |
1368 // add counters so this is safe. |
1359 NamedCounter* head; |
1369 NamedCounter* head; |
1360 do { |
1370 do { |
|
1371 c->set_next(NULL); |
1361 head = _named_counters; |
1372 head = _named_counters; |
1362 c->set_next(head); |
1373 c->set_next(head); |
1363 } while (Atomic::cmpxchg_ptr(c, &_named_counters, head) != head); |
1374 } while (Atomic::cmpxchg_ptr(c, &_named_counters, head) != head); |
1364 return c; |
1375 return c; |
1365 } |
1376 } |