summaryrefslogtreecommitdiff
path: root/libs/pixman-0.40.0/test/thread-test.c
diff options
context:
space:
mode:
Diffstat (limited to 'libs/pixman-0.40.0/test/thread-test.c')
-rw-r--r--libs/pixman-0.40.0/test/thread-test.c231
1 files changed, 0 insertions, 231 deletions
diff --git a/libs/pixman-0.40.0/test/thread-test.c b/libs/pixman-0.40.0/test/thread-test.c
deleted file mode 100644
index 12c51e3..0000000
--- a/libs/pixman-0.40.0/test/thread-test.c
+++ /dev/null
@@ -1,231 +0,0 @@
-#include "utils.h"
-
-#if !defined (HAVE_PTHREADS) && !defined (_WIN32)
-
-int main ()
-{
- printf ("Skipped thread-test - pthreads or Windows Threads not supported\n");
- return 0;
-}
-
-#else
-
-#include <stdlib.h>
-
-#ifdef HAVE_PTHREADS
-# include <pthread.h>
-#elif defined (_WIN32)
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-#endif
-
-#define THREADS 16
-
-typedef struct
-{
- int thread_no;
- uint32_t *dst_buf;
- prng_t prng_state;
-#if defined (_WIN32) && !defined (HAVE_PTHREADS)
- uint32_t crc32;
-#endif
-} info_t;
-
-static const pixman_op_t operators[] =
-{
- PIXMAN_OP_SRC,
- PIXMAN_OP_OVER,
- PIXMAN_OP_ADD,
- PIXMAN_OP_CLEAR,
- PIXMAN_OP_SRC,
- PIXMAN_OP_DST,
- PIXMAN_OP_OVER,
- PIXMAN_OP_OVER_REVERSE,
- PIXMAN_OP_IN,
- PIXMAN_OP_IN_REVERSE,
- PIXMAN_OP_OUT,
- PIXMAN_OP_OUT_REVERSE,
- PIXMAN_OP_ATOP,
- PIXMAN_OP_ATOP_REVERSE,
- PIXMAN_OP_XOR,
- PIXMAN_OP_ADD,
- PIXMAN_OP_MULTIPLY,
- PIXMAN_OP_SCREEN,
- PIXMAN_OP_OVERLAY,
- PIXMAN_OP_DARKEN,
- PIXMAN_OP_LIGHTEN,
- PIXMAN_OP_HARD_LIGHT,
- PIXMAN_OP_DIFFERENCE,
- PIXMAN_OP_EXCLUSION,
-};
-
-static const pixman_format_code_t formats[] =
-{
- PIXMAN_a8r8g8b8,
- PIXMAN_r5g6b5,
- PIXMAN_a8,
- PIXMAN_a4,
- PIXMAN_a1,
- PIXMAN_b5g6r5,
- PIXMAN_r8g8b8a8,
- PIXMAN_a4r4g4b4
-};
-
-#define N_ROUNDS 8192
-
-#define RAND_ELT(arr) \
- arr[prng_rand_r(&info->prng_state) % ARRAY_LENGTH (arr)]
-
-#define DEST_WIDTH (7)
-
-#ifdef HAVE_PTHREADS
-static void *
-thread (void *data)
-#elif defined (_WIN32)
-DWORD WINAPI
-thread (LPVOID data)
-#endif
-{
- info_t *info = data;
- uint32_t crc32 = 0x0;
- uint32_t src_buf[64];
- pixman_image_t *dst_img, *src_img;
- int i;
-
- prng_srand_r (&info->prng_state, info->thread_no);
-
- for (i = 0; i < N_ROUNDS; ++i)
- {
- pixman_op_t op;
- int rand1, rand2;
-
- prng_randmemset_r (&info->prng_state, info->dst_buf,
- DEST_WIDTH * sizeof (uint32_t), 0);
- prng_randmemset_r (&info->prng_state, src_buf,
- sizeof (src_buf), 0);
-
- src_img = pixman_image_create_bits (
- RAND_ELT (formats), 4, 4, src_buf, 16);
- dst_img = pixman_image_create_bits (
- RAND_ELT (formats), DEST_WIDTH, 1, info->dst_buf,
- DEST_WIDTH * sizeof (uint32_t));
-
- image_endian_swap (src_img);
- image_endian_swap (dst_img);
-
- rand2 = prng_rand_r (&info->prng_state) % 4;
- rand1 = prng_rand_r (&info->prng_state) % 4;
- op = RAND_ELT (operators);
-
- pixman_image_composite32 (
- op,
- src_img, NULL, dst_img,
- rand1, rand2, 0, 0, 0, 0, DEST_WIDTH, 1);
-
- crc32 = compute_crc32_for_image (crc32, dst_img);
-
- pixman_image_unref (src_img);
- pixman_image_unref (dst_img);
- }
-
-#ifdef HAVE_PTHREADS
- return (void *)(uintptr_t)crc32;
-#elif defined (_WIN32)
- info->crc32 = crc32;
- return 0;
-#endif
-}
-
-static inline uint32_t
-byteswap32 (uint32_t x)
-{
- return ((x & ((uint32_t)0xFF << 24)) >> 24) |
- ((x & ((uint32_t)0xFF << 16)) >> 8) |
- ((x & ((uint32_t)0xFF << 8)) << 8) |
- ((x & ((uint32_t)0xFF << 0)) << 24);
-}
-
-int
-main (void)
-{
- uint32_t dest[THREADS * DEST_WIDTH];
- info_t info[THREADS] = { { 0 } };
-
-#ifdef HAVE_PTHREADS
- pthread_t threads[THREADS];
- void *retvals[THREADS];
-#elif defined (_WIN32)
- HANDLE hThreadArray[THREADS];
- DWORD dwThreadIdArray[THREADS];
-#endif
-
- uint32_t crc32s[THREADS], crc32;
- int i;
-
- for (i = 0; i < THREADS; ++i)
- {
- info[i].thread_no = i;
- info[i].dst_buf = &dest[i * DEST_WIDTH];
- }
-
-#ifdef HAVE_PTHREADS
- for (i = 0; i < THREADS; ++i)
- pthread_create (&threads[i], NULL, thread, &info[i]);
-
- for (i = 0; i < THREADS; ++i)
- pthread_join (threads[i], &retvals[i]);
-
- for (i = 0; i < THREADS; ++i)
- {
- crc32s[i] = (uintptr_t)retvals[i];
-
- if (is_little_endian())
- crc32s[i] = byteswap32 (crc32s[i]);
- }
-
-#elif defined (_WIN32)
- for (i = 0; i < THREADS; ++i)
- {
- hThreadArray[i] = CreateThread(NULL,
- 0,
- thread,
- &info[i],
- 0,
- &dwThreadIdArray[i]);
- if (hThreadArray[i] == NULL)
- {
- printf ("Windows thread creation failed!\n");
- return 1;
- }
- }
- for (i = 0; i < THREADS; ++i)
- {
- WaitForSingleObject (hThreadArray[i], INFINITE);
- CloseHandle(hThreadArray[i]);
- }
-
- for (i = 0; i < THREADS; ++i)
- {
- crc32s[i] = info[i].crc32;
-
- if (is_little_endian())
- crc32s[i] = byteswap32 (crc32s[i]);
- }
-#endif
-
- crc32 = compute_crc32 (0, crc32s, sizeof crc32s);
-
-#define EXPECTED 0x82C4D9FB
-
- if (crc32 != EXPECTED)
- {
- printf ("thread-test failed. Got checksum 0x%08X, expected 0x%08X\n",
- crc32, EXPECTED);
- return 1;
- }
-
- return 0;
-}
-
-#endif
-