Add a test for text performance
Add tests/test-text-perf, which allows testing text performance as a function of the length of text strings and font size.
This commit is contained in:
parent
78a4f1de0d
commit
8724a16452
@ -1,6 +1,7 @@
|
||||
noinst_PROGRAMS = \
|
||||
test-text \
|
||||
test-picking
|
||||
test-picking \
|
||||
test-text-perf
|
||||
|
||||
INCLUDES = -I$(top_srcdir)/ -I$(top_srcdir)/clutter -I$(top_builddir)/clutter
|
||||
LDADD = $(top_builddir)/clutter/libclutter-@CLUTTER_FLAVOUR@-@CLUTTER_MAJORMINOR@.la
|
||||
@ -12,4 +13,5 @@ AM_LDFLAGS = $(CLUTTER_LIBS)
|
||||
|
||||
test_text_SOURCES = test-text.c
|
||||
test_picking_SOURCES = test-picking.c
|
||||
test_text_perf_SOURCES = test-text-perf.c
|
||||
|
||||
|
123
tests/micro-bench/test-text-perf.c
Normal file
123
tests/micro-bench/test-text-perf.c
Normal file
@ -0,0 +1,123 @@
|
||||
#include <clutter/clutter.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define STAGE_WIDTH 800
|
||||
#define STAGE_HEIGHT 600
|
||||
|
||||
static int font_size;
|
||||
static int n_chars;
|
||||
static int rows, cols;
|
||||
|
||||
gboolean idle (gpointer data)
|
||||
{
|
||||
ClutterActor *stage = CLUTTER_ACTOR (data);
|
||||
|
||||
static GTimer *timer = NULL;
|
||||
static int fps = 0;
|
||||
|
||||
if (!timer)
|
||||
{
|
||||
timer = g_timer_new ();
|
||||
g_timer_start (timer);
|
||||
}
|
||||
|
||||
if (g_timer_elapsed (timer, NULL) >= 1)
|
||||
{
|
||||
printf ("fps=%d, strings/sec=%d, chars/sec=%d\n",
|
||||
fps,
|
||||
fps * rows * cols,
|
||||
fps * rows * cols * n_chars);
|
||||
g_timer_start (timer);
|
||||
fps = 0;
|
||||
}
|
||||
|
||||
clutter_actor_paint (stage);
|
||||
++fps;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static ClutterActor *
|
||||
create_label()
|
||||
{
|
||||
ClutterColor label_color = { 0xff, 0xff, 0xff, 0xff };
|
||||
ClutterActor *label;
|
||||
char *font_name;
|
||||
GString *str;
|
||||
int i;
|
||||
|
||||
font_name = g_strdup_printf ("Monospace %dpx", font_size);
|
||||
|
||||
str = g_string_new (NULL);
|
||||
for (i < 0; i < n_chars; i++)
|
||||
g_string_append_c (str, 'A' + (i % 26));
|
||||
|
||||
label = clutter_text_new_with_text (font_name, str->str);
|
||||
clutter_text_set_color (CLUTTER_TEXT (label), &label_color);
|
||||
|
||||
g_free (font_name);
|
||||
g_string_free (str, TRUE);
|
||||
|
||||
return label;
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
ClutterActor *stage;
|
||||
ClutterColor stage_color = { 0x00, 0x00, 0x00, 0xff };
|
||||
ClutterActor *label;
|
||||
int w, h;
|
||||
int row, col;
|
||||
|
||||
clutter_init (&argc, &argv);
|
||||
|
||||
if (argc != 3)
|
||||
{
|
||||
g_printerr ("Usage test-text-perf FONT_SIZE N_CHARS\n");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
font_size = atoi (argv[1]);
|
||||
n_chars = atoi (argv[2]);
|
||||
|
||||
g_print ("Monospace %dpx, string length = %d\n", font_size, n_chars);
|
||||
|
||||
stage = clutter_stage_get_default ();
|
||||
clutter_actor_set_size (stage, STAGE_WIDTH, STAGE_HEIGHT);
|
||||
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
|
||||
|
||||
label = create_label ();
|
||||
w = clutter_actor_get_width (label);
|
||||
h = clutter_actor_get_height (label);
|
||||
cols = STAGE_WIDTH / w;
|
||||
rows = STAGE_HEIGHT / h;
|
||||
clutter_actor_destroy (label);
|
||||
|
||||
if (cols == 0 || rows == 0)
|
||||
{
|
||||
g_printerr("Too many characters to fit in stage\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for (row=0; row<rows; row++)
|
||||
for (col=0; col<cols; col++)
|
||||
{
|
||||
label = create_label();
|
||||
clutter_actor_set_position (label, w * col, h * row);
|
||||
clutter_container_add_actor (CLUTTER_CONTAINER (stage), label);
|
||||
}
|
||||
|
||||
clutter_actor_show_all (stage);
|
||||
|
||||
g_signal_connect (stage, "key-press-event",
|
||||
G_CALLBACK (clutter_main_quit), NULL);
|
||||
|
||||
g_idle_add (idle, (gpointer) stage);
|
||||
|
||||
clutter_main();
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user