diff options
author | Benjamin Otte <otte@redhat.com> | 2023-05-09 14:55:54 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2023-05-09 16:29:41 +0200 |
commit | 02e2a6f311210d28e135db01d7bf2f8417d66e5c (patch) | |
tree | dc64bbfaec71b1c8cd31e23c84a2435b5477bfdf /gdk | |
parent | fa42e02a763295ca82c42c5ceec92c8666d0cfb2 (diff) | |
download | gtk+-02e2a6f311210d28e135db01d7bf2f8417d66e5c.tar.gz |
gdk: Add GDK_DEBUG=no-vsync
That turns off waiting and freezing in the frame clock and in
surfaces and triggers redraws asap.
Diffstat (limited to 'gdk')
-rw-r--r-- | gdk/gdk.c | 1 | ||||
-rw-r--r-- | gdk/gdkdebugprivate.h | 1 | ||||
-rw-r--r-- | gdk/gdkframeclockidle.c | 6 | ||||
-rw-r--r-- | gdk/gdksurface.c | 6 |
4 files changed, 13 insertions, 1 deletions
@@ -132,6 +132,7 @@ static const GdkDebugKey gdk_debug_keys[] = { { "vulkan-validate", GDK_DEBUG_VULKAN_VALIDATE, "Load the Vulkan validation layer", TRUE }, { "default-settings",GDK_DEBUG_DEFAULT_SETTINGS, "Force default values for xsettings", TRUE }, { "high-depth", GDK_DEBUG_HIGH_DEPTH, "Use high bit depth rendering if possible", TRUE }, + { "no-vsync", GDK_DEBUG_NO_VSYNC, "Repaint instantly (uses 100% CPU with animations)", TRUE }, }; diff --git a/gdk/gdkdebugprivate.h b/gdk/gdkdebugprivate.h index d41cf3178f..f5199bae82 100644 --- a/gdk/gdkdebugprivate.h +++ b/gdk/gdkdebugprivate.h @@ -52,6 +52,7 @@ typedef enum { GDK_DEBUG_VULKAN_VALIDATE = 1 << 23, GDK_DEBUG_DEFAULT_SETTINGS= 1 << 24, GDK_DEBUG_HIGH_DEPTH = 1 << 25, + GDK_DEBUG_NO_VSYNC = 1 << 26, } GdkDebugFlags; extern guint _gdk_debug_flags; diff --git a/gdk/gdkframeclockidle.c b/gdk/gdkframeclockidle.c index 58c6476f72..3deade7b05 100644 --- a/gdk/gdkframeclockidle.c +++ b/gdk/gdkframeclockidle.c @@ -280,6 +280,9 @@ gdk_frame_clock_idle_is_frozen (GdkFrameClockIdle *self) { GdkFrameClockIdlePrivate *priv = self->priv; + if (GDK_DEBUG_CHECK (NO_VSYNC)) + return FALSE; + return priv->freeze_count > 0; } @@ -317,7 +320,8 @@ maybe_start_idle (GdkFrameClockIdle *self, { guint min_interval = 0; - if (priv->min_next_frame_time != 0) + if (priv->min_next_frame_time != 0 && + !GDK_DEBUG_CHECK (NO_VSYNC)) { gint64 now = g_get_monotonic_time (); gint64 min_interval_us = MAX (priv->min_next_frame_time, now) - now; diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c index 981a511935..dc2bd473e0 100644 --- a/gdk/gdksurface.c +++ b/gdk/gdksurface.c @@ -1530,6 +1530,9 @@ gdk_surface_freeze_updates (GdkSurface *surface) { g_return_if_fail (GDK_IS_SURFACE (surface)); + if (GDK_DEBUG_CHECK (NO_VSYNC)) + return; + surface->update_freeze_count++; if (surface->update_freeze_count == 1) _gdk_frame_clock_uninhibit_freeze (surface->frame_clock); @@ -1562,6 +1565,9 @@ gdk_surface_thaw_updates (GdkSurface *surface) { g_return_if_fail (GDK_IS_SURFACE (surface)); + if (GDK_DEBUG_CHECK (NO_VSYNC)) + return; + g_return_if_fail (surface->update_freeze_count > 0); if (--surface->update_freeze_count == 0) |