[gtk+] tests: Improve rendernode test further



commit b97e4e863159674efab74302bc3e69bdff19be02
Author: Benjamin Otte <otte redhat com>
Date:   Fri Dec 23 11:30:09 2016 +0100

    tests: Improve rendernode test further
    
    - Print benchmark output in fallback path
    - Always run rendering, even when no filename given
    - Don't require a filename when running with --benchmark

 tests/rendernode.c |   94 ++++++++++++++++++++++++++++------------------------
 1 files changed, 51 insertions(+), 43 deletions(-)
---
diff --git a/tests/rendernode.c b/tests/rendernode.c
index bd10041..73f67db 100644
--- a/tests/rendernode.c
+++ b/tests/rendernode.c
@@ -29,7 +29,7 @@ main(int argc, char **argv)
       return 1;
     }
 
-  if (argc != 3 && (argc != 2 && dump_variant))
+  if (argc != 3 && (argc != 2 && (dump_variant || benchmark)))
     {
       g_printerr ("Usage: %s [OPTIONS] NODE-FILE PNG-FILE\n", argv[0]);
       return 1;
@@ -68,59 +68,67 @@ main(int argc, char **argv)
       return 1;
     }
 
-  if (argc > 2)
+  if (fallback)
     {
-      if (fallback)
-        {
-          graphene_rect_t bounds;
-          cairo_t *cr;
+      graphene_rect_t bounds;
+      cairo_t *cr;
 
-          gsk_render_node_get_bounds (node, &bounds);
-          surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, ceil (bounds.size.width), ceil 
(bounds.size.height));
-          cr = cairo_create (surface);
+      gsk_render_node_get_bounds (node, &bounds);
+      surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, ceil (bounds.size.width), ceil 
(bounds.size.height));
+      cr = cairo_create (surface);
 
-          cairo_translate (cr, - bounds.origin.x, - bounds.origin.y);
-          gsk_render_node_draw (node, cr);
+      cairo_translate (cr, - bounds.origin.x, - bounds.origin.y);
+      start = g_get_monotonic_time ();
+      gsk_render_node_draw (node, cr);
+      end = g_get_monotonic_time ();
+      if (benchmark)
+        g_print ("Rendered fallback in %.4gs\n", (double) (end - start) / G_USEC_PER_SEC);
 
-          cairo_destroy (cr);
-        }
-      else
-        {
-          GskRenderer *renderer;
-          GdkWindow *window;
-          GskTexture *texture;
-
-          window = gdk_window_new_toplevel (gdk_display_get_default(), 0, 10 , 10);
-          renderer = gsk_renderer_new_for_window (window);
-
-          start = g_get_monotonic_time ();
-          texture = gsk_renderer_render_texture (renderer, node, NULL);
-          end = g_get_monotonic_time ();
-          if (benchmark)
-            g_print ("Rendered using %s in %.4gs\n", G_OBJECT_TYPE_NAME (renderer), (double) (end - start) / 
G_USEC_PER_SEC);
-          surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
-                                                gsk_texture_get_width (texture),
-                                                gsk_texture_get_height (texture));
-          gsk_texture_download (texture,
-                                cairo_image_surface_get_data (surface),
-                                cairo_image_surface_get_stride (surface));
-          cairo_surface_mark_dirty (surface);
-          gsk_texture_unref (texture);
-          g_object_unref (window);
-          g_object_unref (renderer);
-        }
+      cairo_destroy (cr);
+    }
+  else
+    {
+      GskRenderer *renderer;
+      GdkWindow *window;
+      GskTexture *texture;
+
+      window = gdk_window_new_toplevel (gdk_display_get_default(), 0, 10 , 10);
+      renderer = gsk_renderer_new_for_window (window);
+
+      start = g_get_monotonic_time ();
+      texture = gsk_renderer_render_texture (renderer, node, NULL);
+      end = g_get_monotonic_time ();
+      if (benchmark)
+        g_print ("Rendered using %s in %.4gs\n", G_OBJECT_TYPE_NAME (renderer), (double) (end - start) / 
G_USEC_PER_SEC);
+      surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                                            gsk_texture_get_width (texture),
+                                            gsk_texture_get_height (texture));
+      gsk_texture_download (texture,
+                            cairo_image_surface_get_data (surface),
+                            cairo_image_surface_get_stride (surface));
+      cairo_surface_mark_dirty (surface);
+      gsk_texture_unref (texture);
+      g_object_unref (window);
+      g_object_unref (renderer);
+    }
+
+  gsk_render_node_unref (node);
 
-      gsk_render_node_unref (node);
+  if (argc > 2)
+    {
+      cairo_status_t status;
+      
+      status = cairo_surface_write_to_png (surface, argv[2]);
 
-      if (cairo_surface_write_to_png (surface, argv[2]))
+      if (status != CAIRO_STATUS_SUCCESS)
         {
           cairo_surface_destroy (surface);
-          g_print ("Failed to save PNG file.\n");
+          g_print ("Failed to save PNG file: %s\n", cairo_status_to_string (status));
           return 1;
         }
-
-      cairo_surface_destroy (surface);
     }
 
+  cairo_surface_destroy (surface);
+
   return 0;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]