@@ -69,14 +69,15 @@ static int J9THREAD_PROC jfrSamplingThreadProc(void *entryArg);
6969static void jfrExecutionSampleCallback (J9VMThread *currentThread, IDATA handlerKey, void *userData);
7070static void jfrThreadCPULoadCallback (J9VMThread *currentThread, IDATA handlerKey, void *userData);
7171static void jfrCheckJFRCMDLineOptions (J9HookInterface **hook, UDATA eventNum, void *eventData, void *userData);
72- static jlong getTypeIdImpl (J9VMThread *currentThread, J9ClassLoader *classLoader, J9UTF8 *className, BOOLEAN freeName);
72+ static jlong getTypeIdImpl (J9VMThread *currentThread, J9ClassLoader *classLoader, J9UTF8 *className, BOOLEAN freeName, J9Class *clazz = NULL );
7373#if JAVA_SPEC_VERSION >= 17
7474static bool addEventIds (J9JavaVM *vm);
7575static bool addTypeIds (J9JavaVM *vm);
7676#endif /* JAVA_SPEC_VERSION >= 17 */
7777static void jfrShutdownInternalStructures (J9HookInterface **hook, UDATA eventNum, void *eventData, void *userData);
7878static void notifyForChunkRotation (J9VMThread *currentThread);
7979static void checkAvailableSpaceInGlobalBuffer (J9VMThread *currentThread);
80+ static void jfrClassInitialize (J9HookInterface **hook, UDATA eventNum, void *eventData, void *userData);
8081
8182static void
8283freeThreadIDs (J9VMThread *currentThread)
@@ -1159,6 +1160,7 @@ stopJFRRecording(J9JavaVM *vm)
11591160 (*vmHooks)->J9HookUnregister (vmHooks, J9HOOK_VM_MONITOR_CONTENDED_ENTERED , jfrVMMonitorEntered, NULL );
11601161 (*vmHooks)->J9HookUnregister (vmHooks, J9HOOK_VM_UNPARKED , jfrVMThreadParked, NULL );
11611162 (*vmHooks)->J9HookUnregister (vmHooks, J9HOOK_SYSTEM_GC_CALLED , jfrSystemGC, NULL );
1163+
11621164 /* Deregister GC-related hooks via gc_base */
11631165 vm->memoryManagerFunctions ->j9gc_deregister_jfr_hooks (vm);
11641166}
@@ -1717,13 +1719,25 @@ getTypeId(J9VMThread *currentThread, J9Class *clazz)
17171719}
17181720
17191721static jlong
1720- getTypeIdImpl (J9VMThread *currentThread, J9ClassLoader *classLoader, J9UTF8 *className, BOOLEAN freeName)
1722+ getTypeIdImpl (J9VMThread *currentThread, J9ClassLoader *classLoader, J9UTF8 *className, BOOLEAN freeName, J9Class *clazz )
17211723{
17221724 J9JavaVM *vm = currentThread->javaVM ;
17231725 jlong result = INVALID_TYPE_ID ;
17241726 J9JFRTypeID entry = {0 };
17251727 J9JFRTypeID *jfrTypeID = &entry;
17261728
1729+ if (NULL != clazz) {
1730+ if (NULL == vm->jfrState .jfrEventClassRef ) {
1731+ return -1 ;
1732+ }
1733+ J9Class *eventClass = J9VMJAVALANGCLASS_VMREF (currentThread, J9_JNI_UNWRAP_REFERENCE (vm->jfrState .jfrEventClassRef ));
1734+ if (!isSameOrSuperClassOf (eventClass, clazz)
1735+ || J9_ARE_NO_BITS_SET (clazz->romClass ->modifiers , J9AccAbstract)
1736+ ) {
1737+ return -1 ;
1738+ }
1739+ }
1740+
17271741 Assert_VM_mustHaveVMAccess (currentThread);
17281742
17291743 omrthread_monitor_enter (vm->jfrState .typeIDMonitor );
@@ -1749,7 +1763,6 @@ getTypeIdImpl(J9VMThread *currentThread, J9ClassLoader *classLoader, J9UTF8 *cla
17491763 setNativeOutOfMemoryError (currentThread, 0 , 0 );
17501764 goto done;
17511765 }
1752- classLoader->typeIDs = typeIDTable;
17531766
17541767#if JAVA_SPEC_VERSION >= 17
17551768 if (vm->systemClassLoader == classLoader) {
@@ -1770,6 +1783,8 @@ getTypeIdImpl(J9VMThread *currentThread, J9ClassLoader *classLoader, J9UTF8 *cla
17701783 }
17711784 }
17721785#endif /* JAVA_SPEC_VERSION >= 17 */
1786+
1787+ classLoader->typeIDs = typeIDTable;
17731788 }
17741789
17751790 jfrTypeID->className = className;
@@ -1780,6 +1795,8 @@ getTypeIdImpl(J9VMThread *currentThread, J9ClassLoader *classLoader, J9UTF8 *cla
17801795 jfrTypeID = &entry;
17811796 jfrTypeID->id = vm->jfrState .typeIDcount ;
17821797 jfrTypeID->free = freeName;
1798+ jfrTypeID->isEvent = FALSE ;
1799+ jfrTypeID->eventClass = NULL ;
17831800
17841801 vm->jfrState .typeIDcount += 1 ;
17851802 Assert_VM_true (vm->jfrState .typeIDcount > 0 );
@@ -1789,6 +1806,9 @@ getTypeIdImpl(J9VMThread *currentThread, J9ClassLoader *classLoader, J9UTF8 *cla
17891806 setNativeOutOfMemoryError (currentThread, 0 , 0 );
17901807 goto done;
17911808 }
1809+ } else if (NULL != clazz) {
1810+ jfrTypeID->isEvent = TRUE ;
1811+ jfrTypeID->eventClass = clazz;
17921812 }
17931813 result = jfrTypeID->id ;
17941814
@@ -1812,6 +1832,12 @@ initializeJFRv2(J9JavaVM *vm)
18121832 goto done;
18131833 }
18141834
1835+ if (J9_ARE_ALL_BITS_SET (vm->extendedRuntimeFlags3 , J9_EXTENDED_RUNTIME3_JFR_V2_SUPPORT )) {
1836+ if ((*vmHooks)->J9HookRegisterWithCallSite (vmHooks, J9HOOK_VM_CLASS_INITIALIZE , jfrClassInitialize, OMR_GET_CALLSITE (), NULL )) {
1837+ goto done;
1838+ }
1839+ }
1840+
18151841 if (0 != initializeJFRIDs (vm)) {
18161842 goto done;
18171843 }
@@ -1864,7 +1890,13 @@ jfrShutdownInternalStructures(J9HookInterface **hook, UDATA eventNum, void *even
18641890 internalReleaseVMAccess (currentThread);
18651891 vm->jfrState .jfrEventClassRef = NULL ;
18661892 vm->jfrState .jfrInternalEventClassRef = NULL ;
1893+ <<<<<<< HEAD
18671894 vm->jfrState .chunkRotationMonitor = NULL ;
1895+ =======
1896+ if (J9_ARE_ALL_BITS_SET (vm->extendedRuntimeFlags3 , J9_EXTENDED_RUNTIME3_JFR_V2_SUPPORT )) {
1897+ (*hook)->J9HookUnregister (hook, J9HOOK_VM_CLASS_INITIALIZE , jfrClassInitialize, NULL );
1898+ }
1899+ >>>>>>> 9d3b593677 (JVM_getAllEventClasses support)
18681900}
18691901
18701902static void
@@ -2029,6 +2061,8 @@ addType(J9JavaVM *vm, const char *eventOrTypeName, UDATA id, bool isEvent)
20292061 entry.id = id;
20302062 entry.className = className;
20312063 entry.free = TRUE ;
2064+ entry.isEvent = isEvent;
2065+ entry.eventClass = NULL ;
20322066
20332067 /* Add to hash table */
20342068 if (NULL == hashTableAdd (typeIDTable, &entry)) {
@@ -2402,6 +2436,17 @@ checkAvailableSpaceInGlobalBuffer(J9VMThread *currentThread)
24022436 }
24032437}
24042438
2439+ void
2440+ jfrClassInitialize (J9HookInterface **hook, UDATA eventNum, void *eventData, void *userData)
2441+ {
2442+ J9VMClassInitializeEvent *event = (J9VMClassInitializeEvent *)eventData;
2443+ J9VMThread *currentThread = event->currentThread ;
2444+ J9Class *clazz = event->clazz ;
2445+
2446+ /* getTypeIdImpl will add clazz to the TypeID table. */
2447+ getTypeIdImpl (currentThread, clazz->classLoader , J9ROMCLASS_CLASSNAME (clazz->romClass ), FALSE , clazz);
2448+ }
2449+
24052450} /* extern "C" */
24062451
24072452#endif /* defined(J9VM_OPT_JFR) */
0 commit comments