This is a tool to test video stream latency, frameskip, bandwidth and audio errors
I made this in a few hours to test my own setup and it works for me, might not work for you
Warning: Contains flashing lights and annoying sounds
For best results you should use Auto mode on a Chrome flavored browser in fullscreen (F11)
Close other apps that might steal screen time from the browser and skew the results
Make sure the tool is running at the desired FPS and is the active window
Manual FPS may introduce frameskip even on the host side and is not recommended
Auto FPS uses whatever requestAnimationFrame dictates, which is usually synced to desktop FPS,
but it should also sync to a secondary monitor when running fullscreen
Combine different options to test different scenarios
If testing Moonlight, enable the stats to verify it's also running smoothly (Ctrl+Alt+Shift+S)
To test stream latency (display to display):
Run the test and snap a short exposure photo where both displays are visible
Enter the last frame numbers visible on each display to the calculator
The numbers are a frame counter that increases by one every frame, whatever the current FPS is
The delay between frames is 1/FPS, therefore the delay from host to client is 1/FPS*(HOST-CLIENT)
Using a non-gaming monitor on the host might even make it seem like you have negative
latency, but just be happy your stream is working better than your monitor I guess
To test frameskip:
Run the test and look for holes basically
The frames in the frame counter will stay lit for exactly one frame
Any skipped frames will look like dark holes in the stream of bright numbers
You can try what this looks like by manually entering a stupid fps like 69 on a 60Hz monitor
Make sure the host doesn't have frameskip first or testing the stream is pointless
You can also take some long exposure (~1s) photos to check for dark frames
Frameskip may be caused by a slow encoder, slow decoder, slow renderer, vsync stuff or network,
consult your Moonlight stats to figure that out
To test bandwidth and annoy the encoder:
Enable the Noise option to add some barely visible static noise to the background
This should annoy the encoder enought that it will always use most of the allotted bitrate
With Noise off the encoder is unlikely to need more than 5Mbps to draw some silly numbers
This doesn't really add any GPU load, use something else to load your GPU to test encoding
while stressed
To test smooth framerate:
The ball at the bottom should be moving at a constant speed, not hopping around
To test audio errors:
Enable the Tone option to play a 440Hz sine wave
If you hear crackling on the client, you're dropping audio frames
Crackling may also be a symptom of a too small audio buffer on a slow client
and increasing the audio buffer in e.g. pipewire may help