[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.