During regular usage of the Roblox player client, I as the user can build up significant client-side input delay, hindering my ability to play reaction based games such as (but not limited to) First person shooters, Action games, Obbies, Minigames, etc…
It’s notable are that the client does not have to be ‘lagging’ or bottle-necked by hardware resources. I have recorded that the client can be running on any number just below 60 FPS (for example, 55 fps) with low CPU, GPU, and memory usage, and still build up over 5 seconds of input delay.
Describe ‘Input delay’
The amount of time it takes for a user’s action/input to make changes on the game client. Not to be confused with network latency (such as ping) or the player’s reaction speed.
Describe the behavior
The client starts putting input tasks (such as UserInputService events) from the user, into a queue that can end up to around 400ms, or higher before the input is registered as an event.
Guide to the issue
- Join any Roblox game with a good average number of instances (bricks, decals, particles, etc…)
- Find a world position where you can make your Roblox client render enough of the world or spin your camera to the point where you no longer render at 60 fps
- Gain access to one or more of the following abilities to test your input lag with: walk, shoot, click, jump, interacting with UI
- Move your mouse around continuously in a pattern while keeping your fps below 60
- Notice your inputs starting to increase in latency
- Repeat step 1
Video displaying the issue:
Video A - Stationary mouse
Video B - Moving mouse - Compare with above
What happens in the video:
In the videos I am in a testing place with a fixed camera angle for each test. Directly looking at a difficult to render scene for the Roblox engine, causing me to be consistently below 60 FPS.
In this testing place there is a white frame in the bottom left corner that responds to UserInputService InputBegan events.
This frame will turn green at a random moment, and the user clicks when it appears green on their screen.
The moment the frame turns green, a timestamp is made to calculate how long it took for the user to send a UserInputService event.
- The cursor is stationary and is not moved
- Average input response time was 289ms
> 263 267 288 276 280 259 296 288 276 296 296 292 359 309 313 263 301ms
- The cursor is moving around
- Average input response time was over 8 seconds, increasing drastically over time
> 1013 1880 4526 17959 15430ms
- This issue occurred after a recent Roblox (or Windows) update
- The issue is 100% reproducible
- The issue started occurring in an update after 5th of August
Read important Footnotes:
- Any input is delayed, not just from UserInputService, but that’s what I have decided to use in this example.
- Even the Roblox Player responds late to things like alt tabbing back into the game.
- In this testing environment I can easily get over 8 seconds of input latency, but this is just to prove that there is a problem with the game client. In real scenarios this input latency would only be around 300-400ms at worst, but at random. Which in the case of action or rhythm games becomes really frustrating and unplayable.
- For players that do not have this over 8 seconds of input latency under the same conditions, they still seem to report that their input response time has increased by at least 70ms when their client no longer renders at 60 fps. Which should definitely also be improved upon.
- Even when I’m in a less graphically challenging game, and have my settings to the lowest, it is still possible for my client to stagger during quick rotations (flicks) of my camera angle. Causing the same input delay effect for a few frames as I am moving my mouse in this motion. But as mentioned before; this is increasingly frustrating as this affects action games a lot.
- Using the Roblox FPS Unlocker by axstin, and setting the FPS limit to 30 FPS does actually improve on the scene showed the video. No longer causing 8 or more seconds of input latency and only ending up around an average of ~360ms instead. ( Video: https://imgur.com/Y5sj4Ou ). My theory is that this input latency only queues up when the client is throttling frames. And with the FPS cap being at 30, it no longer throttles to run the scene. However, running at 30 FPS is no solution as this increases your input latency over 100ms by default.
- This input latency test includes the user’s time to respond (reaction time). Which on the average gamer should be around 230ms. You can calculate your own reaction time here, and subtract that average value from your results. This is nowhere close to scientific, but the results are clear enough that there is evidence of a problem. If you do have the hardware to scientifically calculate response time, I would love to see your results and compare them.
- This forum post might be related to the issue. The problem discussed is not well documented, so it is not clear if it is actually related. He posted this around the same time as when I first ran into this problem.
Home build desktop
OS: Windows 10 Home
GPU: AMD Radeon RX Vega 56
CPU: AMD FX-8350 (8 Core 4200 Mhz)
Memory: 8GB Ram
misc & versions
OS version: latest -
GPU version: latest -
CPU Cores/Threads: 8 / 8
RAM Size: 2x Kingston 4GB
DDR3-1333 / PC3-10600 DDR3 SDRAM UDIMM