xref: /dragonfly/test/sysperf/blib.c (revision 3badf6b7)
1 /*
2  * BLIB.C
3  *
4  * Simple benchmarking library
5  *
6  * $DragonFly: src/test/sysperf/blib.c,v 1.6 2007/08/21 19:23:46 corecode Exp $
7  */
8 
9 #include <sys/types.h>
10 #include <sys/time.h>
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <stdarg.h>
14 
15 static __thread struct timeval tv1;
16 static __thread struct timeval tv2;
17 static __thread long long last_us;
18 
19 void
20 start_timing(void)
21 {
22     gettimeofday(&tv1, NULL);
23 }
24 
25 int
26 stop_timing(long long count, const char *ctl, ...)
27 {
28     long long us;
29     va_list va;
30 
31     gettimeofday(&tv2, NULL);
32     us = (tv2.tv_usec - tv1.tv_usec) + (tv2.tv_sec - tv1.tv_sec) * 1000000LL;
33     last_us = us;
34     if (ctl == NULL) 	/* dummy call to pre-cache */
35 	return(us > 1000000);
36 
37     va_start(va, ctl);
38     vfprintf(stderr, ctl, va);
39     va_end(va);
40 
41     fprintf(stderr, " %6.3fs %lld loops = %6.3fuS/loop\n",
42 	(double)us / 1000000.0,
43 	count,
44 	(double)us / (double)count
45     );
46 
47     tv1 = tv2;
48 
49     return(0);
50 }
51 
52 int
53 stop_timing2(long long count, long long us, const char *ctl, ...)
54 {
55     va_list va;
56 
57     va_start(va, ctl);
58     vfprintf(stderr, ctl, va);
59     va_end(va);
60 
61     fprintf(stderr, " %6.3fs %lld loops = %6.3fnS/loop\n",
62 	(double)us / 1000000.0,
63 	count,
64 	(double)us * 1000.0 / (double)count
65     );
66     return(0);
67 }
68 
69 long long
70 get_timing(void)
71 {
72     return (last_us);
73 }
74 
75 void
76 nop(void)
77 {
78 }
79