[PATCH 1/2 v2] pthread-same-source: Add ref image generation
Uli Schlachter <[email protected]>
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <[email protected]> |
When the new GENERATE_REFERENCE symbol is defined to 1, no threads are involved at all. In this case, all operations are done sequentially by the main thread. Thus, in this mode no thread issues can occur and the result must be usable as reference images. Signed-off-by: Uli Schlachter <[email protected]> --- Hi everyone, with this new version of the patch I got rid all pthread calls. It replaces patches 1 and 2 of the series that I sent yesterday. I think that this version is nicer than the one that I sent before. Uli test/pthread-same-source.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/test/pthread-same-source.c b/test/pthread-same-source.c index d0eda4a..2b26d18 100644 --- a/test/pthread-same-source.c +++ b/test/pthread-same-source.c @@ -24,8 +24,12 @@ * Author: Benjamin Otte <[email protected]> */ +#define GENERATE_REFERENCE 0 + #include "cairo-test.h" +#if !GENERATE_REFERENCE #include <pthread.h> +#endif #define N_THREADS 8 @@ -110,7 +114,9 @@ create_source (cairo_surface_t *similar) static cairo_test_status_t draw (cairo_t *cr, int width, int height) { +#if !GENERATE_REFERENCE pthread_t threads[N_THREADS]; +#endif thread_data_t thread_data[N_THREADS]; cairo_test_status_t test_status = CAIRO_TEST_SUCCESS; cairo_surface_t *source; @@ -125,12 +131,16 @@ draw (cairo_t *cr, int width, int height) status); } + cairo_set_source_rgb (cr, 0.5, 0.5, 0.5); + cairo_paint (cr); + for (i = 0; i < N_THREADS; i++) { thread_data[i].target = cairo_surface_create_similar (cairo_get_target (cr), CAIRO_CONTENT_COLOR_ALPHA, 4 * WIDTH, 4 * HEIGHT); thread_data[i].source = cairo_surface_reference (source); thread_data[i].id = i; +#if !GENERATE_REFERENCE if (pthread_create (&threads[i], NULL, draw_thread, &thread_data[i]) != 0) { threads[i] = pthread_self (); /* to indicate error */ cairo_surface_destroy (thread_data[i].target); @@ -138,13 +148,21 @@ draw (cairo_t *cr, int width, int height) test_status = CAIRO_TEST_FAILURE; break; } +#else + { + cairo_surface_t *surface = draw_thread(&thread_data[i]); + cairo_set_source_surface (cr, surface, 0, 0); + cairo_surface_destroy (surface); + cairo_paint (cr); + + cairo_translate (cr, 0, 4 * HEIGHT); + } +#endif } cairo_surface_destroy (source); - cairo_set_source_rgb (cr, 0.5, 0.5, 0.5); - cairo_paint (cr); - +#if !GENERATE_REFERENCE for (i = 0; i < N_THREADS; i++) { void *surface; @@ -161,6 +179,7 @@ draw (cairo_t *cr, int width, int height) test_status = CAIRO_TEST_FAILURE; } } +#endif return test_status; } -- 1.9.1 -- cairo mailing list [email protected] http://lists.cairographics.org/mailman/listinfo/cairo