Commit Graph

13 Commits

Author SHA1 Message Date
Kylerace
77c2b7f50c Biddle Verbs: Queues the Most Expensive Verbs for the Next Tick if the Server Is Overloaded (#65589)
This pr goes through: /client/Click(), /client/Topic(), /mob/living/verb/resist(), /mob/verb/quick_equip(), /mob/verb/examinate(), and /mob/verb/mode() and makes them queue their functionality to a subsystem to execute in the next tick if the server is overloaded. To do this a new subsystem is made to handle most verbs called SSverb_manager, if the server is overloaded the verb queues itself in the subsystem and returns, then near the start of the next tick that verb is resumed with the provided callback. The verbs are called directly after SSinput, and the subsystem does not yield until its queue is completely finished.

The exception are clicks from player input since they are extremely important for the feeling of responsiveness. I considered not queuing them but theyre too expensive not to, suffering from a death of a thousand cuts performance wise from many many things in the process adding up. Instead clicks are executed at the very start of the next tick, as the first action that SSinput completes, before player movement is processed even.

A few months ago, before I died I was trying to figure out why games at midpop (40-50 people) had non zero and consistent time dilation without maptick being consistently above 28% (which is when the MC stops yielding for maptick if its overloaded). I found it out, started working on this pr, then promptly died. luckily im a bit less dead now

the current MC has a problem: the cost of verbs is completely and totally invisible to it, it cannot account for them. Why is this bad? because verbs are the last thing to execute in the tick, after the MC and SendMaps have finished executing.
tick diagram2
If the MC is overloaded and uses 100% of the time it allots itself this means that if SendMaps uses the amount its expected to take, verbs have at most 2% of the tick to execute in before they are overtiming and thus delaying the start of the next tick. This is bad, and im 99% sure this is the majority of our overtime.

Take Click() for example. Click isnt listed as a verb but since its called as a result of client commands its executed at the end of the tick like other verbs. in this random 80 pop sybil round profile i had saved on my computer sybil 80 pop (2).txt /client/Click() has an overtime of only 1.8 seconds, which isnt that bad. however it has a self cpu of 2.5 seconds meaning 1.8/2.5 = 72% of its time is overtiming, and it also is calling 80.2 seconds worth of total cpu, which means that more than 57.7 seconds of overtime is attributed to just /client/Click() executing at the very end of a tick. the reason why this isnt obvious is just because the verbs themselves typically dont have high enough self cpu to get high enough on the rankings of overtiming procs to be noticed, all of their overtime is distributed among a ton of procs they call in the chain.

Since i cant guarantee the MC resumes at the very start of the next tick due to other sleeping procs almost always resuming first: I time the duration between clicks being queued up for the next tick and when theyre actually executed. if it exceeds 20 milliseconds of added latency (less than one tenth the average human reaction time) clicks will execute immediately instead of queuing, this should make instances where a player can notice the added latency a vanishingly small minority of cases. still, this should be tm'd
2022-07-31 14:56:18 -07:00
Seris02
5816d4c55c better fix for some runtimes with clients in player_list (maybe) (#62028) 2021-10-12 02:39:17 -07:00
brotherbeyondd
0c9d6d3aee Revert "prevent SSinput from constantly reporting null movements (#59558)" (#59650)
This reverts commit 6c2d17bb15.

Fucky movement fix oranges is literally threatening me.

I feel like I've messed up somewhere here...

Either way this is causing movements to be a bit fucky where one input counts as two in a direction.
2021-06-16 12:38:52 -07:00
fira
6c2d17bb15 prevent SSinput from constantly reporting null movements (#59558)
Just prevents SSinput from constantly calling Move() every tick for every user even when no actual movement is requested.

Only done rudimentary testing - straightforward and we've been using this for months on CM13 but without diagonal movement.

I asked the original SSinput author back then which said that it was likely an oversight. I believe moving the diagonal movement direction buffer reset to keyLoop instead of Move() also makes sense as it is actually relevant to SSinput and not client actions as a whole (eg. if you call built-in movement verbs)
2021-06-09 14:07:23 -03:00
Ryll Ryll
4bb58af0ea Kills twitching corpses dead (#55600)
* is this legal

* softcrit is okay
2020-12-19 03:42:59 -08:00
Qustinnus
74847e40df Movement now works in any client dir (#54693)
Movement now works even if client dir is changed
maybe someday we can have rotating views
2020-11-15 17:21:29 -08:00
Jared-Fogle
78b79aef36 Block movement now locks turning, migrate old save files to Ctrl (#53871)
The block movement key now correctly locks turning like it used to.

Old save files are now migrated to Ctrl if they didn't bind it to anything before. This correctly replicates the old behavior.
2020-09-23 03:42:41 -03:00
Qustinnus
fc75f2cb51 Makes locking movement a hotkey (#53771)
* kinda done

* Update code/datums/keybinding/mob.dm

Co-authored-by: Rohesie <rohesie@gmail.com>

* Update code/datums/keybinding/mob.dm

Co-authored-by: Rohesie <rohesie@gmail.com>

* Update code/datums/keybinding/mob.dm

Co-authored-by: Rohesie <rohesie@gmail.com>

* Update code/datums/keybinding/mob.dm

Co-authored-by: Rohesie <rohesie@gmail.com>

Co-authored-by: Rohesie <rohesie@gmail.com>
2020-09-18 22:15:02 -04:00
Couls
971ef6a416 Custom movement hotkeys and restore macros for T, O and M (#47626)
* Custom movement hotkeys and restore macros for T, O and M

* stray comma

* update movement keys on SSinput initialize

* use cardinals
2019-11-07 18:07:17 -05:00
kevinz000
c6d710d40e VV refactors 2 - Actually not indefinitely WIP (#45217)
About The Pull Request

The thing other than ruining maps that I was working on
Refactors VV to use a more standard way of doing topic dropdown options rather than a huge if/else chain
Marking datums is now a right click option
Moves a few files around too/few procs
Why It's Good For The Game

Makes it easier to add more VV dropdown options in the future, and moving href list keys to defines make misspelling them harder.
Changelog

cl
add: Oh yeah also added a "return value of proccall" option for VV var editing.
refactor: View Variables has been refactored. It should now be easier to make VV dropdown options.
/cl
2019-08-03 14:43:26 +12:00
Emmett Gaines
d040afd6d0 Moves GLOB.movement_keys into SSinput and adds movement direction badminry (#34123)
* badmin flip dirs

* moves movement_keys into SSinput from GLOB
2018-01-14 20:37:59 +01:00
ninjanomnom
2c040ac85e x = x | y instead of x |= y because they act different 2017-12-18 11:11:35 -05:00
ninjanomnom
7b7b67edd8 In-code key handling system 2017-11-30 07:40:27 -05:00