Maybe I'm stupid, but I don't understand the article at all.
In his "jitter" example, the media frame is delayed simply because it arrived too late, and I fail to see why an extra application would have any effect.
Also, I cannot understand why on Earth you would want to do anything "2ms after vblank".
Ignoring the bizarre article, the correct way to do it while minimizing GPU usage it is to estimate an upper bound T for the time needed to draw all windows and flip buffers (in the worst case, assuming all clients send an updated frame), and then on time T before the time the new buffer starts being scanned out, elevate to SCHED_RT (or use an RT deadline scheduler set to that moment if available), grab exclusive access to the GPU, and do the blits and flips.
While the blits are performed, updates to windows not blitted yet should still be accepted, and thus it's a good idea to start blitting the windows that are the least likely to send a further update in the current frame, which probably means starting from all windows that are currently waiting for user input, and then the most recently updated to least recently updated window among the windows that are "being actively animated".
If a client is not capable of informing the compositor whether a window is "being actively animated", the compositor can simply use the heuristic that a window is such if the last update is more recent than 100ms ago.
If the GPU cannot be acquired exclusively, or GPU render time cannot otherwise be reliably bounded, then another option, which is simpler but more wasteful, is to simply use two backbuffers, where one is always displayable, and process each update by simply copying the good backbuffer, plus the update to the other one; a separate thread will then swap the good backbuffer at the swap time.
Also, in general, the display refresh rate should be set to the highest multiple of the least common multiple of the requested rates of each application if possible (or the exact lcm if all windows request an exact frame rate and the mouse cursor is not visible), or to the highest supported rate otherwise.