wayland: Use output & frame counter instead of needs_sequence_update

More robust vs multiple frames in flight.

v2:
* Use ClutterFrameInfo::frame_count.
v3:
* Rename to last_view_frame_counter. (Jonas Ådahl)

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4306>
This commit is contained in:
Michel Dänzer 2025-02-25 14:32:25 +01:00 committed by Michel Dänzer
parent 84135e51b0
commit 34b203ed99
2 changed files with 6 additions and 7 deletions

View File

@ -172,8 +172,6 @@ on_after_paint (ClutterStage *stage,
wl_list_insert_list (feedbacks,
&surface->presentation_time.feedback_list);
wl_list_init (&surface->presentation_time.feedback_list);
surface->presentation_time.needs_sequence_update = TRUE;
}
compositor->presentation_time.feedback_surfaces =
@ -261,10 +259,13 @@ maybe_update_presentation_sequence (MetaWaylandSurface *surface,
{
unsigned int sequence_delta;
if (!surface->presentation_time.needs_sequence_update)
if (surface->presentation_time.last_output == output &&
surface->presentation_time.last_view_frame_counter ==
frame_info->view_frame_counter)
return;
surface->presentation_time.needs_sequence_update = FALSE;
surface->presentation_time.last_view_frame_counter =
frame_info->view_frame_counter;
if (!(frame_info->flags & CLUTTER_FRAME_INFO_FLAG_VSYNC))
goto invalid_sequence;
@ -434,7 +435,5 @@ meta_wayland_presentation_time_cursor_painted (MetaWaylandPresentationTime *pres
wl_list_insert_list (feedbacks,
&surface->presentation_time.feedback_list);
wl_list_init (&surface->presentation_time.feedback_list);
surface->presentation_time.needs_sequence_update = TRUE;
}
}

View File

@ -265,7 +265,7 @@ struct _MetaWaylandSurface
MetaWaylandOutput *last_output;
unsigned int last_output_sequence;
gboolean is_last_output_sequence_valid;
gboolean needs_sequence_update;
int64_t last_view_frame_counter;
/*
* Sequence has an undefined base, but is guaranteed to monotonically