Mon, 19 Aug 2019 10:11:31 +0200
8229401: Fix JFR code cache test failures
8223689: Add JFR Thread Sampling Support
8223690: Add JFR BiasedLock Event Support
8223691: Add JFR G1 Region Type Change Event Support
8223692: Add JFR G1 Heap Summary Event Support
Summary: Backport JFR from JDK11, additional fixes
Reviewed-by: neugens, apetushkov
Contributed-by: denghui.ddh@alibaba-inc.com
apetushkov@9858 | 1 | /* |
apetushkov@9858 | 2 | * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. |
apetushkov@9858 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
apetushkov@9858 | 4 | * |
apetushkov@9858 | 5 | * This code is free software; you can redistribute it and/or modify it |
apetushkov@9858 | 6 | * under the terms of the GNU General Public License version 2 only, as |
apetushkov@9858 | 7 | * published by the Free Software Foundation. |
apetushkov@9858 | 8 | * |
apetushkov@9858 | 9 | * This code is distributed in the hope that it will be useful, but WITHOUT |
apetushkov@9858 | 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
apetushkov@9858 | 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
apetushkov@9858 | 12 | * version 2 for more details (a copy is included in the LICENSE file that |
apetushkov@9858 | 13 | * accompanied this code). |
apetushkov@9858 | 14 | * |
apetushkov@9858 | 15 | * You should have received a copy of the GNU General Public License version |
apetushkov@9858 | 16 | * 2 along with this work; if not, write to the Free Software Foundation, |
apetushkov@9858 | 17 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
apetushkov@9858 | 18 | * |
apetushkov@9858 | 19 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
apetushkov@9858 | 20 | * or visit www.oracle.com if you need additional information or have any |
apetushkov@9858 | 21 | * questions. |
apetushkov@9858 | 22 | * |
apetushkov@9858 | 23 | */ |
apetushkov@9858 | 24 | |
apetushkov@9858 | 25 | #ifndef SHARE_VM_JFR_CHECKPOINT_TYPES_TRACEID_JFRTRACEIDMACROS_HPP |
apetushkov@9858 | 26 | #define SHARE_VM_JFR_CHECKPOINT_TYPES_TRACEID_JFRTRACEIDMACROS_HPP |
apetushkov@9858 | 27 | |
apetushkov@9858 | 28 | #include "jfr/recorder/checkpoint/types/traceid/jfrTraceIdBits.inline.hpp" |
apetushkov@9858 | 29 | #include "jfr/recorder/checkpoint/types/traceid/jfrTraceIdEpoch.hpp" |
apetushkov@9858 | 30 | #include "jfr/support/jfrKlassExtension.hpp" |
apetushkov@9858 | 31 | #include "utilities/globalDefinitions.hpp" |
apetushkov@9858 | 32 | |
apetushkov@9858 | 33 | /** |
apetushkov@9858 | 34 | * |
apetushkov@9858 | 35 | * If a traceid is used, depending on epoch, either the first or the second bit is tagged. |
apetushkov@9858 | 36 | * If a class member (method) is used, either the third or fourth bit is tagged. |
apetushkov@9858 | 37 | * Which bit to set is a function of the epoch. This allows for concurrent tagging. |
apetushkov@9858 | 38 | * |
apetushkov@9858 | 39 | * LeakProfiler subsystem gets its own byte and uses the same tagging scheme but is shifted up 8. |
apetushkov@9858 | 40 | * |
apetushkov@9858 | 41 | * We also tag the individual method by using the TraceFlag field, |
apetushkov@9858 | 42 | * (see jfr/support/jfrTraceIdExtension.hpp for details) |
apetushkov@9858 | 43 | * |
apetushkov@9858 | 44 | */ |
apetushkov@9858 | 45 | |
apetushkov@9858 | 46 | // these are defined in jfr/support/jfrKlassExtension.hpp |
apetushkov@9858 | 47 | // |
apetushkov@9858 | 48 | // #define JDK_JFR_EVENT_SUBKLASS 16 |
apetushkov@9858 | 49 | // #define JDK_JFR_EVENT_KLASS 32 |
apetushkov@9858 | 50 | // #define EVENT_HOST_KLASS 64 |
apetushkov@9858 | 51 | |
apetushkov@9858 | 52 | #define IS_JDK_JFR_EVENT_SUBKLASS(ptr) (((ptr)->trace_id() & (JDK_JFR_EVENT_SUBKLASS)) != 0) |
apetushkov@9858 | 53 | |
apetushkov@9858 | 54 | #define ANY_USED_BITS (USED_EPOCH_2_BIT | \ |
apetushkov@9858 | 55 | USED_EPOCH_1_BIT | \ |
apetushkov@9858 | 56 | METHOD_USED_EPOCH_2_BIT | \ |
apetushkov@9858 | 57 | METHOD_USED_EPOCH_1_BIT | \ |
apetushkov@9858 | 58 | LEAKP_USED_EPOCH_2_BIT | \ |
apetushkov@9858 | 59 | LEAKP_USED_EPOCH_1_BIT) |
apetushkov@9858 | 60 | |
apetushkov@9858 | 61 | #define TRACE_ID_META_BITS (EVENT_HOST_KLASS | JDK_JFR_EVENT_KLASS | JDK_JFR_EVENT_SUBKLASS | ANY_USED_BITS) |
apetushkov@9858 | 62 | |
apetushkov@9858 | 63 | #define ANY_EVENT (EVENT_HOST_KLASS | JDK_JFR_EVENT_KLASS | JDK_JFR_EVENT_SUBKLASS) |
apetushkov@9858 | 64 | #define IS_JDK_JFR_EVENT_KLASS(ptr) (((ptr)->trace_id() & JDK_JFR_EVENT_KLASS) != 0) |
apetushkov@9858 | 65 | #define IS_EVENT_HOST_KLASS(ptr) (((ptr)->trace_id() & EVENT_HOST_KLASS) != 0) |
apetushkov@9858 | 66 | #define IS_NOT_AN_EVENT_KLASS(ptr) (!IS_EVENT_KLASS(ptr)) |
apetushkov@9858 | 67 | #define IS_NOT_AN_EVENT_SUB_KLASS(ptr) (!IS_JDK_JFR_EVENT_SUBKLASS(ptr)) |
apetushkov@9858 | 68 | #define IS_NOT_JDK_JFR_EVENT_KLASS(ptr) (!IS_JDK_JFR_EVENT_KLASS(ptr)) |
apetushkov@9858 | 69 | #define EVENT_FLAGS_MASK(ptr) (((ptr)->trace_id() & ANY_EVENT) != 0) |
apetushkov@9858 | 70 | #define UNEVENT(ptr) ((ptr)->set_trace_id(((ptr)->trace_id()) & ~ANY_EVENT)) |
apetushkov@9858 | 71 | |
apetushkov@9858 | 72 | #define TRACE_ID_SHIFT 16 |
apetushkov@9858 | 73 | |
apetushkov@9858 | 74 | #define TRACE_ID_MASKED(id) (id & ~TRACE_ID_META_BITS) |
apetushkov@9858 | 75 | #define TRACE_ID_VALUE(id) (TRACE_ID_MASKED(id) >> TRACE_ID_SHIFT) |
apetushkov@9858 | 76 | #define TRACE_ID_MASKED_PTR(ptr) (TRACE_ID_MASKED((ptr)->trace_id())) |
apetushkov@9858 | 77 | #define TRACE_ID_RAW(ptr) ((ptr)->trace_id()) |
apetushkov@9858 | 78 | #define TRACE_ID(ptr) (TRACE_ID_MASKED_PTR(ptr) >> TRACE_ID_SHIFT) |
apetushkov@9858 | 79 | #define METHOD_ID(kls, meth) (TRACE_ID_MASKED_PTR(kls) | (meth)->method_idnum()) |
apetushkov@9858 | 80 | #define SET_TAG(ptr, tag) (set_traceid_bits(tag, (ptr)->trace_id_addr())) |
apetushkov@9858 | 81 | #define SET_LEAKP_TAG(ptr, tag) (set_leakp_traceid_bits(tag, (ptr)->trace_id_addr())) |
apetushkov@9858 | 82 | #define SET_TAG_CAS(ptr, tag) (set_traceid_bits_cas(tag, (ptr)->trace_id_addr())) |
apetushkov@9858 | 83 | #define SET_LEAKP_TAG_CAS(ptr, tag) (set_leakp_traceid_bits_cas(tag, (ptr)->trace_id_addr())) |
apetushkov@9858 | 84 | |
apetushkov@9858 | 85 | #define IN_USE_THIS_EPOCH_BIT (JfrTraceIdEpoch::in_use_this_epoch_bit()) |
apetushkov@9858 | 86 | #define IN_USE_PREV_EPOCH_BIT (JfrTraceIdEpoch::in_use_prev_epoch_bit()) |
apetushkov@9858 | 87 | #define LEAKP_IN_USE_THIS_EPOCH_BIT (JfrTraceIdEpoch::leakp_in_use_this_epoch_bit()) |
apetushkov@9858 | 88 | #define LEAKP_IN_USE_PREV_EPOCH_BIT (JfrTraceIdEpoch::leakp_in_use_prev_epoch_bit()) |
apetushkov@9858 | 89 | |
apetushkov@9858 | 90 | #define METHOD_IN_USE_THIS_EPOCH_BIT (JfrTraceIdEpoch::method_in_use_this_epoch_bit()) |
apetushkov@9858 | 91 | #define METHOD_IN_USE_PREV_EPOCH_BIT (JfrTraceIdEpoch::method_in_use_prev_epoch_bit()) |
apetushkov@9858 | 92 | #define METHOD_AND_CLASS_IN_USE_THIS_EPOCH_BITS (JfrTraceIdEpoch::method_and_class_in_use_this_epoch_bits()) |
apetushkov@9858 | 93 | #define METHOD_AND_CLASS_IN_USE_PREV_EPOCH_BITS (JfrTraceIdEpoch::method_and_class_in_use_prev_epoch_bits()) |
apetushkov@9858 | 94 | |
apetushkov@9858 | 95 | #define UNUSE_THIS_EPOCH_MASK (~(IN_USE_THIS_EPOCH_BIT)) |
apetushkov@9858 | 96 | #define UNUSE_PREV_EPOCH_MASK (~(IN_USE_PREV_EPOCH_BIT)) |
apetushkov@9858 | 97 | #define LEAKP_UNUSE_THIS_EPOCH_MASK UNUSE_THIS_EPOCH_MASK |
apetushkov@9858 | 98 | #define LEAKP_UNUSE_PREV_EPOCH_MASK UNUSE_PREV_EPOCH_MASK |
apetushkov@9858 | 99 | |
apetushkov@9858 | 100 | #define UNUSE_METHOD_THIS_EPOCH_MASK (~(METHOD_IN_USE_THIS_EPOCH_BIT)) |
apetushkov@9858 | 101 | #define UNUSE_METHOD_PREV_EPOCH_MASK (~(METHOD_IN_USE_PREV_EPOCH_BIT)) |
apetushkov@9858 | 102 | #define LEAKP_UNUSE_METHOD_THIS_EPOCH_MASK (~(UNUSE_METHOD_THIS_EPOCH_MASK)) |
apetushkov@9858 | 103 | #define LEAKP_UNUSE_METHOD_PREV_EPOCH_MASK (~UNUSE_METHOD_PREV_EPOCH_MASK)) |
apetushkov@9858 | 104 | |
apetushkov@9858 | 105 | #define UNUSE_METHOD_AND_CLASS_THIS_EPOCH_MASK (~(METHOD_IN_USE_THIS_EPOCH_BIT | IN_USE_THIS_EPOCH_BIT)) |
apetushkov@9858 | 106 | #define UNUSE_METHOD_AND_CLASS_PREV_EPOCH_MASK (~(METHOD_IN_USE_PREV_EPOCH_BIT | IN_USE_PREV_EPOCH_BIT)) |
apetushkov@9858 | 107 | |
apetushkov@9858 | 108 | #define SET_USED_THIS_EPOCH(ptr) (SET_TAG(ptr, IN_USE_THIS_EPOCH_BIT)) |
apetushkov@9858 | 109 | #define SET_USED_PREV_EPOCH(ptr) (SET_TAG_CAS(ptr, IN_USE_PREV_EPOCH_BIT)) |
apetushkov@9858 | 110 | #define SET_LEAKP_USED_THIS_EPOCH(ptr) (SET_LEAKP_TAG(ptr, IN_USE_THIS_EPOCH_BIT)) |
apetushkov@9858 | 111 | #define SET_LEAKP_USED_PREV_EPOCH(ptr) (SET_LEAKP_TAG(ptr, IN_USE_PREV_EPOCH_BIT)) |
apetushkov@9858 | 112 | #define SET_METHOD_AND_CLASS_USED_THIS_EPOCH(kls) (SET_TAG(kls, METHOD_AND_CLASS_IN_USE_THIS_EPOCH_BITS)) |
apetushkov@9858 | 113 | |
apetushkov@9858 | 114 | #define USED_THIS_EPOCH(ptr) (((ptr)->trace_id() & IN_USE_THIS_EPOCH_BIT) != 0) |
apetushkov@9858 | 115 | #define NOT_USED_THIS_EPOCH(ptr) (!USED_THIS_EPOCH(ptr)) |
apetushkov@9858 | 116 | #define USED_PREV_EPOCH(ptr) (((ptr)->trace_id() & IN_USE_PREV_EPOCH_BIT) != 0) |
apetushkov@9858 | 117 | #define NOT_USED_PREV_EPOCH(ptr) (!USED_PREV_EPOCH(ptr)) |
apetushkov@9858 | 118 | #define USED_ANY_EPOCH(ptr) (((ptr)->trace_id() & (USED_EPOCH_2_BIT | USED_EPOCH_1_BIT)) != 0) |
apetushkov@9858 | 119 | #define NOT_USED_ANY_EPOCH(ptr) (!USED_ANY_EPOCH(ptr)) |
apetushkov@9858 | 120 | |
apetushkov@9858 | 121 | #define LEAKP_USED_THIS_EPOCH(ptr) (((ptr)->trace_id() & LEAKP_IN_USE_THIS_EPOCH_BIT) != 0) |
apetushkov@9858 | 122 | #define LEAKP_NOT_USED_THIS_EPOCH(ptr) (!LEAKP_USED_THIS_EPOCH(ptr)) |
apetushkov@9858 | 123 | #define LEAKP_USED_PREV_EPOCH(ptr) (((ptr)->trace_id() & LEAKP_IN_USE_PREV_EPOCH_BIT) != 0) |
apetushkov@9858 | 124 | #define LEAKP_NOT_USED_PREV_EPOCH(ptr) (!LEAKP_USED_PREV_EPOCH(ptr)) |
apetushkov@9858 | 125 | #define LEAKP_USED_ANY_EPOCH(ptr) (((ptr)->trace_id() & (LEAKP_USED_EPOCH_2_BIT | LEAKP_USED_EPOCH_1_BIT)) != 0) |
apetushkov@9858 | 126 | #define LEAKP_NOT_USED_ANY_EPOCH(ptr) (!LEAKP_USED_ANY_EPOCH(ptr)) |
apetushkov@9858 | 127 | |
apetushkov@9858 | 128 | #define ANY_USED_THIS_EPOCH(ptr) (((ptr)->trace_id() & (LEAKP_IN_USE_THIS_EPOCH_BIT | IN_USE_THIS_EPOCH_BIT)) != 0) |
apetushkov@9858 | 129 | #define ANY_NOT_USED_THIS_EPOCH(ptr) (!ANY_USED_THIS_EPOCH(ptr)) |
apetushkov@9858 | 130 | #define ANY_USED_PREV_EPOCH(ptr) (((ptr)->trace_id() & (LEAKP_IN_USE_PREV_EPOCH_BIT | IN_USE_PREV_EPOCH_BIT)) != 0) |
apetushkov@9858 | 131 | #define ANY_NOT_USED_PREV_EPOCH(ptr) (!ANY_USED_PREV_EPOCH(ptr)) |
apetushkov@9858 | 132 | |
apetushkov@9858 | 133 | #define METHOD_USED_THIS_EPOCH(kls) (((kls)->trace_id() & METHOD_IN_USE_THIS_EPOCH_BIT) != 0) |
apetushkov@9858 | 134 | #define METHOD_NOT_USED_THIS_EPOCH(kls) (!METHOD_USED_THIS_EPOCH(kls)) |
apetushkov@9858 | 135 | #define METHOD_USED_PREV_EPOCH(kls) (((kls)->trace_id() & METHOD_IN_USE_PREV_EPOCH_BIT) != 0) |
apetushkov@9858 | 136 | #define METHOD_NOT_USED_PREV_EPOCH(kls) (!METHOD_USED_PREV_EPOCH(kls)) |
apetushkov@9858 | 137 | #define METHOD_USED_ANY_EPOCH(kls) (((kls)->trace_id() & (METHOD_IN_USE_PREV_EPOCH_BIT | METHOD_IN_USE_THIS_EPOCH_BIT)) != 0) |
apetushkov@9858 | 138 | |
apetushkov@9858 | 139 | #define METHOD_NOT_USED_ANY_EPOCH(kls) (!METHOD_USED_ANY_EPOCH(kls)) |
apetushkov@9858 | 140 | |
apetushkov@9858 | 141 | #define METHOD_AND_CLASS_USED_THIS_EPOCH(kls) ((((kls)->trace_id() & METHOD_AND_CLASS_IN_USE_THIS_EPOCH_BITS) == \ |
apetushkov@9858 | 142 | METHOD_AND_CLASS_IN_USE_THIS_EPOCH_BITS) != 0) |
apetushkov@9858 | 143 | |
apetushkov@9858 | 144 | #define METHOD_AND_CLASS_USED_PREV_EPOCH(kls) ((((kls)->trace_id() & METHOD_AND_CLASS_IN_USE_PREV_EPOCH_BITS) == \ |
apetushkov@9858 | 145 | METHOD_AND_CLASS_IN_USE_PREV_EPOCH_BITS) != 0) |
apetushkov@9858 | 146 | |
apetushkov@9858 | 147 | #define METHOD_AND_CLASS_USED_ANY_EPOCH(kls) ((METHOD_USED_ANY_EPOCH(kls) && USED_ANY_EPOCH(kls)) != 0) |
apetushkov@9858 | 148 | #define METHOD_AND_CLASS_NOT_USED_ANY_EPOCH(kls) (!METHOD_AND_CLASS_USED_ANY_EPOCH(kls)) |
apetushkov@9858 | 149 | |
apetushkov@9858 | 150 | #define LEAKP_METHOD_IN_USE_THIS_EPOCH (LEAKP_IN_USE_THIS_EPOCH_BIT | METHOD_IN_USE_THIS_EPOCH_BIT) |
apetushkov@9858 | 151 | #define LEAKP_METHOD_IN_USE_PREV_EPOCH (LEAKP_IN_USE_PREV_EPOCH_BIT | METHOD_IN_USE_PREV_EPOCH_BIT) |
apetushkov@9858 | 152 | #define LEAKP_METHOD_USED_THIS_EPOCH(ptr) ((((ptr)->trace_id() & LEAKP_METHOD_IN_USE_THIS_EPOCH) == \ |
apetushkov@9858 | 153 | LEAKP_METHOD_IN_USE_THIS_EPOCH) != 0) |
apetushkov@9858 | 154 | #define LEAKP_METHOD_NOT_USED_THIS_EPOCH(kls) (!LEAKP_METHOD_USED_THIS_EPOCH(kls)) |
apetushkov@9858 | 155 | #define LEAKP_METHOD_USED_PREV_EPOCH(ptr) ((((ptr)->trace_id() & LEAKP_METHOD_IN_USE_PREV_EPOCH) == \ |
apetushkov@9858 | 156 | LEAKP_METHOD_IN_USE_PREV_EPOCH) != 0) |
apetushkov@9858 | 157 | #define LEAKP_METHOD_NOT_USED_PREV_EPOCH(kls) (!LEAKP_METHOD_USED_PREV_EPOCH(kls)) |
apetushkov@9858 | 158 | |
apetushkov@9858 | 159 | #define UNUSE_THIS_EPOCH(ptr) (set_traceid_mask(UNUSE_THIS_EPOCH_MASK, (ptr)->trace_id_addr())) |
apetushkov@9858 | 160 | #define UNUSE_PREV_EPOCH(ptr) (set_traceid_mask(UNUSE_PREV_EPOCH_MASK, (ptr)->trace_id_addr())) |
apetushkov@9858 | 161 | #define UNUSE_METHOD_THIS_EPOCH(kls) (set_traceid_mask(UNUSE_METHOD_THIS_EPOCH_MASK, (kls)->trace_id_addr())) |
apetushkov@9858 | 162 | #define UNUSE_METHOD_PREV_EPOCH(kls) (set_traceid_mask(UNUSE_METHOD_PREV_EPOCH_MASK, (kls)->trace_id_addr())) |
apetushkov@9858 | 163 | |
apetushkov@9858 | 164 | #define LEAKP_UNUSE_THIS_EPOCH(ptr) (set_leakp_traceid_mask(UNUSE_THIS_EPOCH_MASK, (ptr)->trace_id_addr())) |
apetushkov@9858 | 165 | #define LEAKP_UNUSE_PREV_EPOCH(ptr) (set_leakp_traceid_mask(UNUSE_PREV_EPOCH_MASK, (ptr)->trace_id_addr())) |
apetushkov@9858 | 166 | #define LEAKP_UNUSE_METHOD_THIS_EPOCH(kls) (set_leakp_traceid_mask(UNUSE_METHOD_THIS_EPOCH_MASK, (kls)->trace_id_addr())) |
apetushkov@9858 | 167 | #define LEAKP_UNUSE_METHOD_PREV_EPOCH(kls) (set_leakp_traceid_mask(UNUSE_METHOD_PREV_EPOCH_MASK, (kls)->trace_id_addr())) |
apetushkov@9858 | 168 | |
apetushkov@9858 | 169 | #define ANY_USED(ptr) (((ptr)->trace_id() & ANY_USED_BITS) != 0) |
apetushkov@9858 | 170 | #define ANY_NOT_USED(ptr) (!ANY_USED(ptr)) |
apetushkov@9858 | 171 | |
apetushkov@9858 | 172 | #define UNUSE_METHOD_AND_CLASS_THIS_EPOCH(kls) (set_traceid_mask(UNUSE_METHOD_AND_CLASS_THIS_EPOCH_MASK, (kls)->trace_id_addr())) |
apetushkov@9858 | 173 | #define LEAKP_UNUSE_METHOD_AND_CLASS_THIS_EPOCH(kls) (set_leakp_traceid_mask(UNUSE_METHOD_AND_CLASS_THIS_EPOCH_MASK, (kls)->trace_id_addr())) |
apetushkov@9858 | 174 | #define UNUSE_METHOD_AND_CLASS_PREV_EPOCH(kls) (set_traceid_mask(UNUSE_METHOD_AND_CLASS_PREV_EPOCH_MASK, (kls)->trace_id_addr())) |
apetushkov@9858 | 175 | #define LEAKP_UNUSE_METHODS_AND_CLASS_PREV_EPOCH(kls) (set_leakp_traceid_mask(UNUSE_METHOD_AND_CLASS_PREV_EPOCH_MASK, (kls)->trace_id_addr())) |
apetushkov@9858 | 176 | |
apetushkov@9858 | 177 | #define METHOD_FLAG_USED_THIS_EPOCH(m) ((m)->is_trace_flag_set((jbyte)JfrTraceIdEpoch::in_use_this_epoch_bit())) |
apetushkov@9858 | 178 | #define METHOD_FLAG_NOT_USED_THIS_EPOCH(m) (!METHOD_FLAG_USED_THIS_EPOCH(m)) |
apetushkov@9858 | 179 | #define SET_METHOD_FLAG_USED_THIS_EPOCH(m) ((m)->set_trace_flag((jbyte)JfrTraceIdEpoch::in_use_this_epoch_bit())) |
apetushkov@9858 | 180 | #define METHOD_FLAG_USED_PREV_EPOCH(m) ((m)->is_trace_flag_set((jbyte)JfrTraceIdEpoch::in_use_prev_epoch_bit())) |
apetushkov@9858 | 181 | #define METHOD_FLAG_NOT_USED_PREV_EPOCH(m) (!METHOD_FLAG_USED_PREV_EPOCH(m)) |
apetushkov@9858 | 182 | #define METHOD_FLAG_USED_ANY_EPOCH(m) ((METHOD_FLAG_USED_THIS_EPOCH(m) || METHOD_FLAG_USED_PREV_EPOCH(m)) != 0) |
apetushkov@9858 | 183 | #define METHOD_FLAG_NOT_USED_ANY_EPOCH(m) ((METHOD_FLAG_NOT_USED_THIS_EPOCH(m) && METHOD_FLAG_NOT_USED_PREV_EPOCH(m)) != 0) |
apetushkov@9858 | 184 | #define CLEAR_METHOD_FLAG_USED_THIS_EPOCH(m) (clear_bits_cas((jbyte)JfrTraceIdEpoch::in_use_this_epoch_bit(), (m)->trace_flags_addr())) |
apetushkov@9858 | 185 | #define CLEAR_METHOD_FLAG_USED_PREV_EPOCH(m) (clear_bits_cas((jbyte)JfrTraceIdEpoch::in_use_prev_epoch_bit(), (m)->trace_flags_addr())) |
apetushkov@9858 | 186 | |
apetushkov@9858 | 187 | #endif // SHARE_VM_JFR_CHECKPOINT_TYPES_TRACEID_JFRTRACEIDMACROS_HPP |