clutter/frame-clock: Always update last presentation time

Last presentation time is mainly used to make sure predicted
presentation time is aligned with display refreshes. Even if it went
back in time, there will be no issue as next presentation time takes
current time into account. Synthetic presentation time is not exactly
aligned with display refreshes, so using it would only result in
inconsistent animations.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1707>
This commit is contained in:
Ivan Molodetskikh 2021-02-04 10:52:08 +03:00 committed by Marge Bot
parent 8bdad733ca
commit bc7c56fa74

View File

@ -181,21 +181,7 @@ void
clutter_frame_clock_notify_presented (ClutterFrameClock *frame_clock, clutter_frame_clock_notify_presented (ClutterFrameClock *frame_clock,
ClutterFrameInfo *frame_info) ClutterFrameInfo *frame_info)
{ {
int64_t presentation_time_us = frame_info->presentation_time; frame_clock->last_presentation_time_us = frame_info->presentation_time;
if (presentation_time_us > frame_clock->last_presentation_time_us ||
((presentation_time_us - frame_clock->last_presentation_time_us) >
INT64_MAX / 2))
{
frame_clock->last_presentation_time_us = presentation_time_us;
}
else
{
g_warning_once ("Bogus presentation time %" G_GINT64_FORMAT
" travelled back in time, using current time.",
presentation_time_us);
frame_clock->last_presentation_time_us = g_get_monotonic_time ();
}
if (frame_info->refresh_rate > 1) if (frame_info->refresh_rate > 1)
frame_clock->refresh_rate = frame_info->refresh_rate; frame_clock->refresh_rate = frame_info->refresh_rate;