< prev index next >

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

Print this page




  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "classfile/classLoaderData.inline.hpp"
  27 #include "classfile/symbolTable.hpp"
  28 #include "jfr/recorder/checkpoint/types/traceid/jfrTraceId.inline.hpp"
  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/orderAccess.inline.hpp"
  37 #include "runtime/vm_version.hpp"
  38 #include "runtime/jniHandles.inline.hpp"
  39 #include "runtime/thread.inline.hpp"
  40 #include "utilities/debug.hpp"
  41 
  42  // returns updated value
  43 static traceid atomic_inc(traceid volatile* const dest) {
  44   assert(VM_Version::supports_cx8(), "invariant");
  45   traceid compare_value;
  46   traceid exchange_value;
  47   do {
  48     compare_value = OrderAccess::load_acquire(dest);
  49     exchange_value = compare_value + 1;
  50   } while (Atomic::cmpxchg(exchange_value, dest, compare_value) != compare_value);
  51   return exchange_value;
  52 }
  53 
  54 static traceid next_class_id() {
  55   static volatile traceid class_id_counter = MaxJfrEventId + 100;
  56   return atomic_inc(&class_id_counter) << TRACE_ID_SHIFT;




  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "classfile/classLoaderData.inline.hpp"
  27 #include "classfile/symbolTable.hpp"
  28 #include "jfr/recorder/checkpoint/types/traceid/jfrTraceId.inline.hpp"
  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/orderAccess.hpp"
  37 #include "runtime/vm_version.hpp"
  38 #include "runtime/jniHandles.inline.hpp"
  39 #include "runtime/thread.inline.hpp"
  40 #include "utilities/debug.hpp"
  41 
  42  // returns updated value
  43 static traceid atomic_inc(traceid volatile* const dest) {
  44   assert(VM_Version::supports_cx8(), "invariant");
  45   traceid compare_value;
  46   traceid exchange_value;
  47   do {
  48     compare_value = OrderAccess::load_acquire(dest);
  49     exchange_value = compare_value + 1;
  50   } while (Atomic::cmpxchg(exchange_value, dest, compare_value) != compare_value);
  51   return exchange_value;
  52 }
  53 
  54 static traceid next_class_id() {
  55   static volatile traceid class_id_counter = MaxJfrEventId + 100;
  56   return atomic_inc(&class_id_counter) << TRACE_ID_SHIFT;


< prev index next >