libweston: assert frame times never go backwards

Adding this check was prompted by
https://gitlab.freedesktop.org/wayland/weston/-/merge_requests/609

There is no reason to allow frame times jump backwards, and apparently
we already have code that makes that assumption.

DRM KMS uses CLOCK_MONOTONIC as the vblank and page flip timestamps,
which by definition cannot go backwards. Other backends call
weston_compositor_set_presentation_clock_software().

Frame times are also reported directly to Wayland clients via
presentation-time extension, and clients too will not expect that the
timestamp could go backwards.

So make sure time can never go backwards.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
dev
Pekka Paalanen 4 years ago committed by Pekka Paalanen
parent bc7c8332df
commit 98b4e20a68
  1. 10
      libweston/compositor.c

@ -3003,7 +3003,15 @@ weston_output_finish_frame(struct weston_output *output,
int64_t msec_rel;
assert(output->repaint_status == REPAINT_AWAITING_COMPLETION);
assert(stamp || (presented_flags & WP_PRESENTATION_FEEDBACK_INVALID));
/*
* If timestamp of latest vblank is given, it must always go forwards.
* If not given, INVALID flag must be set.
*/
if (stamp)
assert(timespec_sub_to_nsec(stamp, &output->frame_time) >= 0);
else
assert(presented_flags & WP_PRESENTATION_FEEDBACK_INVALID);
weston_compositor_read_presentation_clock(compositor, &now);

Loading…
Cancel
Save