Line by line profiling system
This commit is contained in:
committed by
CitadelStationBot
parent
a5338759b7
commit
f36d3ff08a
@@ -10,6 +10,8 @@
|
||||
#define T20C 293.15 // 20degC
|
||||
#define TCMB 2.7 // -270.3degC
|
||||
|
||||
#define SHORT_REAL_LIMIT 16777216
|
||||
|
||||
//"fancy" math for calculating time in ms from tick_usage percentage and the length of ticks
|
||||
//percent_of_tick_used * (ticklag * 100(to convert to ms)) / 100(percent ratio)
|
||||
//collapsed to percent_of_tick_used * tick_lag
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
#define PROFILE_START ;PROFILE_STORE = list();PROFILE_SET;
|
||||
#define PROFILE_STOP ;PROFILE_STORE = null;
|
||||
|
||||
#define PROFILE_SET ;PROFILE_TIME = TICK_USAGE_REAL; PROFILE_LINE = __LINE__; PROFILE_FILE = __FILE__; PROFILE_SLEEPCHECK = world.time;
|
||||
|
||||
#define PROFILE_TICK ;\
|
||||
if (PROFILE_STORE) {\
|
||||
var/PROFILE_TICK_USAGE_REAL = TICK_USAGE_REAL;\
|
||||
if (PROFILE_SLEEPCHECK == world.time) {\
|
||||
var/PROFILE_STRING = "[PROFILE_FILE]:[PROFILE_LINE] - [__FILE__]:[__LINE__]";\
|
||||
var/list/PROFILE_ITEM = PROFILE_STORE[PROFILE_STRING];\
|
||||
if (!PROFILE_ITEM) {\
|
||||
PROFILE_ITEM = new(PROFILE_ITEM_LEN);\
|
||||
PROFILE_STORE[PROFILE_STRING] = PROFILE_ITEM;\
|
||||
PROFILE_ITEM[PROFILE_ITEM_TIME] = 0;\
|
||||
PROFILE_ITEM[PROFILE_ITEM_COUNT] = 0;\
|
||||
};\
|
||||
PROFILE_ITEM[PROFILE_ITEM_TIME] += TICK_DELTA_TO_MS(PROFILE_TICK_USAGE_REAL-PROFILE_TIME);\
|
||||
var/PROFILE_INCR_AMOUNT = min(1, 2**round(PROFILE_ITEM[PROFILE_ITEM_COUNT]/SHORT_REAL_LIMIT));\
|
||||
if (prob(100/PROFILE_INCR_AMOUNT)) {\
|
||||
PROFILE_ITEM[PROFILE_ITEM_COUNT] += PROFILE_INCR_AMOUNT;\
|
||||
};\
|
||||
};\
|
||||
PROFILE_SET;\
|
||||
};
|
||||
|
||||
#define PROFILE_ITEM_LEN 2
|
||||
#define PROFILE_ITEM_TIME 1
|
||||
#define PROFILE_ITEM_COUNT 2
|
||||
Reference in New Issue
Block a user