back to lofibucket.com

Desktop compositing latency is real and it annoys me Pekka Väänänen

Note: These results are totally wrong. Please see below.

Update: Note that the capture method I use needs to read pixels back from the GPU which can be slow. This means the Windows 10 results are probably worse than they should be. However, without external hardware this seems to be the only way to measure keyboard to screen latency.

Another update: After some discussions I’ve come to the conclusion that the Windows 10 latency values in the graph above aren’t really representative of the DWM latency. The pixel readback (and the GPU pipeline stall) takes a long time (20 ms after vsync!) so the sampling interval is very coarse. It also seems to be locked to display’s vertical refresh.

I didn’t consider this a big problem originally since I was after minimum latencies, so the interval between a keypress and the synced screen refresh roughly corresponds to the latency experienced by the user. But if that’s what we’re after there are better ways to measure it. It isn’t very interesting though since it’s just 8 ms on average.

I’m still sure there’s a frame or two of extra latency in there, but you should read this article just as an opionated rant :-)

I wiped off my Windows 10 installation today. It wasn't because of the intrusive telemetry or the ads in the start menu but desktop composition. It adds some slight but noticeable latency that makes typing feel uncomfortable. In Windows 7 you can turn it off.

In the figure below you can see that minimum latency you can reach in Windows 10 is about 8 milliseconds:

See figure

While in Windows 7 things are in general faster:

See figure

For example with GVim the average drops from 14 ms down to 5 ms when DWM (Desktop Window Manager) is disabled. At least I can feel the difference when typing. If you don't disable Aero in Windows 7 it's even worse than Windows 10.

Compositing latency

Pavel Fatin has investigated key input processing latency at length in "Writing with pleasure". He summarizes the difference between stacking and compositing window manager as follows:

Stacking window managers orchestrate drawing of overlapped windows in such a way, that background windows are painted first. While this approach has some drawbacks (window content has to be restored explicitly), it introduces no additional delays because applications draw directly in the framebuffer. Examples of stacking window managers: Classic theme in Windows, Openbox in Linux.

Compositing window managers substitute the framebuffer with a dedicated off-screen buffer for each window, and then display all the windows together when (and how) they see fit. This separation inevitable leads to some latency increase. Examples of compositing managers: Aero in Windows, Compiz in Linux.

The thing with compositing window managers is that they seem to also enforce vertical synchronization (V-Sync). This means we need to wait until a picture is displayed on screen before we can start drawing the next one. This causes some latency. How much? Fatin writes:

Thus, we might expect additional delay before framebuffer update when vertical synchronization is turned on. Maximum delay is ~17 ms, average delay is ~8 ms (for 60 Hz refresh rate).

Eight milliseconds on average, not too bad. But actually the average seems to be two times that: roughly 17 ms and the minimum latency is 8 ms! I don't know if that 8 ms is the processing latency of the compositor or a bias in my frame capture method. Even with V-Sync enabled the minimum should be close to zero because sometimes we simply get lucky and happen to send the keypress just before the picture is sent to the display.

Anyway, the point is that there is a measurable difference in key input latency between Windows 10 and Windows 7 with no DWM. The difference is small but noticeable, and affects every user of Windows 10. In general, UI input latency is a known problem and a reason why e.g. your mouse cursor uses a special rendering path .

Who cares?

Some latency here or there, why is it a problem? Well, as a hobbyist nerd I know how to turn off desktop composition and how to install a different operating system if necessary. Most people just have to put up with it. In many cases you can't go and downgrade the OS of a work laptop even if you knew how. This isn't some obscure corner case but a regression in the core function of a modern PC.

Don't you find it a bit funny that Windows 95 is actually snappier than Windows 10? It's really a shame that response times in modern computers are visibly worse than those in twenty years ago.

The big problem with latency is that it accumulates. Once some component introduces delay somewhere in the input chain you aren't going to get it back. That's why it's really important to eliminate latency where you can. Also chances are that e.g. your keyboard is already slower than you might expect.

How to deal with this?

Apart from waiting for Microsoft to allow turning off the compositor in Windows 10 (not gonna happen) you can either

ignore the problem,

buy a 144 Hz monitor, or

use an operating system that has a stacking window manager .

Actually, I don't know why a compositing window manager should enforce V-Sync anyway? Obviously you get screen tearing without it but the option should still be there for those who want it. You could throttle the update rate to e.g. 120 Hz in order not to burn too much power.

Windows 7

You can turn off desktop composition in the system Performance Options:

How it was tested

I used my own hacky measurement program written in C++ that sends a keypress to the application to be benchmarked. Then it waits until the character appears on screen. Virtual keypresses were sent with WinAPIs SendInput and pixels copied off screen with BitBlt . The plots were generated from data with 100 keypresses. I uploaded the data in its own repository too.

Program versions tested:

Sublime Text 3.0, 3143

GVim 8.0.586

Visual Studio 2013

Notepad 1703

LibreOffice Writer 5.4.2.2 with status bar and standard toolbar hidden

Firefox 57

System specs:

Operating System: Windows 10 Pro 64-bit (10.0, Build 15063) (15063.rs2_release.170317-1834) System Manufacturer: LENOVO System Model: 20AMS0SQ08 BIOS: Phoenix BIOS SC-T v2.1 Processor: Intel(R) Core(TM) i5-4300U CPU @ 1.90GHz (4 CPUs), ~2.5GHz Memory: 8192MB RAM Available OS Memory: 7880MB RAM Page File: 1807MB used, 7991MB available DirectX Version: DirectX 12 User DPI Setting: Using System DPI System DPI Setting: 96 DPI (100 percent) DWM DPI Scaling: Disabled Miracast: Available, with HDCP Microsoft Graphics Hybrid: Not Supported

There's also Pavel Fatin's Typometer tool but on Windows 10 it gave results quantized to 20 ms. That doesn't make sense since if you send the keypresses at arbitrary times, you should get varying latency depending on how close to the vertical blanking period you hit. Maybe I misunderstood something here? The Windows 10 results I recorded with this tool are also in the repository in typometer/ subdirectory.

Article history

February 2, 2020 Moved the update to the top of the article Reworded some of the update text Misleading graphs hidden behind hyperlinks

November 22, 2017 (?) Added an update on the flawed results

November 21, 2017 Published



For feedback email to pekka.vaananen@iki.fi