< prev index next >

src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceId.cpp

Print this page




  29 #include "jfr/utilities/jfrTypes.hpp"
  30 #include "oops/arrayKlass.inline.hpp"
  31 #include "oops/klass.inline.hpp"
  32 #include "oops/instanceKlass.inline.hpp"
  33 #include "oops/method.hpp"
  34 #include "oops/oop.inline.hpp"
  35 #include "runtime/atomic.hpp"
  36 #include "runtime/vm_version.hpp"
  37 #include "runtime/jniHandles.inline.hpp"
  38 #include "runtime/thread.inline.hpp"
  39 #include "utilities/debug.hpp"
  40 
  41  // returns updated value
  42 static traceid atomic_inc(traceid volatile* const dest) {
  43   assert(VM_Version::supports_cx8(), "invariant");
  44   traceid compare_value;
  45   traceid exchange_value;
  46   do {
  47     compare_value = *dest;
  48     exchange_value = compare_value + 1;
  49   } while (Atomic::cmpxchg(exchange_value, dest, compare_value) != compare_value);
  50   return exchange_value;
  51 }
  52 
  53 static traceid next_class_id() {
  54   static volatile traceid class_id_counter = MaxJfrEventId + 100;
  55   return atomic_inc(&class_id_counter) << TRACE_ID_SHIFT;
  56 }
  57 
  58 static traceid next_thread_id() {
  59   static volatile traceid thread_id_counter = 0;
  60   return atomic_inc(&thread_id_counter);
  61 }
  62 
  63 static traceid next_module_id() {
  64   static volatile traceid module_id_counter = 1;
  65   return atomic_inc(&module_id_counter) << TRACE_ID_SHIFT;
  66 }
  67 
  68 static traceid next_package_id() {
  69   static volatile traceid package_id_counter = 1;




  29 #include "jfr/utilities/jfrTypes.hpp"
  30 #include "oops/arrayKlass.inline.hpp"
  31 #include "oops/klass.inline.hpp"
  32 #include "oops/instanceKlass.inline.hpp"
  33 #include "oops/method.hpp"
  34 #include "oops/oop.inline.hpp"
  35 #include "runtime/atomic.hpp"
  36 #include "runtime/vm_version.hpp"
  37 #include "runtime/jniHandles.inline.hpp"
  38 #include "runtime/thread.inline.hpp"
  39 #include "utilities/debug.hpp"
  40 
  41  // returns updated value
  42 static traceid atomic_inc(traceid volatile* const dest) {
  43   assert(VM_Version::supports_cx8(), "invariant");
  44   traceid compare_value;
  45   traceid exchange_value;
  46   do {
  47     compare_value = *dest;
  48     exchange_value = compare_value + 1;
  49   } while (Atomic::cmpxchg(dest, compare_value, exchange_value) != compare_value);
  50   return exchange_value;
  51 }
  52 
  53 static traceid next_class_id() {
  54   static volatile traceid class_id_counter = MaxJfrEventId + 100;
  55   return atomic_inc(&class_id_counter) << TRACE_ID_SHIFT;
  56 }
  57 
  58 static traceid next_thread_id() {
  59   static volatile traceid thread_id_counter = 0;
  60   return atomic_inc(&thread_id_counter);
  61 }
  62 
  63 static traceid next_module_id() {
  64   static volatile traceid module_id_counter = 1;
  65   return atomic_inc(&module_id_counter) << TRACE_ID_SHIFT;
  66 }
  67 
  68 static traceid next_package_id() {
  69   static volatile traceid package_id_counter = 1;


< prev index next >