mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2025-12-20 07:00:09 +01:00
compositor: Track repaint time and expected presentation time
For the upcoming commit-timing protocol, we're interested in when a scheduled repaint will be displayed, so let's keep track of both the repaint time and the anticipated presentation time. Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
This commit is contained in:
parent
d88efaea66
commit
f1bcedd089
2 changed files with 15 additions and 2 deletions
|
|
@ -433,6 +433,9 @@ struct weston_output {
|
||||||
/** If repaint_status is REPAINT_SCHEDULED, contains the time the
|
/** If repaint_status is REPAINT_SCHEDULED, contains the time the
|
||||||
* next repaint should be run */
|
* next repaint should be run */
|
||||||
struct timespec next_repaint;
|
struct timespec next_repaint;
|
||||||
|
/** If repaint_statue is REPAINT_SCHEDULED, contains the time the
|
||||||
|
* next repaint should be displayed */
|
||||||
|
struct timespec next_present;
|
||||||
|
|
||||||
/** For cancelling the idle_repaint callback on output destruction. */
|
/** For cancelling the idle_repaint callback on output destruction. */
|
||||||
struct wl_event_source *idle_repaint_source;
|
struct wl_event_source *idle_repaint_source;
|
||||||
|
|
|
||||||
|
|
@ -4153,6 +4153,7 @@ weston_output_finish_frame(struct weston_output *output,
|
||||||
* repaint as soon as possible so we can get on with it. */
|
* repaint as soon as possible so we can get on with it. */
|
||||||
if (!stamp) {
|
if (!stamp) {
|
||||||
output->next_repaint = now;
|
output->next_repaint = now;
|
||||||
|
output->next_present = now;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4175,6 +4176,7 @@ weston_output_finish_frame(struct weston_output *output,
|
||||||
/* If we're tearing just repaint right away */
|
/* If we're tearing just repaint right away */
|
||||||
if (presented_flags & WESTON_FINISH_FRAME_TEARING) {
|
if (presented_flags & WESTON_FINISH_FRAME_TEARING) {
|
||||||
output->next_repaint = now;
|
output->next_repaint = now;
|
||||||
|
output->next_present = now;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4187,11 +4189,15 @@ weston_output_finish_frame(struct weston_output *output,
|
||||||
*/
|
*/
|
||||||
if (output->vrr_mode == WESTON_VRR_MODE_GAME) {
|
if (output->vrr_mode == WESTON_VRR_MODE_GAME) {
|
||||||
output->next_repaint = now;
|
output->next_repaint = now;
|
||||||
|
/* FIXME: we should figure out if we're in Vactive to give a
|
||||||
|
* more accurate next_present time?
|
||||||
|
*/
|
||||||
|
output->next_present = now;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
timespec_add_nsec(&output->next_repaint, stamp, refresh_nsec);
|
timespec_add_nsec(&output->next_present, stamp, refresh_nsec);
|
||||||
timespec_add_msec(&output->next_repaint, &output->next_repaint,
|
timespec_add_msec(&output->next_repaint, &output->next_present,
|
||||||
-compositor->repaint_msec);
|
-compositor->repaint_msec);
|
||||||
msec_rel = timespec_sub_to_msec(&output->next_repaint, &now);
|
msec_rel = timespec_sub_to_msec(&output->next_repaint, &now);
|
||||||
|
|
||||||
|
|
@ -4203,6 +4209,7 @@ weston_output_finish_frame(struct weston_output *output,
|
||||||
output->name, (long long) msec_rel);
|
output->name, (long long) msec_rel);
|
||||||
|
|
||||||
output->next_repaint = now;
|
output->next_repaint = now;
|
||||||
|
output->next_present = now;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called from restart_repaint_loop and restart happens already after
|
/* Called from restart_repaint_loop and restart happens already after
|
||||||
|
|
@ -4215,6 +4222,9 @@ weston_output_finish_frame(struct weston_output *output,
|
||||||
timespec_add_nsec(&output->next_repaint,
|
timespec_add_nsec(&output->next_repaint,
|
||||||
&output->next_repaint,
|
&output->next_repaint,
|
||||||
refresh_nsec);
|
refresh_nsec);
|
||||||
|
timespec_add_nsec(&output->next_present,
|
||||||
|
&output->next_present,
|
||||||
|
refresh_nsec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue