@@ -468,6 +468,8 @@ void SafepointSynchronize::disarm_safepoint() {
468468// operation has been carried out
469469void SafepointSynchronize::end () {
470470 assert (Threads_lock->owned_by_self (), " must hold Threads_lock" );
471+ SafepointTracing::leave ();
472+
471473 EventSafepointEnd event;
472474 assert (Thread::current ()->is_VM_thread (), " Only VM thread can execute a safepoint" );
473475
@@ -862,6 +864,7 @@ void ThreadSafepointState::handle_polling_page_exception() {
862864
863865jlong SafepointTracing::_last_safepoint_begin_time_ns = 0 ;
864866jlong SafepointTracing::_last_safepoint_sync_time_ns = 0 ;
867+ jlong SafepointTracing::_last_safepoint_leave_time_ns = 0 ;
865868jlong SafepointTracing::_last_safepoint_end_time_ns = 0 ;
866869jlong SafepointTracing::_last_app_time_ns = 0 ;
867870int SafepointTracing::_nof_threads = 0 ;
@@ -963,6 +966,10 @@ void SafepointTracing::synchronized(int nof_threads, int nof_running, int traps)
963966 RuntimeService::record_safepoint_synchronized (_last_safepoint_sync_time_ns - _last_safepoint_begin_time_ns);
964967}
965968
969+ void SafepointTracing::leave () {
970+ _last_safepoint_leave_time_ns = os::javaTimeNanos ();
971+ }
972+
966973void SafepointTracing::end () {
967974 _last_safepoint_end_time_ns = os::javaTimeNanos ();
968975
@@ -981,12 +988,14 @@ void SafepointTracing::end() {
981988 " Time since last: " JLONG_FORMAT " ns, "
982989 " Reaching safepoint: " JLONG_FORMAT " ns, "
983990 " At safepoint: " JLONG_FORMAT " ns, "
991+ " Leaving safepoint: " JLONG_FORMAT " ns, "
984992 " Total: " JLONG_FORMAT " ns" ,
985993 VM_Operation::name (_current_type),
986994 _last_app_time_ns,
987- _last_safepoint_sync_time_ns - _last_safepoint_begin_time_ns,
988- _last_safepoint_end_time_ns - _last_safepoint_sync_time_ns,
989- _last_safepoint_end_time_ns - _last_safepoint_begin_time_ns
995+ _last_safepoint_sync_time_ns - _last_safepoint_begin_time_ns,
996+ _last_safepoint_leave_time_ns - _last_safepoint_sync_time_ns,
997+ _last_safepoint_end_time_ns - _last_safepoint_leave_time_ns,
998+ _last_safepoint_end_time_ns - _last_safepoint_begin_time_ns
990999 );
9911000
9921001 RuntimeService::record_safepoint_end (_last_safepoint_end_time_ns - _last_safepoint_sync_time_ns);
0 commit comments