#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