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:
parent
84135e51b0
commit
34b203ed99
@ -172,8 +172,6 @@ on_after_paint (ClutterStage *stage,
|
|||||||
wl_list_insert_list (feedbacks,
|
wl_list_insert_list (feedbacks,
|
||||||
&surface->presentation_time.feedback_list);
|
&surface->presentation_time.feedback_list);
|
||||||
wl_list_init (&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 =
|
compositor->presentation_time.feedback_surfaces =
|
||||||
@ -261,10 +259,13 @@ maybe_update_presentation_sequence (MetaWaylandSurface *surface,
|
|||||||
{
|
{
|
||||||
unsigned int sequence_delta;
|
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;
|
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))
|
if (!(frame_info->flags & CLUTTER_FRAME_INFO_FLAG_VSYNC))
|
||||||
goto invalid_sequence;
|
goto invalid_sequence;
|
||||||
@ -434,7 +435,5 @@ meta_wayland_presentation_time_cursor_painted (MetaWaylandPresentationTime *pres
|
|||||||
wl_list_insert_list (feedbacks,
|
wl_list_insert_list (feedbacks,
|
||||||
&surface->presentation_time.feedback_list);
|
&surface->presentation_time.feedback_list);
|
||||||
wl_list_init (&surface->presentation_time.feedback_list);
|
wl_list_init (&surface->presentation_time.feedback_list);
|
||||||
|
|
||||||
surface->presentation_time.needs_sequence_update = TRUE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -265,7 +265,7 @@ struct _MetaWaylandSurface
|
|||||||
MetaWaylandOutput *last_output;
|
MetaWaylandOutput *last_output;
|
||||||
unsigned int last_output_sequence;
|
unsigned int last_output_sequence;
|
||||||
gboolean is_last_output_sequence_valid;
|
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
|
* Sequence has an undefined base, but is guaranteed to monotonically
|
||||||
|
Loading…
x
Reference in New Issue
Block a user