8170672: Event-based tracing to support classloader instances

Reviewed-by: hseigel, egahlin
This commit is contained in:
Markus Grönlund 2016-12-06 22:49:17 +01:00
parent 8bf0437430
commit 6a685f1d63
13 changed files with 95 additions and 59 deletions

View file

@ -621,35 +621,28 @@ instanceKlassHandle SystemDictionary::handle_parallel_super_load(
return (nh);
}
// utility function for class load event
static void post_class_load_event(const Ticks& start_time,
instanceKlassHandle k,
Handle initiating_loader) {
const ClassLoaderData* init_cld) {
#if INCLUDE_TRACE
EventClassLoad event(UNTIMED);
if (event.should_commit()) {
event.set_starttime(start_time);
event.set_loadedClass(k());
oop defining_class_loader = k->class_loader();
event.set_definingClassLoader(defining_class_loader != NULL ?
defining_class_loader->klass() : (Klass*)NULL);
oop class_loader = initiating_loader.is_null() ? (oop)NULL : initiating_loader();
event.set_initiatingClassLoader(class_loader != NULL ?
class_loader->klass() : (Klass*)NULL);
event.set_definingClassLoader(k->class_loader_data());
event.set_initiatingClassLoader(init_cld);
event.commit();
}
#endif // INCLUDE_TRACE
}
// utility function for class define event
static void class_define_event(instanceKlassHandle k) {
static void class_define_event(instanceKlassHandle k,
const ClassLoaderData* def_cld) {
#if INCLUDE_TRACE
EventClassDefine event(UNTIMED);
EventClassDefine event;
if (event.should_commit()) {
event.set_definedClass(k());
oop defining_class_loader = k->class_loader();
event.set_definingClassLoader(defining_class_loader != NULL ?
defining_class_loader->klass() : (Klass*)NULL);
event.set_definingClassLoader(def_cld);
event.commit();
}
#endif // INCLUDE_TRACE
@ -907,7 +900,7 @@ Klass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
return NULL;
}
post_class_load_event(class_load_start_time, k, class_loader);
post_class_load_event(class_load_start_time, k, loader_data);
#ifdef ASSERT
{
@ -1090,7 +1083,7 @@ Klass* SystemDictionary::parse_stream(Symbol* class_name,
JvmtiExport::post_class_load((JavaThread *) THREAD, k());
}
post_class_load_event(class_load_start_time, k, class_loader);
post_class_load_event(class_load_start_time, k, loader_data);
}
assert(host_klass != NULL || NULL == cp_patches,
"cp_patches only found with host_klass");
@ -1641,7 +1634,7 @@ void SystemDictionary::define_instance_class(instanceKlassHandle k, TRAPS) {
JvmtiExport::post_class_load((JavaThread *) THREAD, k());
}
class_define_event(k);
class_define_event(k, loader_data);
}
// Support parallel classloading