xref: /haiku/src/tests/system/benchmarks/execbench.c (revision 24159a0c7d6d6dcba9f2a0c1a7c08d2c8167f21b)
1 /*
2  * from ftp://ftp.netbsd.org/pub/NetBSD/misc/gmcgarry/bench/execbench.tar.gz
3  */
4 #define errx(x,y...) { fprintf(stderr, y); fprintf(stderr, "\n"); exit(x); }
5 
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <sys/time.h>
9 #include <unistd.h>
10 
11 int
12 main(int argc, char *argv[])
13 {
14 	struct timeval before, after;
15 	unsigned long time, elapsed;
16 	char timestr[12], iterstr[12];
17 	char *timeptr, *countptr;
18         int iter, count;
19 
20 	if (argc < 2)
21 		errx(1, "Usage: %s iterations", argv[0]);
22 
23 	iter = atoi(argv[1]);
24 	if (iter > 0) {
25 		gettimeofday(&before, NULL);
26 		time = 1000000 * before.tv_sec + before.tv_usec;
27 		sprintf(timestr,"%lu", time);
28 		timeptr = timestr;
29 		countptr = argv[1];
30 	} else {
31 		iter = atoi(argv[2]);
32 		timeptr = argv[3];
33 		countptr = argv[4];
34 	}
35 
36 	if (iter != 0) {
37 		iter--;
38 		sprintf(iterstr, "%d", iter);
39 		execl(argv[0], argv[0], "0", iterstr, timeptr, countptr, NULL);
40 		errx(1, "execl failed");
41 	}
42 
43 	gettimeofday(&after, NULL);
44 	sscanf(argv[3],"%lu", &time);
45 	count = atoi(argv[4]);
46 	elapsed = 1000000 * after.tv_sec + after.tv_usec;
47 	elapsed -= time;
48 
49 	printf("time: %lu microseconds\n", elapsed / count);
50 
51 	return (1);
52 }
53