[gtk+/wip/alexl/optimize-snapshot: 7/7] DO NOT MERGE - test code



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]