[gtk+/wip/alexl/optimize-snapshot: 7/7] DO NOT MERGE - test code
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/alexl/optimize-snapshot: 7/7] DO NOT MERGE - test code
- Date: Wed, 11 Jan 2017 11:52:01 +0000 (UTC)
commit e380e8c2ccd418ded179ebe5bb3c6c03febfa0d7
Author: Alexander Larsson <alexl redhat com>
Date: Wed Jan 11 12:47:32 2017 +0100
DO NOT MERGE - test code
This adds some spew for snapshot and render time, and
adds tweaks for testing:
GSK_NO_RENDER setenv to completely skip the render phase (for profiling)
GSK_NO_LAYOUT setenv to disable pango layout nodes
Also, disable some widget from rendering to avoid fallback:
entry
textview
gtk/gtkentry.c | 2 ++
gtk/gtksnapshot.c | 13 +++++++++++++
gtk/gtktextview.c | 9 +++++++++
gtk/gtkwidget.c | 35 ++++++++++++++++++++++++++++++++++-
4 files changed, 58 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index 2a04129..43e04d7 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -3592,6 +3592,8 @@ gtk_entry_render (GtkCssGadget *gadget,
cairo_t *cr;
int i;
+ return FALSE;
+
widget = gtk_css_gadget_get_owner (gadget);
entry = GTK_ENTRY (widget);
priv = entry->priv;
diff --git a/gtk/gtksnapshot.c b/gtk/gtksnapshot.c
index 72f1b15..31ddad2 100644
--- a/gtk/gtksnapshot.c
+++ b/gtk/gtksnapshot.c
@@ -1137,6 +1137,19 @@ gtk_snapshot_render_layout (GtkSnapshot *snapshot,
GtkCssValue *shadow;
cairo_t *cr;
+ {
+ static int no_layout = 0;
+ if (no_layout == 0)
+ {
+ if (g_getenv ("GSK_NO_LAYOUT") != NULL)
+ no_layout = 2;
+ else
+ no_layout = 1;
+ }
+ if (no_layout == 2)
+ return;
+ }
+
g_return_if_fail (snapshot != NULL);
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
g_return_if_fail (PANGO_IS_LAYOUT (layout));
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index 7f4f79a..0b61d47 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -428,6 +428,8 @@ static gint gtk_text_view_motion_event (GtkWidget *widget,
GdkEventMotion *event);
static gint gtk_text_view_draw (GtkWidget *widget,
cairo_t *cr);
+static void gtk_text_view_snapshot (GtkWidget *widget,
+ GtkSnapshot *snapshot);
static gboolean gtk_text_view_focus (GtkWidget *widget,
GtkDirectionType direction);
static void gtk_text_view_select_all (GtkWidget *widget,
@@ -737,6 +739,7 @@ gtk_text_view_class_init (GtkTextViewClass *klass)
gobject_class->get_property = gtk_text_view_get_property;
gobject_class->finalize = gtk_text_view_finalize;
+ widget_class->snapshot = gtk_text_view_snapshot;
widget_class->destroy = gtk_text_view_destroy;
widget_class->realize = gtk_text_view_realize;
widget_class->unrealize = gtk_text_view_unrealize;
@@ -5901,6 +5904,12 @@ paint_border_window (GtkTextView *text_view,
gtk_style_context_restore (context);
}
+static void
+gtk_text_view_snapshot (GtkWidget *widget,
+ GtkSnapshot *snapshot)
+{
+}
+
static gboolean
gtk_text_view_draw (GtkWidget *widget,
cairo_t *cr)
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 14b2d6d..07935df 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -15690,8 +15690,23 @@ gtk_widget_render (GtkWidget *widget,
clip,
"Render<%s>", G_OBJECT_TYPE_NAME (widget));
cairo_region_destroy (clip);
+ gint64 start_snapshot = g_get_monotonic_time ();
gtk_widget_snapshot (widget, &snapshot);
root = gtk_snapshot_finish (&snapshot);
+ gint64 end_snapshot = g_get_monotonic_time ();
+ {
+ gint64 delta = end_snapshot - start_snapshot;
+ static gint64 min_delta = G_MAXINT64;
+ static gint64 max_delta = 0;
+ static gint64 n_delta = 0;
+ static gint64 total_delta = 0;
+ min_delta = MIN (min_delta, delta);
+ max_delta = MAX (max_delta, delta);
+ n_delta++;
+ total_delta += delta;
+ g_print ("Snapshot took %.1fms (min: %.1f, max: %.1f, avg: %.1f)\n",
+ delta / 1000.0, min_delta / 1000.0, max_delta / 1000.0, total_delta / (1000.0 * n_delta));
+ }
if (root != NULL)
{
gtk_inspector_record_render (widget,
@@ -15700,8 +15715,26 @@ gtk_widget_render (GtkWidget *widget,
region,
context,
root);
+ if (g_getenv ("GSK_NO_RENDER") == NULL)
+ {
+ gint64 start_render = g_get_monotonic_time ();
+ gsk_renderer_render (renderer, root, context);
+ gint64 end_render = g_get_monotonic_time ();
+ {
+ gint64 delta = end_render - start_render;
+ static gint64 min_delta = G_MAXINT64;
+ static gint64 max_delta = 0;
+ static gint64 n_delta = 0;
+ static gint64 total_delta = 0;
+ min_delta = MIN (min_delta, delta);
+ max_delta = MAX (max_delta, delta);
+ n_delta++;
+ total_delta += delta;
+ g_print ("Render took %.1fms (min: %.1f, max: %.1f, avg: %.1f)\n",
+ delta / 1000.0, min_delta / 1000.0, max_delta / 1000.0, total_delta / (1000.0 *
n_delta));
+ }
+ }
- gsk_renderer_render (renderer, root, context);
gsk_render_node_unref (root);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]