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