Makes our master far less dumpy in private (#21488)

* maybe that will help?

* main server will profile but private servers won't unless enabled
This commit is contained in:
Chubbygummibear
2024-02-22 18:56:41 -08:00
committed by GitHub
parent 8e2b15cf27
commit 7fe776c741
7 changed files with 48 additions and 6 deletions

View File

@@ -474,8 +474,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
var/newdrift = ((REALTIMEOFDAY - init_timeofday) - (world.time - init_time)) / world.tick_lag
tickdrift = max(0, MC_AVERAGE_FAST(tickdrift, newdrift))
var/starting_tick_usage = TICK_USAGE
if(newdrift - olddrift >= CONFIG_GET(number/drift_dump_threshold))
//Yog: profile dumping was throttling lower performance computers, so we're going to have it disabled by default but you can enable it via config flags
if(newdrift - olddrift >= CONFIG_GET(number/drift_dump_threshold) && CONFIG_GET(flag/auto_profile))
AttemptProfileDump(CONFIG_GET(number/drift_profile_delay))
olddrift = newdrift

View File

@@ -0,0 +1,28 @@
#define INIT_PROFILE_NAME "init_profiler.json"
///Subsystem exists so we can separately log init time costs from the costs of general operation
///Hopefully this makes sorting out what causes problems when easier
SUBSYSTEM_DEF(init_profiler)
name = "Init Profiler"
init_order = INIT_ORDER_INIT_PROFILER
init_stage = INITSTAGE_MAX
flags = SS_NO_FIRE
/datum/controller/subsystem/init_profiler/Initialize()
if(CONFIG_GET(flag/auto_profile))
write_init_profile()
return SS_INIT_SUCCESS
/datum/controller/subsystem/init_profiler/proc/write_init_profile()
var/current_profile_data = world.Profile(PROFILE_REFRESH, format = "json")
CHECK_TICK
if(!length(current_profile_data)) //Would be nice to have explicit proc to check this
stack_trace("Warning, profiling stopped manually before dump.")
var/prof_file = file("[GLOB.log_directory]/[INIT_PROFILE_NAME]")
if(fexists(prof_file))
fdel(prof_file)
WRITE_FILE(prof_file, current_profile_data)
world.Profile(PROFILE_CLEAR) //Now that we're written this data out, dump it. We don't want it getting mixed up with our current round data
#undef INIT_PROFILE_NAME