tests: Add some command-line flags to rendernode

This commit is contained in:
Benjamin Otte 2016-12-23 07:07:59 +01:00
parent 5e089c4345
commit 4e866ec06b

View File

@ -1,8 +1,12 @@
#include <gtk/gtk.h>
static gboolean benchmark = FALSE;
static gboolean dump_variant = FALSE;
static gboolean fallback = FALSE;
static GOptionEntry options[] = {
{ "benchmark", 'b', 0, G_OPTION_ARG_NONE, &benchmark, "Time operations", NULL },
{ "dump-variant", 'd', 0, G_OPTION_ARG_NONE, &dump_variant, "Dump GVariant structure", NULL },
{ "fallback", '\0', 0, G_OPTION_ARG_NONE, &fallback, "Draw node without a renderer", NULL },
{ NULL }
};
@ -14,6 +18,7 @@ main(int argc, char **argv)
GskRenderNode *node;
GError *error = NULL;
GBytes *bytes;
gint64 start, end;
char *contents;
gsize len;
@ -24,7 +29,7 @@ main(int argc, char **argv)
return 1;
}
if (argc != 3)
if (argc != 3 && (argc != 2 && dump_variant))
{
g_printerr ("Usage: %s [OPTIONS] NODE-FILE PNG-FILE\n", argv[0]);
return 1;
@ -37,7 +42,23 @@ main(int argc, char **argv)
}
bytes = g_bytes_new_take (contents, len);
if (dump_variant)
{
GVariant *variant = g_variant_new_from_bytes (G_VARIANT_TYPE ("(suuv)"), bytes, FALSE);
g_variant_print (variant, FALSE);
g_variant_unref (variant);
}
start = g_get_monotonic_time ();
node = gsk_render_node_deserialize (bytes);
end = g_get_monotonic_time ();
if (benchmark)
{
char *bytes_string = g_format_size (g_bytes_get_size (bytes));
g_print ("Loaded %s in %.4gs\n", bytes_string, (double) (end - start) / G_USEC_PER_SEC);
g_free (bytes_string);
}
g_bytes_unref (bytes);
if (node == NULL)
@ -46,6 +67,8 @@ main(int argc, char **argv)
return 1;
}
if (argc > 2)
{
if (fallback)
{
graphene_rect_t bounds;
@ -69,7 +92,11 @@ main(int argc, char **argv)
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));
@ -92,6 +119,7 @@ main(int argc, char **argv)
}
cairo_surface_destroy (surface);
}
return 0;
}