wayland: optionally use the presentation time protocol to measure input lag

This adds a flag, -p,--presentation-timings, that enables input lag
measuring using the presentation time Wayland protocol.

When enabled, we store a timestamp when we *send* a key to the
slave. Then, when we commit a frame for rendering to the compositor,
we request presentation feedback. We also store a timestamp for when
the frame was committed.

The 'presented' callback then looks at the input and commit
timestamps, and compares it with the presented timestamp.

The delay is logged at INFO when the delay was less than one frame
interval, at WARN when it was one frame interval, and at ERR when it
was two or more frame intervals.

We also update statistic counters that we log when foot is shut down.
This commit is contained in:
Daniel Eklöf 2019-12-31 15:39:40 +01:00
parent ea1d072f52
commit 5a07419096
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
9 changed files with 187 additions and 11 deletions

View file

@ -302,6 +302,10 @@ struct terminal {
struct buffer *last_buf; /* Buffer we rendered to last time */
bool was_flashing; /* Flash was active last time we rendered */
bool was_searching;
bool presentation_timings;
struct timespec input_time;
struct timespec commit_time;
} render;
/* Temporary: for FDM */