Files
gtav-src/script/dev_ng/shared/include/debug/script_metrics_public.sch
T
2025-09-29 00:52:08 +02:00

147 lines
3.9 KiB
Scheme
Executable File

USING "rage_builtins.sch"
USING "globals.sch"
USING "net_events.sch"
#IF IS_DEBUG_BUILD
STRING DebugFilePath = "X:/gta5/build/dev"
STRING DebugFileName = "script_metrics.log"
PROC KEEP_ANY_SCRIPT_METRIC_RECORDING()
IF (b_ScriptMetricsAreRecording)
IF NETWORK_IS_GAME_IN_PROGRESS()
IF NETWORK_IS_HOST_OF_THIS_SCRIPT()
GlobalServerBD.g_bRecordScriptMetrics = TRUE
ENDIF
ELSE
GlobalServerBD.g_bRecordScriptMetrics = TRUE
ENDIF
ENDIF
ENDPROC
PROC INIT_THREAD_METRIC_RECORDINGS()
INT i
REPEAT MAX_SCRIPT_METRIC_THREADS i
RecordingThreads[i].Thread_ID = INT_TO_NATIVE(THREADID, -1)
RecordingThreads[i].iStartTime = 0
ENDREPEAT
ENDPROC
FUNC INT GET_THREAD_DURATION(THREADID Thread_ID)
INT i
INT iFreeSlot = -1
REPEAT MAX_SCRIPT_METRIC_THREADS i
IF IS_THREAD_ACTIVE(RecordingThreads[i].Thread_ID)
IF (RecordingThreads[i].Thread_ID = Thread_ID)
IF NOT (RecordingThreads[i].iStartTime = 0)
RETURN(GET_GAME_TIMER() - RecordingThreads[i].iStartTime)
ELSE
RecordingThreads[i].iStartTime = GET_GAME_TIMER()
RETURN(0)
ENDIF
ENDIF
ELSE
IF NOT (RecordingThreads[i].Thread_ID = INT_TO_NATIVE(THREADID, -1))
RecordingThreads[i].Thread_ID = INT_TO_NATIVE(THREADID, -1)
RecordingThreads[i].iStartTime = 0
ENDIF
IF (iFreeSlot = -1)
iFreeSlot = i
ENDIF
ENDIF
ENDREPEAT
// this thread is not being recorded yet, start now.
IF NOT (iFreeSlot = -1)
RecordingThreads[iFreeSlot].Thread_ID = Thread_ID
RecordingThreads[iFreeSlot].iStartTime = GET_GAME_TIMER()
RETURN(0)
ENDIF
RETURN(-1)
ENDFUNC
FUNC BOOL AM_I_HOST_OF_THREAD(THREADID Thread_ID)
IF NETWORK_IS_GAME_IN_PROGRESS()
IF NETWORK_IS_THREAD_A_NETWORK_SCRIPT(Thread_ID)
PLAYER_INDEX HostPlayer
HostPlayer = NETWORK_GET_HOST_OF_THREAD(Thread_ID)
IF (PLAYER_ID() = HostPlayer)
RETURN(TRUE)
ENDIF
RETURN(FALSE)
ELSE
PRINTLN("NETWORK_IS_THREAD_A_NETWORK_SCRIPT = FALSE - called by ", GET_THIS_SCRIPT_NAME())
RETURN(FALSE)
ENDIF
ELSE
RETURN(FALSE)
ENDIF
ENDFUNC
PROC ADD_SCRIPT_METRIC_MARKER(STRING sMarkerMessage)
IF (b_ScriptMetricsAreRecording)
TEXT_LABEL_63 strNetworkTime
strNetworkTime = "NetworkTime:"
strNetworkTime += NATIVE_TO_INT(GET_NETWORK_TIME())
strNetworkTime += ";"
TEXT_LABEL_63 strPlayerInfo
strPlayerInfo = "PID:"
strPlayerInfo += NATIVE_TO_INT(GET_PLAYER_INDEX())
strPlayerInfo += ";"
strPlayerInfo += "Team:"
IF NETWORK_IS_GAME_IN_PROGRESS()
strPlayerInfo += GET_PLAYER_TEAM(GET_PLAYER_INDEX())
ELSE
strPlayerInfo += -1
ENDIF
strPlayerInfo += ";"
IF AM_I_HOST_OF_THREAD(GET_ID_OF_THIS_THREAD())
strPlayerInfo += "Host:1;"
ELSE
strPlayerInfo += "Host:0;"
ENDIF
// CPRINTLN(DEBUG_METRIC_DATA,
// strPlayerInfo,
// "Script:",
// GET_THIS_SCRIPT_NAME(),
// ";Marker:",
// sMarkerMessage,
// ";"
// // times
// //";Current:", METRICS_GET_UPDATE_TIME_FOR_THREAD(GET_ID_OF_THIS_THREAD()),
// //";Average:", METRICS_GET_AVERAGE_UPDATE_TIME_FOR_THREAD(GET_ID_OF_THIS_THREAD()),
// //";Peak:", METRICS_GET_PEAK_UPDATE_TIME_FOR_THREAD(GET_ID_OF_THIS_THREAD()), ";"
// )
// write to external file
SAVE_STRING_TO_NAMED_DEBUG_FILE(strNetworkTime, DebugFilePath, DebugFileName)
SAVE_STRING_TO_NAMED_DEBUG_FILE(strPlayerInfo, DebugFilePath, DebugFileName)
SAVE_STRING_TO_NAMED_DEBUG_FILE("Script:", DebugFilePath, DebugFileName)
SAVE_STRING_TO_NAMED_DEBUG_FILE(GET_THIS_SCRIPT_NAME(), DebugFilePath, DebugFileName)
SAVE_STRING_TO_NAMED_DEBUG_FILE(";Marker:", DebugFilePath, DebugFileName)
SAVE_STRING_TO_NAMED_DEBUG_FILE(sMarkerMessage, DebugFilePath, DebugFileName)
SAVE_STRING_TO_NAMED_DEBUG_FILE(";", DebugFilePath, DebugFileName)
SAVE_NEWLINE_TO_NAMED_DEBUG_FILE(DebugFilePath, DebugFileName)
ENDIF
ENDPROC
#ENDIF
// eof