59 } |
59 } |
60 |
60 |
61 inline traceid JfrTraceId::use(const Klass* klass) { |
61 inline traceid JfrTraceId::use(const Klass* klass) { |
62 assert(klass != NULL, "invariant"); |
62 assert(klass != NULL, "invariant"); |
63 if (SHOULD_TAG(klass)) { |
63 if (SHOULD_TAG(klass)) { |
64 JfrTraceIdEpoch::set_klass_tagged_in_epoch(); |
64 JfrTraceIdEpoch::set_changed_tag_state(); |
65 return set_used_and_get(klass); |
65 return set_used_and_get(klass); |
66 } |
66 } |
67 assert(USED_THIS_EPOCH(klass), "invariant"); |
67 assert(USED_THIS_EPOCH(klass), "invariant"); |
68 return TRACE_ID(klass); |
68 return TRACE_ID(klass); |
69 } |
69 } |
74 } |
74 } |
75 |
75 |
76 inline traceid JfrTraceId::use(const Klass* klass, const Method* method) { |
76 inline traceid JfrTraceId::use(const Klass* klass, const Method* method) { |
77 assert(klass != NULL, "invariant"); |
77 assert(klass != NULL, "invariant"); |
78 assert(method != NULL, "invariant"); |
78 assert(method != NULL, "invariant"); |
79 SET_METHOD_FLAG_USED_THIS_EPOCH(method); |
79 bool changed_tag_state = false; |
80 if (SHOULD_TAG_KLASS_METHOD(klass)) { |
80 if (SHOULD_TAG_KLASS_METHOD(klass)) { |
81 JfrTraceIdEpoch::set_klass_tagged_in_epoch(); |
|
82 SET_METHOD_AND_CLASS_USED_THIS_EPOCH(klass); |
81 SET_METHOD_AND_CLASS_USED_THIS_EPOCH(klass); |
|
82 changed_tag_state = true; |
83 } |
83 } |
84 assert(METHOD_AND_CLASS_USED_THIS_EPOCH(klass), "invariant"); |
84 assert(METHOD_AND_CLASS_USED_THIS_EPOCH(klass), "invariant"); |
|
85 if (METHOD_FLAG_NOT_USED_THIS_EPOCH(method)) { |
|
86 SET_METHOD_FLAG_USED_THIS_EPOCH(method); |
|
87 changed_tag_state = true; |
|
88 } |
|
89 assert(METHOD_FLAG_USED_THIS_EPOCH(method), "invariant"); |
|
90 if (changed_tag_state) { |
|
91 JfrTraceIdEpoch::set_changed_tag_state(); |
|
92 } |
85 return (METHOD_ID(klass, method)); |
93 return (METHOD_ID(klass, method)); |
86 } |
94 } |
87 |
95 |
88 inline traceid JfrTraceId::use(const ModuleEntry* module) { |
96 inline traceid JfrTraceId::use(const ModuleEntry* module) { |
89 assert(module != NULL, "invariant"); |
97 assert(module != NULL, "invariant"); |
96 } |
104 } |
97 |
105 |
98 inline traceid JfrTraceId::use(const ClassLoaderData* cld) { |
106 inline traceid JfrTraceId::use(const ClassLoaderData* cld) { |
99 assert(cld != NULL, "invariant"); |
107 assert(cld != NULL, "invariant"); |
100 return cld->is_unsafe_anonymous() ? 0 : set_used_and_get(cld); |
108 return cld->is_unsafe_anonymous() ? 0 : set_used_and_get(cld); |
|
109 } |
|
110 |
|
111 inline void JfrTraceId::set_leakp(const Klass* klass, const Method* method) { |
|
112 assert(METHOD_AND_CLASS_USED_THIS_EPOCH(klass), "invariant"); |
|
113 assert(METHOD_FLAG_USED_THIS_EPOCH(method), "invariant"); |
|
114 SET_LEAKP(klass); |
|
115 SET_METHOD_LEAKP(method); |
101 } |
116 } |
102 |
117 |
103 inline bool JfrTraceId::in_visible_set(const Klass* klass) { |
118 inline bool JfrTraceId::in_visible_set(const Klass* klass) { |
104 assert(klass != NULL, "invariant"); |
119 assert(klass != NULL, "invariant"); |
105 assert(((JavaThread*)Thread::current())->thread_state() == _thread_in_vm, "invariant"); |
120 assert(((JavaThread*)Thread::current())->thread_state() == _thread_in_vm, "invariant"); |