]> git.saurik.com Git - apple/libdispatch.git/blobdiff - testing/dispatch_cascade.c
libdispatch-187.5.tar.gz
[apple/libdispatch.git] / testing / dispatch_cascade.c
diff --git a/testing/dispatch_cascade.c b/testing/dispatch_cascade.c
deleted file mode 100644 (file)
index 7e09e41..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-#include <stdio.h>
-#include <dispatch/dispatch.h>
-#include <unistd.h>
-#include <stdlib.h>
-
-#include "dispatch_test.h"
-
-int done = 0;
-
-#define QUEUES 80
-dispatch_queue_t queues[QUEUES];
-
-
-#define BLOCKS 10000
-union {
-       size_t index;
-       char padding[64];
-} indices[BLOCKS];
-
-size_t iterations = QUEUES * BLOCKS * 0.25;
-
-void
-histogram(void) {
-       size_t counts[QUEUES] = {};
-       size_t maxcount = 0;
-       
-       size_t q;
-       for (q = 0; q < QUEUES; ++q) {
-               size_t i;
-               for (i = 0; i < BLOCKS; ++i) {
-                       if (indices[i].index == q) {
-                               ++counts[q];
-                       }
-               }
-       }
-       
-       for (q = 0; q < QUEUES; ++q) {
-               if (counts[q] > maxcount) {
-                       maxcount = counts[q];
-               }
-       }
-       
-       printf("maxcount = %ld\n", maxcount);
-       
-       size_t x,y;
-       for (y = 20; y > 0; --y) {
-               for (x = 0; x < QUEUES; ++x) {
-                       double fraction = (double)counts[x] / (double)maxcount;
-                       double value = fraction * (double)20;
-                       printf("%s", (value > y) ? "*" : " ");
-               }
-               printf("\n");
-       }
-}
-
-void
-cascade(void* context) {
-       size_t idx, *idxptr = context;
-
-       if (done) return;
-       
-       idx = *idxptr + 1;
-
-       if (idx < QUEUES) {
-               *idxptr = idx;
-               dispatch_async_f(queues[idx], context, cascade);
-       }
-
-       if (__sync_sub_and_fetch(&iterations, 1) == 0) {
-               done = 1;
-               histogram();
-               test_stop();
-               exit(0);
-       }
-}
-
-int
-main(int argc __attribute__((unused)), char* argv[] __attribute__((unused))) {
-       int i;
-
-       test_start("Dispatch Cascade");
-       
-       for (i = 0; i < QUEUES; ++i) {
-               queues[i] = dispatch_queue_create(NULL, NULL);
-       }
-
-       for (i = 0; i < BLOCKS; ++i) {
-               cascade(&indices[i].index);
-       }
-
-       dispatch_main();
-
-       return 0;
-}