74 static traceid next_class_loader_data_id() { |
74 static traceid next_class_loader_data_id() { |
75 static volatile traceid cld_id_counter = 1; |
75 static volatile traceid cld_id_counter = 1; |
76 return atomic_inc(&cld_id_counter) << TRACE_ID_SHIFT; |
76 return atomic_inc(&cld_id_counter) << TRACE_ID_SHIFT; |
77 } |
77 } |
78 |
78 |
|
79 static bool found_jdk_internal_event_klass = false; |
79 static bool found_jdk_jfr_event_klass = false; |
80 static bool found_jdk_jfr_event_klass = false; |
80 |
81 |
81 static void check_klass(const Klass* klass) { |
82 static void check_klass(const Klass* klass) { |
82 assert(klass != NULL, "invariant"); |
83 assert(klass != NULL, "invariant"); |
83 if (found_jdk_jfr_event_klass) { |
84 if (found_jdk_internal_event_klass && found_jdk_jfr_event_klass) { |
84 return; |
85 return; |
85 } |
86 } |
|
87 static const Symbol* jdk_internal_event_sym = NULL; |
|
88 if (jdk_internal_event_sym == NULL) { |
|
89 // setup when loading the first TypeArrayKlass (Universe::genesis) hence single threaded invariant |
|
90 jdk_internal_event_sym = SymbolTable::new_permanent_symbol("jdk/internal/event/Event", Thread::current()); |
|
91 } |
|
92 assert(jdk_internal_event_sym != NULL, "invariant"); |
|
93 |
86 static const Symbol* jdk_jfr_event_sym = NULL; |
94 static const Symbol* jdk_jfr_event_sym = NULL; |
87 if (jdk_jfr_event_sym == NULL) { |
95 if (jdk_jfr_event_sym == NULL) { |
88 // setup when loading the first TypeArrayKlass (Universe::genesis) hence single threaded invariant |
96 // setup when loading the first TypeArrayKlass (Universe::genesis) hence single threaded invariant |
89 jdk_jfr_event_sym = SymbolTable::new_permanent_symbol("jdk/jfr/Event", Thread::current()); |
97 jdk_jfr_event_sym = SymbolTable::new_permanent_symbol("jdk/jfr/Event", Thread::current()); |
90 } |
98 } |
91 assert(jdk_jfr_event_sym != NULL, "invariant"); |
99 assert(jdk_jfr_event_sym != NULL, "invariant"); |
92 if (jdk_jfr_event_sym == klass->name() && klass->class_loader() == NULL) { |
100 const Symbol* const klass_name = klass->name(); |
93 found_jdk_jfr_event_klass = true; |
101 |
94 JfrTraceId::tag_as_jdk_jfr_event(klass); |
102 if (!found_jdk_internal_event_klass) { |
|
103 if (jdk_internal_event_sym == klass_name && klass->class_loader() == NULL) { |
|
104 found_jdk_internal_event_klass = true; |
|
105 JfrTraceId::tag_as_jdk_jfr_event(klass); |
|
106 return; |
|
107 } |
|
108 } |
|
109 |
|
110 if (!found_jdk_jfr_event_klass) { |
|
111 if (jdk_jfr_event_sym == klass_name && klass->class_loader() == NULL) { |
|
112 found_jdk_jfr_event_klass = true; |
|
113 JfrTraceId::tag_as_jdk_jfr_event(klass); |
|
114 return; |
|
115 } |
95 } |
116 } |
96 } |
117 } |
97 |
118 |
98 void JfrTraceId::assign(const Klass* klass) { |
119 void JfrTraceId::assign(const Klass* klass) { |
99 assert(klass != NULL, "invariant"); |
120 assert(klass != NULL, "invariant"); |