Yeah, you got it. It's the display refresh that makes the latency always be measured in full frames rather than some sub-tick.
But 120Hz still doesn't let you send out frames "when they're ready". That creates two problems. The first is tearing. When the display refreshes, it displays all the pixels from a chunk of memory called the front buffer. If games write directly to the front buffer, you get absolute minimal latency, but you get tearing on nearly every frame, where the GPU is in the middle of writing a new frame over the front buffer, and you get part of the new frame and part of the old frame.
What games do instead is write to a second buffer - or multiple buffers, even - called the back buffer. Then when the back buffer is ready, the two buffers are "flipped". And even then, you can't just flip the instant that the back buffer is ready to. The reason being frame pacing.
A 120Hz screen is still on a steady, ticking clock of 1 refresh every 8.3ms. Imagine a game that runs at an unsteady 60fps. Over the course of a second, you get 60 frames, but a few are a little early and a few are a little late. Let's imagine a cadence of rendering times that look like this
16 ms, 12 ms, 13 ms. 13.4ms, 16ms, 18ms, 14ms, 16 ms...
But even with a super fast 120Hz screen, you have to round these times off to the nearest refresh. If you do so, the
frame persistence - ie how long your eyeballs see the frame - looks like this.
16.6ms, 16.6ms, 8.3ms, 16.6ms, 16.6ms, 25ms, 16.6ms, 16.6ms....
Those drops and jumps where the amount of time your eyeball sees a frame on screen halves, then doubles, then goes up by 50% then back down again is still super jarring to the eye. Like a flipbook, instead of like a smooth animation. You will 100% notice these things as stutter.
What you want isn't 120Hz, it's VRR. VRR screens support lots of weird, close-to-each-other frame rates - things like 55Hz, 56Hz, 57Hz, etc - and can smoothly transition between them in real time. And there is a protocol that the console can support that essentially tells the display, "hey, this is when I'm actually flipping the buffer." The display can then adjust the refresh rate on a frame-by-frame basis. So the frames would presist something like
16.6ms, 14.2ms, 14.2ms. 13.8ms, 16.6ms, 18.1ms, 14.2ms, 16.6ms...
VRR isn't microflexible down to the 10th or hundredth of a millisecond, but it can get close enough that stutter is eliminated - you still get increasing and decreasing smoothness as the frame rate changes, but no shocking stutters.
And latency improves, too. With 120Hz, no VRR, you either improve latency by 8.3ms, or not at all. But with VRR, you really can just push a frame out 1 or 2ms faster, shaving that 1 or 2 (or 5 or 6) ms of latency off the experience. Of course, as
@Dakhil will point out, true VRR screens are almost all 120Hz anyway...
BIG ASS SIDE NOTE: There
is a way to alter latency (for good or for bad) at rates smaller than the refresh rate, but it has nothing to do with the GPU and graphics rendering, and everything to do with the CPU and the controller. But thats a tangent and this post is already too long as it is...