Module: Mesa
Branch: master
Commit: f8a51034bded97c9ccf483dd51e7acda373fe1d1
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f8a51034bded97c9ccf483dd51e7acda373fe1d1

Author: Jose Fonseca <[email protected]>
Date:   Wed Apr 13 13:28:36 2016 +0100

test/unit: Make pipe_barrier_test actually check correct bahavior.

So it can run unattended.

Also make it silent by default.

Reviewed-by: Roland Scheidegger <[email protected]>

---

 src/gallium/tests/unit/pipe_barrier_test.c | 57 ++++++++++++++++++++++++++----
 1 file changed, 50 insertions(+), 7 deletions(-)

diff --git a/src/gallium/tests/unit/pipe_barrier_test.c 
b/src/gallium/tests/unit/pipe_barrier_test.c
index bab6aca..bb7989a 100644
--- a/src/gallium/tests/unit/pipe_barrier_test.c
+++ b/src/gallium/tests/unit/pipe_barrier_test.c
@@ -35,37 +35,78 @@
 
 
 #include <stdio.h>
+#include <stdlib.h>
 
 #include "os/os_thread.h"
 #include "os/os_time.h"
+#include "util/u_atomic.h"
 
 
 #define NUM_THREADS 10
 
+static int verbosity = 0;
+
 static pipe_thread threads[NUM_THREADS];
 static pipe_barrier barrier;
 static int thread_ids[NUM_THREADS];
 
+static volatile int waiting = 0;
+static volatile int proceeded = 0;
+
+
+#define LOG(fmt, ...) \
+   if (verbosity > 0) { \
+      fprintf(stdout, fmt, ##__VA_ARGS__); \
+   }
+
+#define CHECK(_cond) \
+   if (!(_cond)) { \
+      fprintf(stderr, "%s:%u: `%s` failed\n", __FILE__, __LINE__, #_cond); \
+      _exit(EXIT_FAILURE); \
+   }
+
 
 static PIPE_THREAD_ROUTINE(thread_function, thread_data)
 {
    int thread_id = *((int *) thread_data);
 
-   printf("thread %d starting\n", thread_id);
-   os_time_sleep(thread_id * 1000 * 1000);
-   printf("thread %d before barrier\n", thread_id);
+   LOG("thread %d starting\n", thread_id);
+   os_time_sleep(thread_id * 100 * 1000);
+   LOG("thread %d before barrier\n", thread_id);
+
+   CHECK(p_atomic_read(&proceeded) == 0);
+   p_atomic_inc(&waiting);
+
    pipe_barrier_wait(&barrier);
-   printf("thread %d exiting\n", thread_id);
+
+   CHECK(p_atomic_read(&waiting) == NUM_THREADS);
+
+   p_atomic_inc(&proceeded);
+
+   LOG("thread %d exiting\n", thread_id);
 
    return 0;
 }
 
 
-int main()
+int main(int argc, char *argv[])
 {
    int i;
 
-   printf("pipe_barrier_test starting\n");
+   for (i = 1; i < argc; ++i) {
+      const char *arg = argv[i];
+      if (strcmp(arg, "-v") == 0) {
+         ++verbosity;
+      } else {
+         fprintf(stderr, "error: unrecognized option `%s`\n", arg);
+         exit(EXIT_FAILURE);
+      }
+   }
+
+   // Disable buffering
+   setbuf(stdout, NULL);
+
+   LOG("pipe_barrier_test starting\n");
 
    pipe_barrier_init(&barrier, NUM_THREADS);
 
@@ -78,9 +119,11 @@ int main()
       pipe_thread_wait(threads[i]);
    }
 
+   CHECK(p_atomic_read(&proceeded) == NUM_THREADS);
+
    pipe_barrier_destroy(&barrier);
 
-   printf("pipe_barrier_test exiting\n");
+   LOG("pipe_barrier_test exiting\n");
 
    return 0;
 }

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to