gtk: Remove debug updates

With the soon-to-arrive automatic updates (aka computing invalid region
from render nodes), this will no longer be necessary.
This commit is contained in:
Benjamin Otte 2018-03-28 16:06:32 +02:00
parent 925cbeaadf
commit 7e078cd940
10 changed files with 15 additions and 417 deletions

View File

@ -37,22 +37,21 @@ G_BEGIN_DECLS
typedef enum {
GTK_DEBUG_TEXT = 1 << 0,
GTK_DEBUG_TREE = 1 << 1,
GTK_DEBUG_UPDATES = 1 << 2,
GTK_DEBUG_KEYBINDINGS = 1 << 3,
GTK_DEBUG_MODULES = 1 << 4,
GTK_DEBUG_GEOMETRY = 1 << 5,
GTK_DEBUG_ICONTHEME = 1 << 6,
GTK_DEBUG_PRINTING = 1 << 7,
GTK_DEBUG_BUILDER = 1 << 8,
GTK_DEBUG_SIZE_REQUEST = 1 << 9,
GTK_DEBUG_NO_CSS_CACHE = 1 << 10,
GTK_DEBUG_BASELINES = 1 << 11,
GTK_DEBUG_INTERACTIVE = 1 << 12,
GTK_DEBUG_TOUCHSCREEN = 1 << 13,
GTK_DEBUG_ACTIONS = 1 << 14,
GTK_DEBUG_RESIZE = 1 << 15,
GTK_DEBUG_LAYOUT = 1 << 16,
GTK_DEBUG_SNAPSHOT = 1 << 17
GTK_DEBUG_KEYBINDINGS = 1 << 2,
GTK_DEBUG_MODULES = 1 << 3,
GTK_DEBUG_GEOMETRY = 1 << 4,
GTK_DEBUG_ICONTHEME = 1 << 5,
GTK_DEBUG_PRINTING = 1 << 6,
GTK_DEBUG_BUILDER = 1 << 7,
GTK_DEBUG_SIZE_REQUEST = 1 << 8,
GTK_DEBUG_NO_CSS_CACHE = 1 << 9,
GTK_DEBUG_BASELINES = 1 << 10,
GTK_DEBUG_INTERACTIVE = 1 << 11,
GTK_DEBUG_TOUCHSCREEN = 1 << 12,
GTK_DEBUG_ACTIONS = 1 << 13,
GTK_DEBUG_RESIZE = 1 << 14,
GTK_DEBUG_LAYOUT = 1 << 15,
GTK_DEBUG_SNAPSHOT = 1 << 16
} GtkDebugFlag;
#ifdef G_ENABLE_DEBUG

View File

@ -1,294 +0,0 @@
/* GTK - The GIMP Toolkit
* Copyright (C) 2016 Benjamin Otte <otte@gnome.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include "gtkdebugupdatesprivate.h"
#include "gtksnapshot.h"
/* duration before we start fading in us */
#define GDK_DRAW_REGION_MIN_DURATION 50 * 1000
/* duration when fade is finished in us */
#define GDK_DRAW_REGION_MAX_DURATION 200 * 1000
typedef struct {
gint64 timestamp;
cairo_region_t *region;
} GtkDebugUpdate;
static gboolean _gtk_debug_updates_enabled = FALSE;
static GQuark _gtk_debug_updates_quark = 0;
static void
gtk_debug_updates_init (void)
{
static gboolean inited = FALSE;
if (G_LIKELY (inited))
return;
_gtk_debug_updates_quark = g_quark_from_static_string ("-gtk-debug-updates");
inited = TRUE;
}
gboolean
gtk_debug_updates_get_enabled (void)
{
return _gtk_debug_updates_enabled;
}
void
gtk_debug_updates_set_enabled (gboolean enabled)
{
if (enabled)
gtk_debug_updates_init ();
_gtk_debug_updates_enabled = enabled;
}
gboolean
gtk_debug_updates_get_enabled_for_display (GdkDisplay *display)
{
if (gtk_debug_updates_get_enabled ())
return TRUE;
if (_gtk_debug_updates_quark == 0)
return FALSE;
return g_object_get_qdata (G_OBJECT (display), _gtk_debug_updates_quark) != NULL;
}
void
gtk_debug_updates_set_enabled_for_display (GdkDisplay *display,
gboolean enabled)
{
if (enabled)
{
gtk_debug_updates_init ();
g_object_set_qdata (G_OBJECT (display), _gtk_debug_updates_quark, GINT_TO_POINTER (TRUE));
}
else
{
if (_gtk_debug_updates_quark != 0)
g_object_steal_qdata (G_OBJECT (display), _gtk_debug_updates_quark);
}
}
static void
gtk_debug_update_free (gpointer data)
{
GtkDebugUpdate *region = data;
cairo_region_destroy (region->region);
g_slice_free (GtkDebugUpdate, region);
}
static void
gtk_debug_update_free_queue (gpointer data)
{
GQueue *queue = data;
g_queue_free_full (queue, gtk_debug_update_free);
}
static void
gtk_debug_updates_print (GQueue *queue,
const cairo_region_t *region,
const char *format,
...) G_GNUC_PRINTF(3,4);
static void
gtk_debug_updates_print (GQueue *queue,
const cairo_region_t *region,
const char *format,
...)
{
#if 0
GString *string = g_string_new (NULL);
va_list args;
g_string_append_printf (string, "%3u: ", g_queue_get_length (queue));
if (region)
{
cairo_rectangle_int_t extents;
cairo_region_get_extents (region, &extents);
g_string_append_printf (string, "{%u,%u,%u,%u}(%u) ",
extents.x, extents.y,
extents.width, extents.height,
cairo_region_num_rectangles (region));
}
va_start (args, format);
g_string_append_vprintf (string, format, args);
va_end (args);
g_print ("%s\n", string->str);
g_string_free (string, TRUE);
#endif
}
static gboolean
gtk_window_manage_updates (GtkWidget *widget,
GdkFrameClock *frame_clock,
gpointer user_data)
{
GQueue *updates;
GtkDebugUpdate *draw;
cairo_region_t *region;
gint64 timestamp;
GList *l;
updates = g_object_get_qdata (G_OBJECT (widget), _gtk_debug_updates_quark);
if (updates == NULL)
return FALSE;
timestamp = gdk_frame_clock_get_frame_time (frame_clock);
gtk_debug_updates_print (updates, NULL, "Managing updates");
/* First queue an update for all regions.
* While doing so, set the correct timestamp on all untimed regions */
region = cairo_region_create ();
for (l = g_queue_peek_head_link (updates); l != NULL; l = l->next)
{
draw = l->data;
if (draw->timestamp == 0)
{
draw->timestamp = timestamp;
gtk_debug_updates_print (updates, draw->region, "Setting timestamp to %lli\n", (long long) timestamp);
}
cairo_region_union (region, draw->region);
}
gtk_debug_updates_print (updates, region, "Queued update");
gdk_surface_invalidate_region (gtk_widget_get_surface (widget), region);
cairo_region_destroy (region);
/* Then remove all outdated regions */
do {
draw = g_queue_peek_tail (updates);
if (draw == NULL)
{
gtk_debug_updates_print (updates, NULL, "Empty, no more updates");
g_object_set_qdata (G_OBJECT (widget), _gtk_debug_updates_quark, NULL);
return FALSE;
}
if (draw->timestamp + GDK_DRAW_REGION_MAX_DURATION >= timestamp)
break;
gtk_debug_updates_print (updates, draw->region, "Popped region");
draw = g_queue_pop_tail (updates);
gtk_debug_update_free (draw);
} while (TRUE);
return TRUE;
}
void
gtk_debug_updates_add (GtkWidget *widget,
const cairo_region_t *region)
{
GQueue *updates;
GtkDebugUpdate *draw;
if (!gtk_debug_updates_get_enabled_for_display (gtk_widget_get_display (widget)))
return;
updates = g_object_get_qdata (G_OBJECT (widget), _gtk_debug_updates_quark);
if (updates == NULL)
{
updates = g_queue_new ();
gtk_widget_add_tick_callback (widget,
gtk_window_manage_updates,
NULL,
NULL);
g_object_set_qdata_full (G_OBJECT (widget),
_gtk_debug_updates_quark,
updates,
gtk_debug_update_free_queue);
gtk_debug_updates_print (updates, NULL, "Newly created");
}
else
{
GtkDebugUpdate *first = g_queue_peek_head (updates);
if (first->timestamp == 0)
{
cairo_region_union (first->region, region);
gtk_debug_updates_print (updates, first->region, "Added to existing region");
return;
}
}
draw = g_slice_new0 (GtkDebugUpdate);
draw->region = cairo_region_copy (region);
g_queue_push_head (updates, draw);
gtk_debug_updates_print (updates, draw->region, "Added new region");
}
void
gtk_debug_updates_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot)
{
GQueue *updates;
GtkDebugUpdate *draw;
GdkRectangle rect;
gint64 timestamp;
double progress;
GList *l;
guint i;
if (!gtk_debug_updates_get_enabled_for_display (gtk_widget_get_display (widget)))
return;
updates = g_object_get_qdata (G_OBJECT (widget), _gtk_debug_updates_quark);
if (updates == NULL)
return;
timestamp = gdk_frame_clock_get_frame_time (gtk_widget_get_frame_clock (widget));
gtk_debug_updates_print (updates, NULL, "Painting at %lli", (long long) timestamp);
for (l = g_queue_peek_head_link (updates); l != NULL; l = l->next)
{
draw = l->data;
if (timestamp - draw->timestamp < GDK_DRAW_REGION_MIN_DURATION)
progress = 0.0;
else if (timestamp - draw->timestamp < GDK_DRAW_REGION_MAX_DURATION)
progress = (double) (timestamp - draw->timestamp - GDK_DRAW_REGION_MIN_DURATION)
/ (GDK_DRAW_REGION_MAX_DURATION - GDK_DRAW_REGION_MIN_DURATION);
else
continue;
gtk_debug_updates_print (updates, draw->region, "Painting with progress %g", progress);
for (i = 0; i < cairo_region_num_rectangles (draw->region); i++)
{
cairo_region_get_rectangle (draw->region, i, &rect);
gtk_snapshot_append_color (snapshot,
&(GdkRGBA) { 1, 0, 0, 0.4 * (1 - progress) },
&GRAPHENE_RECT_INIT(rect.x, rect.y, rect.width, rect.height),
"Debug Updates<%g>", progress);
}
}
}

View File

@ -1,40 +0,0 @@
/* GTK - The GIMP Toolkit
* Copyright (C) 2016 Benjamin Otte <otte@gnome.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GTK_DEBUG_UPDATES_PRIVATE_H__
#define __GTK_DEBUG_UPDATES_PRIVATE_H__
#include "gtkwidget.h"
G_BEGIN_DECLS
gboolean gtk_debug_updates_get_enabled (void);
void gtk_debug_updates_set_enabled (gboolean enabled);
gboolean gtk_debug_updates_get_enabled_for_display (GdkDisplay *display);
void gtk_debug_updates_set_enabled_for_display (GdkDisplay *display,
gboolean enabled);
void gtk_debug_updates_add (GtkWidget *widget,
const cairo_region_t *region);
void gtk_debug_updates_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot);
G_END_DECLS
#endif /* __GTK_DEBUG_UPDATES_PRIVATE_H__ */

View File

@ -116,7 +116,6 @@
#include "gtkaccelmapprivate.h"
#include "gtkbox.h"
#include "gtkdebug.h"
#include "gtkdebugupdatesprivate.h"
#include "gtkdndprivate.h"
#include "gtkmain.h"
#include "gtkmediafileprivate.h"
@ -157,7 +156,6 @@ DisplayDebugFlags debug_flags[N_DEBUG_DISPLAYS];
static const GDebugKey gtk_debug_keys[] = {
{ "text", GTK_DEBUG_TEXT },
{ "tree", GTK_DEBUG_TREE },
{ "updates", GTK_DEBUG_UPDATES },
{ "keybindings", GTK_DEBUG_KEYBINDINGS },
{ "modules", GTK_DEBUG_MODULES },
{ "geometry", GTK_DEBUG_GEOMETRY },
@ -653,9 +651,6 @@ do_post_parse_initialization (void)
signal (SIGPIPE, SIG_IGN);
#endif
if (debug_flags[0].flags & GTK_DEBUG_UPDATES)
gtk_debug_updates_set_enabled (TRUE);
gtk_widget_set_default_direction (gtk_get_locale_direction ());
gsk_ensure_resources ();

View File

@ -5667,10 +5667,6 @@ cursor_blinks (GtkTextView *text_view)
#ifdef DEBUG_VALIDATION_AND_SCROLLING
return FALSE;
#endif
#ifdef G_ENABLE_DEBUG
if (GTK_DEBUG_CHECK (UPDATES))
return FALSE;
#endif
g_object_get (settings, "gtk-cursor-blink", &blink, NULL);

View File

@ -41,7 +41,6 @@
#include "gtkcssstylepropertyprivate.h"
#include "gtkcsswidgetnodeprivate.h"
#include "gtkdebug.h"
#include "gtkdebugupdatesprivate.h"
#include "gtkeventcontrollerlegacyprivate.h"
#include "gtkgesturedrag.h"
#include "gtkgestureprivate.h"
@ -4383,7 +4382,6 @@ gtk_widget_queue_draw_region (GtkWidget *widget,
cairo_region_translate (region2, x, y);
invalidate:
gtk_debug_updates_add (windowed_parent, region2);
gdk_surface_invalidate_region (_gtk_widget_get_surface (widget), region2);
cairo_region_destroy (region2);

View File

@ -41,7 +41,6 @@
#include "gtkcssrgbavalueprivate.h"
#include "gtkcssshadowsvalueprivate.h"
#include "gtkcssstylepropertyprivate.h"
#include "gtkdebugupdatesprivate.h"
#include "gtkdragdest.h"
#include "gtkgesturedrag.h"
#include "gtkgesturemultipress.h"
@ -9306,8 +9305,6 @@ gtk_window_snapshot (GtkWidget *widget,
GtkWindowPopover *data = l->data;
gtk_widget_snapshot_child (widget, data->widget, snapshot);
}
gtk_debug_updates_snapshot (widget, snapshot);
}
/**

View File

@ -24,7 +24,6 @@
#include "gtkbox.h"
#include "gtkcomboboxtext.h"
#include "gtkcssproviderprivate.h"
#include "gtkdebugupdatesprivate.h"
#include "gtkdebug.h"
#include "gtkprivate.h"
#include "gtksettings.h"
@ -66,7 +65,6 @@ struct _GtkInspectorVisualPrivate
GtkWidget *debug_box;
GtkWidget *rendering_mode_combo;
GtkWidget *updates_switch;
GtkWidget *baselines_switch;
GtkWidget *layout_switch;
GtkWidget *touchscreen_switch;
@ -222,25 +220,6 @@ font_scale_entry_activated (GtkEntry *entry,
update_font_scale (vis, factor, TRUE, FALSE);
}
static void
updates_activate (GtkSwitch *sw)
{
gboolean updates;
updates = gtk_switch_get_active (sw);
gtk_debug_updates_set_enabled_for_display (gdk_display_get_default (), updates);
redraw_everything ();
}
static void
init_updates (GtkInspectorVisual *vis)
{
gboolean updates = FALSE;
updates = gtk_debug_updates_get_enabled_for_display (gdk_display_get_default ());
gtk_switch_set_active (GTK_SWITCH (vis->priv->updates_switch), updates);
}
static void
baselines_activate (GtkSwitch *sw)
{
@ -849,7 +828,6 @@ gtk_inspector_visual_init (GtkInspectorVisual *vis)
init_font_scale (vis);
init_scale (vis);
init_rendering_mode (vis);
init_updates (vis);
init_animation (vis);
init_slowdown (vis);
init_touchscreen (vis);
@ -882,7 +860,6 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/visual.ui");
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, rendering_mode_combo);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, updates_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, direction_combo);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, baselines_switch);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, layout_switch);
@ -908,7 +885,6 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, font_scale_entry);
gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, font_scale_adjustment);
gtk_widget_class_bind_template_callback (widget_class, updates_activate);
gtk_widget_class_bind_template_callback (widget_class, direction_changed);
gtk_widget_class_bind_template_callback (widget_class, rendering_mode_changed);
gtk_widget_class_bind_template_callback (widget_class, baselines_activate);

View File

@ -405,33 +405,6 @@
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="activatable">0</property>
<child>
<object class="GtkBox">
<property name="margin">10</property>
<property name="spacing">40</property>
<child>
<object class="GtkLabel" id="updates_label">
<property name="label" translatable="yes">Show Graphic Updates</property>
<property name="halign">start</property>
<property name="valign">baseline</property>
<property name="xalign">0.0</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="updates_switch">
<property name="halign">end</property>
<property name="valign">baseline</property>
<property name="hexpand">1</property>
<signal name="notify::active" handler="updates_activate"/>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="activatable">0</property>
@ -652,7 +625,6 @@
<widget name="hidpi_label"/>
<widget name="animation_label"/>
<widget name="rendering_mode_label"/>
<widget name="updates_label"/>
<widget name="baselines_label"/>
<widget name="layout_label"/>
<widget name="touchscreen_label"/>

View File

@ -87,7 +87,6 @@ gtk_private_sources = files([
'gtkcssvalue.c',
'gtkcsswidgetnode.c',
'gtkcsswin32sizevalue.c',
'gtkdebugupdates.c',
'gtkeventcontrollerlegacy.c',
'gtkfilechooserembed.c',
'gtkfilechooserentry.c',