mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 22:50:26 +01:00
Emergency Profile Dumps (#75924)
## About The Pull Request Adds some hooks to the MC that detect if something ate a ton of real time last tick, and reacts by dumping our current profile into a file It's really frustrating to see a spike in td in our performance logs, but see no reason in the profile because it's only taken every 5 minutes. This resolves that I'm throwing this up so mso can give it a look over, not sure if I want to use defines or configs here, taking suggestions 🆑 server: Adds a system to emergency dump profiles if too much time passes between ticks config: Added configs that control how often emergency profiles are allowed to dump, alongside the threshold for what counts as too much time between ticks /🆑
This commit is contained in:
@@ -21,13 +21,20 @@ SUBSYSTEM_DEF(profiler)
|
||||
StopProfiling() //Stop the early start profiler
|
||||
return SS_INIT_SUCCESS
|
||||
|
||||
/datum/controller/subsystem/profiler/fire()
|
||||
/datum/controller/subsystem/profiler/OnConfigLoad()
|
||||
if(CONFIG_GET(flag/auto_profile))
|
||||
DumpFile()
|
||||
StartProfiling()
|
||||
can_fire = TRUE
|
||||
else
|
||||
StopProfiling()
|
||||
can_fire = FALSE
|
||||
|
||||
/datum/controller/subsystem/profiler/fire()
|
||||
DumpFile()
|
||||
|
||||
/datum/controller/subsystem/profiler/Shutdown()
|
||||
if(CONFIG_GET(flag/auto_profile))
|
||||
DumpFile()
|
||||
DumpFile(allow_yield = FALSE)
|
||||
world.Profile(PROFILE_CLEAR, type = "sendmaps")
|
||||
return ..()
|
||||
|
||||
@@ -39,13 +46,13 @@ SUBSYSTEM_DEF(profiler)
|
||||
world.Profile(PROFILE_STOP)
|
||||
world.Profile(PROFILE_STOP, type = "sendmaps")
|
||||
|
||||
|
||||
/datum/controller/subsystem/profiler/proc/DumpFile()
|
||||
/datum/controller/subsystem/profiler/proc/DumpFile(allow_yield = TRUE)
|
||||
var/timer = TICK_USAGE_REAL
|
||||
var/current_profile_data = world.Profile(PROFILE_REFRESH, format = "json")
|
||||
var/current_sendmaps_data = world.Profile(PROFILE_REFRESH, type = "sendmaps", format="json")
|
||||
fetch_cost = MC_AVERAGE(fetch_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer))
|
||||
CHECK_TICK
|
||||
if(allow_yield)
|
||||
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.")
|
||||
|
||||
Reference in New Issue
Block a user