[gtk+] tests: Improve rendernode test further
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] tests: Improve rendernode test further
- Date: Fri, 23 Dec 2016 10:36:32 +0000 (UTC)
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]