summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2023-05-09 14:55:54 +0200
committerBenjamin Otte <otte@redhat.com>2023-05-09 16:29:41 +0200
commit02e2a6f311210d28e135db01d7bf2f8417d66e5c (patch)
treedc64bbfaec71b1c8cd31e23c84a2435b5477bfdf /gdk
parentfa42e02a763295ca82c42c5ceec92c8666d0cfb2 (diff)
downloadgtk+-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.c1
-rw-r--r--gdk/gdkdebugprivate.h1
-rw-r--r--gdk/gdkframeclockidle.c6
-rw-r--r--gdk/gdksurface.c6
4 files changed, 13 insertions, 1 deletions
diff --git a/gdk/gdk.c b/gdk/gdk.c
index 8c0bdaff00..1c54545523 100644
--- a/gdk/gdk.c
+++ b/gdk/gdk.c
@@ -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)