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;
|