diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 228731d5ec3..911b828a519 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -158,7 +158,7 @@ #define INIT_ORDER_PATH -50 #define INIT_ORDER_EXPLOSIONS -69 #define INIT_ORDER_STATPANELS -98 -#define INIT_ORDER_DEMO -99 // o avoid a bunch of changes related to initialization being written, do this last +#define INIT_ORDER_INIT_PROFILER -99 //Near the end, logs the costs of initialize #define INIT_ORDER_CHAT -100 //Should be last to ensure chat remains smooth during init. // Subsystem fire priority, from lowest to highest priority diff --git a/code/controllers/subsystem/init_profiler.dm b/code/controllers/subsystem/init_profiler.dm new file mode 100644 index 00000000000..02fdc307c94 --- /dev/null +++ b/code/controllers/subsystem/init_profiler.dm @@ -0,0 +1,25 @@ +#define INIT_PROFILE_NAME "init_profiler.json" + +///Subsystem exists so we can seperately 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 + flags = SS_NO_FIRE + +/datum/controller/subsystem/init_profiler/Initialize() + if(CONFIG_GET(flag/auto_profile)) + write_init_profile() + return ..() + +/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 diff --git a/tgstation.dme b/tgstation.dme index 16b89d3885b..ed3160859b2 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -364,6 +364,7 @@ #include "code\controllers\subsystem\icon_smooth.dm" #include "code\controllers\subsystem\id_access.dm" #include "code\controllers\subsystem\idlenpcpool.dm" +#include "code\controllers\subsystem\init_profiler.dm" #include "code\controllers\subsystem\input.dm" #include "code\controllers\subsystem\ipintel.dm" #include "code\controllers\subsystem\job.dm"