presentation-time: add an event describing the commit deadline

Currently, the client has no information on when it should commit its
surface for optimal (low latency) presentation.
There have been many discussions on how to improve this situation, but
they mostly died down because of the complexity of the topic.

This implements a different strategy from previous discussions - instead
of telling the client when to commit next, the compositor should just
communicate the latest time the client could've committed the last frame.

This allows the client to estimate when it should commit in the next
presentation cycle, without conflicting with potentially more complete
future solutions (that could for example handle VRR better). The use
case I specifically want to solve with this is nested Wayland compositors,
which currently do not have any accurate information for timing commits.

Signed-off-by: Xaver Hugl <xaver.hugl@kde.org>
This commit is contained in:
Xaver Hugl 2025-10-17 16:49:27 +02:00
parent ce96b5f177
commit 3d27f2033d

View file

@ -25,7 +25,7 @@
DEALINGS IN THE SOFTWARE. DEALINGS IN THE SOFTWARE.
</copyright> </copyright>
<interface name="wp_presentation" version="2"> <interface name="wp_presentation" version="3">
<description summary="timed presentation related wl_surface requests"> <description summary="timed presentation related wl_surface requests">
<!-- Introduction --> <!-- Introduction -->
@ -123,7 +123,7 @@
</interface> </interface>
<interface name="wp_presentation_feedback" version="2"> <interface name="wp_presentation_feedback" version="3">
<description summary="presentation time feedback event"> <description summary="presentation time feedback event">
A presentation_feedback object returns an indication that a A presentation_feedback object returns an indication that a
wl_surface content update has become visible to the user. wl_surface content update has become visible to the user.
@ -263,6 +263,19 @@
The content update was never displayed to the user. The content update was never displayed to the user.
</description> </description>
</event> </event>
<event name="content_update_deadline" since="3">
<description summary="The content update deadline for the presentation cycle">
Describes the latching deadline for the presentation of the relevant
content update, expressed as a duration before the presentation
timestamp. This information can be used by the client to make better
decisions on when to commit in the next compositing cycle.
This event is sent before the "presented" event. It is not sent if
the content update was discarded.
</description>
<arg name="tv_nsec" type="uint" summary="duration in nanoseconds"/>
</event>
</interface> </interface>
</protocol> </protocol>