24 |
24 |
25 #ifndef SHARE_JFR_SUPPORT_JFRTRACEIDEXTENSION_HPP |
25 #ifndef SHARE_JFR_SUPPORT_JFRTRACEIDEXTENSION_HPP |
26 #define SHARE_JFR_SUPPORT_JFRTRACEIDEXTENSION_HPP |
26 #define SHARE_JFR_SUPPORT_JFRTRACEIDEXTENSION_HPP |
27 |
27 |
28 #include "jfr/recorder/checkpoint/types/traceid/jfrTraceId.hpp" |
28 #include "jfr/recorder/checkpoint/types/traceid/jfrTraceId.hpp" |
|
29 #include "utilities/macros.hpp" |
29 |
30 |
30 #define DEFINE_TRACE_ID_FIELD mutable traceid _trace_id |
31 #define DEFINE_TRACE_ID_FIELD mutable traceid _trace_id |
31 |
32 |
32 #define DEFINE_TRACE_ID_METHODS \ |
33 #define DEFINE_TRACE_ID_METHODS \ |
33 traceid trace_id() const { return _trace_id; } \ |
34 traceid trace_id() const { return _trace_id; } \ |
41 #define REMOVE_ID(k) JfrTraceId::remove(k); |
42 #define REMOVE_ID(k) JfrTraceId::remove(k); |
42 #define RESTORE_ID(k) JfrTraceId::restore(k); |
43 #define RESTORE_ID(k) JfrTraceId::restore(k); |
43 |
44 |
44 class JfrTraceFlag { |
45 class JfrTraceFlag { |
45 private: |
46 private: |
46 mutable jbyte _flags; |
47 mutable jshort _flags; |
47 public: |
48 public: |
48 JfrTraceFlag() : _flags(0) {} |
49 JfrTraceFlag() : _flags(0) {} |
49 explicit JfrTraceFlag(jbyte flags) : _flags(flags) {} |
50 bool is_set(jshort flag) const { |
50 void set_flag(jbyte flag) const { |
|
51 _flags |= flag; |
|
52 } |
|
53 void clear_flag(jbyte flag) const { |
|
54 _flags &= (~flag); |
|
55 } |
|
56 jbyte flags() const { return _flags; } |
|
57 bool is_set(jbyte flag) const { |
|
58 return (_flags & flag) != 0; |
51 return (_flags & flag) != 0; |
59 } |
52 } |
60 jbyte* const flags_addr() const { |
53 |
61 return &_flags; |
54 jshort flags() const { |
|
55 return _flags; |
|
56 } |
|
57 |
|
58 void set_flags(jshort flags) const { |
|
59 _flags = flags; |
|
60 } |
|
61 |
|
62 jbyte* flags_addr() const { |
|
63 #ifdef VM_LITTLE_ENDIAN |
|
64 return (jbyte*)&_flags; |
|
65 #else |
|
66 return ((jbyte*)&_flags) + 1; |
|
67 #endif |
|
68 } |
|
69 |
|
70 jbyte* meta_addr() const { |
|
71 #ifdef VM_LITTLE_ENDIAN |
|
72 return (jbyte*)(&_flags) + 1; |
|
73 #else |
|
74 return (jbyte*)&_flags; |
|
75 #endif |
62 } |
76 } |
63 }; |
77 }; |
64 |
78 |
65 #define DEFINE_TRACE_FLAG mutable JfrTraceFlag _trace_flags |
79 #define DEFINE_TRACE_FLAG mutable JfrTraceFlag _trace_flags |
66 |
80 |
67 #define DEFINE_TRACE_FLAG_ACCESSOR \ |
81 #define DEFINE_TRACE_FLAG_ACCESSOR \ |
68 void set_trace_flag(jbyte flag) const { \ |
82 bool is_trace_flag_set(jshort flag) const { \ |
69 _trace_flags.set_flag(flag); \ |
83 return _trace_flags.is_set(flag); \ |
70 } \ |
84 } \ |
71 jbyte trace_flags() const { \ |
85 jshort trace_flags() const { \ |
72 return _trace_flags.flags(); \ |
86 return _trace_flags.flags(); \ |
73 } \ |
87 } \ |
74 bool is_trace_flag_set(jbyte flag) const { \ |
88 void set_trace_flags(jshort flags) const { \ |
75 return _trace_flags.is_set(flag); \ |
89 _trace_flags.set_flags(flags); \ |
76 } \ |
90 } \ |
77 jbyte* const trace_flags_addr() const { \ |
91 jbyte* trace_flags_addr() const { \ |
78 return _trace_flags.flags_addr(); \ |
92 return _trace_flags.flags_addr(); \ |
|
93 } \ |
|
94 jbyte* trace_meta_addr() const { \ |
|
95 return _trace_flags.meta_addr(); \ |
79 } |
96 } |
80 |
97 |
81 #endif // SHARE_JFR_SUPPORT_JFRTRACEIDEXTENSION_HPP |
98 #endif // SHARE_JFR_SUPPORT_JFRTRACEIDEXTENSION_HPP |