mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
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:
@@ -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
|
||||
|
||||
|
||||
28
code/controllers/subsystem/init_profiler.dm
Normal file
28
code/controllers/subsystem/init_profiler.dm
Normal 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
|
||||
Reference in New Issue
Block a user