Ports "The punisher!"

* From tgstation/tgstation#27196
* The mc will now punish subsystems that overrun their tick allotment with less allotment in later fires.
* The punisher also delays the next fire of subsystems that overrun. Because of how this is ends up being calculated, this will almost never actually kick in, but sometimes subsystems like garbage will overrun into multiple ticks, so delaying their next fire is needed.
* The punisher does not delay the next fire of SS_TICKER subsystems (tgstation/tgstation#34964)
Note: SS_KEEP_TIMING subsystems do not get their next fire delayed.
This commit is contained in:
Leshana
2018-04-20 16:19:29 -04:00
parent 0d957e35a5
commit 0094c74b64
3 changed files with 19 additions and 8 deletions

View File

@@ -27,6 +27,10 @@ if(current_step == this_step || (initial_step && !resumed)) /* So we start at st
#define MC_AVERAGE_FAST(average, current) (0.7 * (average) + 0.3 * (current))
#define MC_AVERAGE(average, current) (0.8 * (average) + 0.2 * (current))
#define MC_AVERAGE_SLOW(average, current) (0.9 * (average) + 0.1 * (current))
#define MC_AVG_FAST_UP_SLOW_DOWN(average, current) (average > current ? MC_AVERAGE_SLOW(average, current) : MC_AVERAGE_FAST(average, current))
#define MC_AVG_SLOW_UP_FAST_DOWN(average, current) (average < current ? MC_AVERAGE_SLOW(average, current) : MC_AVERAGE_FAST(average, current))
#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;}
#define START_PROCESSING(Processor, Datum) if (!Datum.isprocessing) {Datum.isprocessing = 1;Processor.processing += Datum}