]> git.saurik.com Git - apple/libpthread.git/blobdiff - tests/wq_kevent.h
libpthread-137.1.1.tar.gz
[apple/libpthread.git] / tests / wq_kevent.h
diff --git a/tests/wq_kevent.h b/tests/wq_kevent.h
new file mode 100644 (file)
index 0000000..198e31d
--- /dev/null
@@ -0,0 +1,59 @@
+#define REQUESTS_LEN 4
+static struct workq_reqthreads_req_s {unsigned long priority; int count;} requests[REQUESTS_LEN];
+
+#define QOS_STR(q) (q == QOS_CLASS_USER_INTERACTIVE ? "UInter" : (q == QOS_CLASS_USER_INITIATED ? "UInit" : (q == QOS_CLASS_DEFAULT ? "Dflt" : (q == QOS_CLASS_UTILITY ? "Util" : (q == QOS_CLASS_BACKGROUND ? "BG" : "Unkn" ) ) ) ) )
+static char* describe_pri(pthread_priority_t pri){
+       qos_class_t qos;
+       unsigned long flags;
+
+       qos = _pthread_qos_class_decode(pri, NULL, &flags);
+
+       static char desc[32];
+       if (flags & _PTHREAD_PRIORITY_EVENT_MANAGER_FLAG){
+               sprintf(desc, "E:%s", QOS_STR(qos));
+       } else if (flags & _PTHREAD_PRIORITY_OVERCOMMIT_FLAG){
+               sprintf(desc, "O:%s", QOS_STR(qos));
+       } else {
+               sprintf(desc, "%s", QOS_STR(qos));
+       }
+
+       return desc;
+}
+
+static char* describe_req(void){
+       static char desc[256];
+       char *c = desc;
+
+       *c++ = '[';
+       for (int i = 0; i < REQUESTS_LEN; i++){
+               if (i) *c++ = ',';
+               c += sprintf(c, "{%s,%d}", describe_pri(requests[i].priority), requests[i].count);
+       }
+       *c++ = ']';
+       *c++ = '\0';
+
+       return desc;
+}
+
+static char *dummy_text = "Four score and seven years ago our fathers brought forth on this continent a new nation, conceived in liberty, and dedicated to the";
+// takes about 1us on my machine
+static void burn_cpu(void){
+       char key[64]; char txt[64];
+       strncpy(txt, dummy_text, 64);
+       for (int i = 0; i < 64; i++)
+               key[i] = rand() % 1;
+       setkey(key);
+       encrypt(txt, 0);
+       encrypt(txt, 1);
+}
+
+static int do_req(void){
+       int ret = sysctlbyname("debug.wq_kevent_test", NULL, NULL, requests, sizeof(requests));
+       if (ret >= 0){
+               fprintf(stderr, "wq_kevent_test(%s) -> %d\n", describe_req(), ret);
+       } else {
+               perror("debug.wk_kevent_test");
+               return errno;
+       }
+       return ret;
+}