1 #ifndef EX_PERF_H
2 #define EX_PERF_H 1
3 
4 #include <sys/time.h> /* gettimeofday */
5 #include <malloc.h> /* mallinfo */
6 
7 #define TST_HDR_BEG() \
8   vstr_add_fmt(out, out->len, \
9                "+${rep_chr:%c%zu}" \
10                "+${rep_chr:%c%zu}" \
11                "+${rep_chr:%c%zu}+\n" \
12                "| %34s | %15s | %16s |\n" \
13                "+${rep_chr:%c%zu}" \
14                "+${rep_chr:%c%zu}" \
15                "+${rep_chr:%c%zu}+\n", \
16                '=', 18 + 18, '=', 17, '=', 18, \
17                "Name", "Speed", "Memory", \
18                '-', 18 + 18, '-', 17, '-', 18)
19 
20 #define TST_HDR_END() \
21   vstr_add_fmt(out, out->len, \
22                "+${rep_chr:%c%zu}" \
23                "+${rep_chr:%c%zu}" \
24                "+${rep_chr:%c%zu}+\n", \
25                '-', 18 + 18, '-', 17, '-', 18)
26 
27 #define TST_BEG(x, y) do { \
28 		struct mallinfo mal_beg; \
29 		struct mallinfo mal_end; \
30 		struct timeval tv_beg; \
31 		struct timeval tv_end; \
32 		unsigned int test_for = (y); \
33                 unsigned int tst_count = 0; \
34                  \
35                 mal_beg = mallinfo(); /* warning */ \
36 		gettimeofday(&tv_beg, NULL); \
37 		 \
38 		while (tst_count < test_for) \
39 		{ \
40                   unsigned char buf_out[x];     \
41                   buf_out[0] = tv_beg.tv_usec
42 
43 
44 #define TST__END() \
45                         ++tst_count; \
46 		} \
47                  \
48 		gettimeofday(&tv_end, NULL); \
49                 if (tv_end.tv_usec < tv_beg.tv_usec) \
50                 { \
51                   tv_end.tv_usec += 1000 * 1000; \
52                   tv_end.tv_sec  -= 1; \
53                 } \
54                 mal_end = mallinfo(); /* warning */
55 
56 #define TST_END(name) TST__END() \
57 		vstr_add_fmt(out, out->len, \
58                              "| %-34s | %'8lu.%06lu | %'16lu |\n", \
59                              (name), \
60 		             tv_end.tv_sec  - tv_beg.tv_sec, \
61                              tv_end.tv_usec - tv_beg.tv_usec, \
62                              (unsigned long) \
63                              (mal_end.uordblks - mal_beg.uordblks) + \
64                              (mal_end.hblkhd - mal_beg.hblkhd)); \
65 	} while (0)
66 
67 #define TST_CALC_END(name) TST__END() \
68   vstr_add_fmt(out, out->len, \
69                "%s %u %u %u %u %lu.%06lu %ld %ld\n", (name), \
70                len, num, sz, extra, \
71                tv_end.tv_sec  - tv_beg.tv_sec, \
72                tv_end.tv_usec - tv_beg.tv_usec, \
73                ((long)mal_end.uordblks - (long)mal_beg.uordblks) + \
74                ((long)mal_end.hblkhd - (long)mal_beg.hblkhd), \
75                ((long)mal_end.fordblks - (long)mal_beg.fordblks)); \
76 	} while (0)
77 
78 
79 
80 #endif
81 
82