mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-18 11:30:35 +01:00
e867030c2e
* sdf * fsda * fuck * fuck2 * toolz * sdaf * sdfa * saf * sdfa * sdfa * sdf * sdfa * temp rename * temp rename * temp rename * sdaf * the pain is immensurable in the land of byond * the curse of rah * safd * sadf * sadf * gf * asf * fssdfa * sfd * sadf * sfda * brah * brah * it's easier for you to fix this * ffs * brah * brah
29 lines
1.1 KiB
Plaintext
29 lines
1.1 KiB
Plaintext
//Key thing that stops lag. Cornerstone of performance in ss13, Just sitting here, in unsorted.dm. Now with dedicated file!
|
|
|
|
///Increases delay as the server gets more overloaded, as sleeps aren't cheap and sleeping only to wake up and sleep again is wasteful
|
|
#define DELTA_CALC max(((max(TICK_USAGE, world.cpu) / 100) * max(Master.sleep_delta-1,1)), 1)
|
|
|
|
///returns the number of ticks slept
|
|
/proc/stoplag(initial_delay)
|
|
if (!Master || Master.init_stage_completed < INITSTAGE_MAX)
|
|
sleep(world.tick_lag)
|
|
return 1
|
|
if (!initial_delay)
|
|
initial_delay = world.tick_lag
|
|
// Unit tests are not the normal environemnt. The mc can get absolutely thigh crushed, and sleeping procs running for ages is much more common
|
|
// We don't want spurious hard deletes off this, so let's only sleep for the requested period of time here yeah?
|
|
#ifdef UNIT_TEST
|
|
sleep(initial_delay)
|
|
return CEILING(DS2TICKS(initial_delay), 1)
|
|
#else
|
|
. = 0
|
|
var/i = DS2TICKS(initial_delay)
|
|
do
|
|
. += CEILING(i * DELTA_CALC, 1)
|
|
sleep(i * world.tick_lag * DELTA_CALC)
|
|
i *= 2
|
|
while (TICK_USAGE > min(TICK_LIMIT_TO_RUN, Master.current_ticklimit))
|
|
#endif
|
|
|
|
#undef DELTA_CALC
|