[gtk/wip/damaged-but-no-frost-bite: 270/271] x11: Factor out some of frame sync code into subroutines
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/damaged-but-no-frost-bite: 270/271] x11: Factor out some of frame sync code into subroutines
- Date: Wed, 3 Jun 2020 18:30:09 +0000 (UTC)
commit 6589d15c16dba01b44b8f09e602858a502489102
Author: Ray Strode <rstrode redhat com>
Date: Tue Jun 2 16:29:03 2020 -0400
x11: Factor out some of frame sync code into subroutines
This commit moves some of the end frame sync counter handling
code to subroutines.
It's a minor readability win, but the main motivation is to
make it easier in a subsequent commit to defer updating the
sync counter until a more appropriate time.
gdk/x11/gdksurface-x11.c | 39 +++++++++++++++++++++++++++++++++------
1 file changed, 33 insertions(+), 6 deletions(-)
---
diff --git a/gdk/x11/gdksurface-x11.c b/gdk/x11/gdksurface-x11.c
index 41d9d4d91d..8ac6d0f651 100644
--- a/gdk/x11/gdksurface-x11.c
+++ b/gdk/x11/gdksurface-x11.c
@@ -360,6 +360,37 @@ gdk_x11_surface_begin_frame (GdkSurface *surface,
}
}
+static gboolean
+should_sync_frame_drawing (GdkSurface *surface)
+{
+ GdkX11Surface *impl = GDK_X11_SURFACE (surface);
+
+ /* disabled client side */
+ if (!impl->frame_sync_enabled)
+ return FALSE;
+
+ /* disabled compositor side */
+ if (!gdk_x11_screen_supports_net_wm_hint (GDK_SURFACE_SCREEN (surface),
+ g_intern_static_string ("_NET_WM_FRAME_DRAWN")))
+ return FALSE;
+
+ return TRUE;
+}
+
+static void
+sync_counter_for_end_frame (GdkSurface *surface)
+{
+ GdkX11Surface *impl = GDK_X11_SURFACE (surface);
+
+ g_assert (!impl->toplevel->in_frame);
+ g_assert (impl->toplevel->extended_update_counter != None);
+ g_assert ((impl->toplevel->current_counter_value % 2) == 0);
+
+ set_sync_counter (GDK_SURFACE_XDISPLAY (surface),
+ impl->toplevel->extended_update_counter,
+ impl->toplevel->current_counter_value);
+}
+
static void
gdk_x11_surface_end_frame (GdkSurface *surface)
{
@@ -405,13 +436,9 @@ gdk_x11_surface_end_frame (GdkSurface *surface)
else
impl->toplevel->current_counter_value += 1;
- set_sync_counter(GDK_SURFACE_XDISPLAY (surface),
- impl->toplevel->extended_update_counter,
- impl->toplevel->current_counter_value);
+ sync_counter_for_end_frame (surface);
- if (impl->frame_sync_enabled &&
- gdk_x11_screen_supports_net_wm_hint (GDK_SURFACE_SCREEN (surface),
- g_intern_static_string ("_NET_WM_FRAME_DRAWN")))
+ if (should_sync_frame_drawing (surface))
{
impl->toplevel->frame_pending = TRUE;
gdk_surface_freeze_updates (surface);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]