[cairo] [PATCH 1/2 v2] pthread-same-source: Add ref image generation
Bryce W. Harrington
b.harrington at samsung.com
Sat Apr 12 15:01:50 PDT 2014
On Sat, Apr 12, 2014 at 12:11:54PM +0200, Uli Schlachter wrote:
> 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 <psychon at znc.in>
> ---
> 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.
Ah, yes I agree. Sorry, was confused by the patch series numbering.
Reviewed-by: Bryce Harrington <b.harrington at samsung.com>
> 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 <otte at gnome.org>
> */
>
> +#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
> cairo at cairographics.org
> http://lists.cairographics.org/mailman/listinfo/cairo
More information about the cairo
mailing list