X.Org Server Adds "AsyncFlipSecondaries" To Deal With Crappy Multi-Monitor Experience
Open-source developer Mario Kleiner who came up with this new "AsyncFlipSecondaries" feature sums up the problem as:
Whenever an unredirected fullscreen window uses pageflipping for a DRI3/Present PresentPixmap() operation and the X-Screen has more than one active output, multiple crtc's need to execute pageflips. Only after the last flip has completed can the PresentPixmap operation as a whole complete.
If a sync_flip is requested for the present, then the current implementation will synchronize each pageflip to the vblank of its associated crtc. This provides tear-free image presentation across all outputs, but introduces a different artifact, if not all outputs run at the same refresh rate with perfect synchrony: The slowest output throttles the presentation rate, and present completion is delayed to flip completion of the "latest" output to complete. This means degraded performance, e.g., a dual-display setup with a 144 Hz monitor and a 60 Hz monitor will always be throttled to at most 60 fps. It also means non-constant present rate if refresh cycles drift against each other, creating complex "beat patterns", tremors, stutters and periodic slowdowns - quite irritating!
Mario devised the AsyncFlipSecondaries option in allowing for a vblank-synced flip on the primary display while all other displays will try to flip async/immediately and not synchronized to the central vblank. So the secondary displays may have potential tearing but that trade-off should be better than the status quo for at least some users.
More details via this commit. The AsyncFlipSecondaries addition will be part of the upcoming X.Org Server 21.1 release.