@@ -557,8 +557,8 @@ JavaCoreDumpWriter::JavaCoreDumpWriter(
557557 CALL_PROTECT (writeSharedClassSection, _Error);
558558#endif
559559 CALL_PROTECT (writeClassSection, _Error);
560- CALL_PROTECT (writeTrailer, _Error);
561560 CALL_PROTECT (writeSynchronousCompilationSection, _Error);
561+ CALL_PROTECT (writeTrailer, _Error);
562562
563563 /* Record the status of the operation */
564564 _FileMode = _FileMode || _OutputStream.isOpen ();
@@ -2920,37 +2920,82 @@ JavaCoreDumpWriter::writeHookSection(void)
29202920void
29212921JavaCoreDumpWriter::writeSynchronousCompilationSection (void )
29222922{
2923+ char timeStampStart[_MaximumTimeStampLength + 1 ];
2924+ char timeStampEnd[_MaximumTimeStampLength + 1 ];
2925+ PORT_ACCESS_FROM_PORT (_PortLibrary);
2926+ OMRPORT_ACCESS_FROM_J9PORT (PORTLIB );
2927+
29232928 J9JITConfig *jitConfig = _VirtualMachine->jitConfig ;
29242929 if (NULL == jitConfig || NULL == jitConfig->syncCompStats ) {
29252930 return ;
29262931 }
29272932
29282933 J9JITSyncCompilationStatistics *stats = jitConfig->syncCompStats ;
29292934
2930- _OutputStream.writeCharacters (" 0SECTION Synchronous compliations info dump routine\n " );
2931- _OutputStream.writeCharacters (" NULL = =============================\n " );
2932- _OutputStream.writeCharacters (" 1NOTE This data is reset after each javacore file is written\n " );
2933- _OutputStream.writeCharacters (" NULL ------------------------------------------------------------------------\n " );
2934- _OutputStream.writeCharacters (" 1JITSYNCSTATS Synchronous Compilation Statistics\n " );
2935- _OutputStream.writeCharacters (" NULL ------------------------------------------------------------------------\n " );
2936- _OutputStream.writeCharacters (" 2JITSYNCCOUNT Total synchronous compilations: " );
2935+ _OutputStream.writeCharacters (" 0SECTION Synchronous compliations info dump routine\n " );
2936+ _OutputStream.writeCharacters (" NULL =============================\n " );
2937+ _OutputStream.writeCharacters (" 1NOTE This data is reset after each javacore file is written\n " );
2938+ _OutputStream.writeCharacters (" NULL ------------------------------------------------------------------------\n " );
2939+ _OutputStream.writeCharacters (" 1JITSYNCSTATS Synchronous Compilation Statistics\n " );
2940+ _OutputStream.writeCharacters (" NULL ------------------------------------------------------------------------\n " );
2941+ _OutputStream.writeCharacters (" 2JITSYNCCOUNT Total synchronous compilations: " );
29372942 _OutputStream.writeInteger (stats->totalCount , " %u" );
29382943 _OutputStream.writeCharacters (" \n " );
2939- _OutputStream.writeCharacters (" 2JITINVALCOUNT Due to invalidations: " );
2944+ _OutputStream.writeCharacters (" 2JITINVALCOUNT Due to invalidations: " );
29402945 _OutputStream.writeInteger (stats->invalidationCount , " %u" );
29412946 _OutputStream.writeCharacters (" \n " );
2942- _OutputStream.writeCharacters (" 2JITTOTALWAIT Total application wait time: " );
2947+ _OutputStream.writeCharacters (" 2JITTOTALWAIT Total application wait time: " );
29432948 _OutputStream.writeInteger (stats->totalWaitTime , " %llu" );
29442949 _OutputStream.writeCharacters (" us\n " );
2945- _OutputStream.writeCharacters (" 2JITLONGEST Longest Synchronous Compilation\n " );
2946- _OutputStream.writeCharacters (" 3JITWAITTIME Wait time: " );
2947- _OutputStream.writeInteger (stats->longestWaitTime , " %llu" );
2948- _OutputStream.writeCharacters (" us\n " );
2950+ if (stats->longestWaitTime != 0 ) {
2951+ _OutputStream.writeCharacters (" 2JITLONGEST Longest Synchronous Compilation\n " );
2952+ _OutputStream.writeCharacters (" 3JITWAITTIME Wait time: " );
2953+ _OutputStream.writeInteger (stats->longestWaitTime , " %llu" );
2954+ _OutputStream.writeCharacters (" us\n " );
2955+
2956+ _OutputStream.writeCharacters (" 3JITSTARTTIME Wait time start: " );
2957+ omrstr_ftime_ex (timeStampStart, _MaximumTimeStampLength, " %Y-%m-%dT%H:%M:%S" , stats->longestWaitTimeStart , OMRSTR_FTIME_FLAG_LOCAL );
2958+ timeStampStart[_MaximumTimeStampLength] = ' \0 ' ;
2959+ _OutputStream.writeCharacters (timeStampStart);
2960+ _OutputStream.writeInteger64 (stats->longestWaitTimeStart % 1000 , " .%03llu" );
2961+ _OutputStream.writeCharacters (" \n " );
2962+
2963+ _OutputStream.writeCharacters (" 3JITENDTIME Wait time end: " );
2964+ omrstr_ftime_ex (timeStampEnd, _MaximumTimeStampLength, " %Y-%m-%dT%H:%M:%S" , stats->longestWaitTimeEnd , OMRSTR_FTIME_FLAG_LOCAL );
2965+ timeStampEnd[_MaximumTimeStampLength] = ' \0 ' ;
2966+ _OutputStream.writeCharacters (timeStampEnd);
2967+ _OutputStream.writeInteger64 (stats->longestWaitTimeEnd % 1000 , " .%03llu" );
2968+ _OutputStream.writeCharacters (" \n " );
2969+
2970+ _OutputStream.writeCharacters (" 3JITMETHODNAME Method Name: " );
2971+ _OutputStream.writeCharacters (stats->longestWaitMethodName );
2972+ _OutputStream.writeCharacters (" \n " );
2973+ _OutputStream.writeCharacters (" 3JITMETHODCLASS Method Class: " );
2974+ _OutputStream.writeCharacters (stats->longestWaitMethodClass );
2975+ _OutputStream.writeCharacters (" \n " );
2976+ _OutputStream.writeCharacters (" 3JITMETHODSIGNATURE Method Signature: " );
2977+ _OutputStream.writeCharacters (stats->longestWaitMethodSignature );
2978+ _OutputStream.writeCharacters (" \n " );
2979+ }
2980+
2981+
29492982
29502983 stats->totalCount = 0 ;
29512984 stats->invalidationCount = 0 ;
29522985 stats->totalWaitTime = 0 ;
29532986 stats->longestWaitTime = 0 ;
2987+ if (stats->longestWaitMethodName != NULL ) {
2988+ free (stats->longestWaitMethodName );
2989+ stats->longestWaitMethodName = NULL ;
2990+ }
2991+ if (stats->longestWaitMethodClass != NULL ) {
2992+ free (stats->longestWaitMethodClass );
2993+ stats->longestWaitMethodClass = NULL ;
2994+ }
2995+ if (stats->longestWaitMethodSignature != NULL ) {
2996+ free (stats->longestWaitMethodSignature );
2997+ stats->longestWaitMethodSignature = NULL ;
2998+ }
29542999}
29553000
29563001#if defined(OMR_OPT_CUDA)
0 commit comments