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