pthread-show-text.c [plain text]
#include "cairo-test.h"
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREADS_DEFAULT 50
#define NUM_ITERATIONS 50
static void *
start (void *closure)
{
cairo_surface_t *surface;
cairo_t *cr;
int i;
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 1, 1);
cr = cairo_create (surface);
cairo_save (cr);
{
cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
cairo_paint (cr);
}
cairo_restore (cr);
cairo_move_to (cr, 1, 1);
for (i=0; i < NUM_ITERATIONS; i++) {
cairo_select_font_face (cr, "serif",
CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size (cr, 8 + i);
cairo_show_text (cr, "Hello world.\n");
}
cairo_destroy (cr);
cairo_surface_destroy (surface);
return NULL;
}
int
main (int argc, char *argv[])
{
cairo_test_context_t ctx;
int err;
int i, num_threads;
pthread_t *pthread;
if (argc > 1) {
num_threads = atoi (argv[1]);
} else {
num_threads = NUM_THREADS_DEFAULT;
}
cairo_test_init (&ctx, "pthread-show-text");
cairo_test_log (&ctx, "Running with %d threads.\n", num_threads);
pthread = xmalloc (num_threads * sizeof (pthread_t));
for (i = 0; i < num_threads; i++) {
err = pthread_create (&pthread[i], NULL, start, NULL);
if (err) {
cairo_test_log (&ctx, "pthread_create failed: %s\n", strerror(err));
cairo_test_fini (&ctx);
return CAIRO_TEST_FAILURE;
}
}
for (i = 0; i < num_threads; i++)
pthread_join (pthread[i], NULL);
free (pthread);
cairo_test_fini (&ctx);
return CAIRO_TEST_SUCCESS;
}