From c8efed89ba740fe06a8207ae17520a4db38c96a7 Mon Sep 17 00:00:00 2001 From: Vinson Lee Date: Wed, 14 Apr 2010 18:06:54 -0700 Subject: [PATCH] gallium/tests: Add test case for pipe_barrier. --- src/gallium/tests/unit/Makefile | 1 + src/gallium/tests/unit/SConscript | 1 + src/gallium/tests/unit/pipe_barrier_test.c | 86 ++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 src/gallium/tests/unit/pipe_barrier_test.c diff --git a/src/gallium/tests/unit/Makefile b/src/gallium/tests/unit/Makefile index 9747c801014..018c3a73475 100644 --- a/src/gallium/tests/unit/Makefile +++ b/src/gallium/tests/unit/Makefile @@ -19,6 +19,7 @@ LINKS = \ $(PROG_LINKS) SOURCES = \ + pipe_barrier_test.c \ u_format_test.c \ u_half_test.c diff --git a/src/gallium/tests/unit/SConscript b/src/gallium/tests/unit/SConscript index 0db3bb687c6..364eb662077 100644 --- a/src/gallium/tests/unit/SConscript +++ b/src/gallium/tests/unit/SConscript @@ -5,6 +5,7 @@ env = env.Clone() env.Prepend(LIBS = [gallium]) progs = [ + 'pipe_barrier_test', 'u_format_test', 'u_half_test' ] diff --git a/src/gallium/tests/unit/pipe_barrier_test.c b/src/gallium/tests/unit/pipe_barrier_test.c new file mode 100644 index 00000000000..f5d72b0abae --- /dev/null +++ b/src/gallium/tests/unit/pipe_barrier_test.c @@ -0,0 +1,86 @@ +/************************************************************************** + * + * Copyright 2009-2010 VMware, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + + +/* + * Test case for pipe_barrier. + * + * The test succeeds if no thread exits before all the other threads reach + * the barrier. + */ + + +#include + +#include "os/os_thread.h" +#include "os/os_time.h" + + +#define NUM_THREADS 10 + +static pipe_thread threads[NUM_THREADS]; +static pipe_barrier barrier; +static int thread_ids[NUM_THREADS]; + + +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); + pipe_barrier_wait(&barrier); + printf("thread %d exiting\n", thread_id); + + return NULL; +} + + +int main() +{ + int i; + + printf("pipe_barrier_test starting\n"); + + pipe_barrier_init(&barrier, NUM_THREADS); + + for (i = 0; i < NUM_THREADS; i++) { + thread_ids[i] = i; + threads[i] = pipe_thread_create(thread_function, (void *) &thread_ids[i]); + } + + for (i = 0; i < NUM_THREADS; i++ ) { + pipe_thread_wait(threads[i]); + } + + pipe_barrier_destroy(&barrier); + + printf("pipe_barrier_test exiting\n"); + + return 0; +} -- 2.30.2