output: add wlr_output_event_present.commit_seq

This is set to the value of wlr_output.commit_seq when the frame has
been submitted. This allows tracking presentation with more then 1 full
frame of latency.

References: https://github.com/swaywm/wlroots/issues/1917
This commit is contained in:
Simon Ser 2019-11-16 22:15:33 +01:00
parent cde544de81
commit 6c649bab53
3 changed files with 7 additions and 0 deletions

View file

@ -1497,6 +1497,9 @@ static void page_flip_handler(int fd, unsigned seq,
.tv_nsec = tv_usec * 1000, .tv_nsec = tv_usec * 1000,
}; };
struct wlr_output_event_present present_event = { struct wlr_output_event_present present_event = {
/* The DRM backend guarantees that the presentation event will be for
* the last submitted frame. */
.commit_seq = conn->output.commit_seq,
.when = &present_time, .when = &present_time,
.seq = seq, .seq = seq,
.refresh = mhz_to_nsec(conn->output.refresh), .refresh = mhz_to_nsec(conn->output.refresh),

View file

@ -173,6 +173,9 @@ enum wlr_output_present_flag {
struct wlr_output_event_present { struct wlr_output_event_present {
struct wlr_output *output; struct wlr_output *output;
// Frame submission for which this presentation event is for (see
// wlr_output.commit_seq).
uint32_t commit_seq;
// Time when the content update turned into light the first time. // Time when the content update turned into light the first time.
struct timespec *when; struct timespec *when;
// Vertical retrace counter. Zero if unavailable. // Vertical retrace counter. Zero if unavailable.

View file

@ -569,6 +569,7 @@ void wlr_output_send_present(struct wlr_output *output,
struct wlr_output_event_present _event = {0}; struct wlr_output_event_present _event = {0};
if (event == NULL) { if (event == NULL) {
event = &_event; event = &_event;
event->commit_seq = output->commit_seq;
} }
event->output = output; event->output = output;