From: Maria Matejka Date: Tue, 16 Apr 2019 19:01:13 +0000 (+0200) Subject: Tests: added a simple benchmark X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dc9297b712c7516c1d9f80a712da5495dbf7da27;p=thirdparty%2Fbird.git Tests: added a simple benchmark --- diff --git a/Makefile.in b/Makefile.in index 98047e0c7..21956cdb8 100644 --- a/Makefile.in +++ b/Makefile.in @@ -174,12 +174,14 @@ $(tests_targets): %: %.o $(tests_objs) | prepare $(tests_targets): LIBS += $(DAEMON_LIBS) $(tests_targets_ok): %.ok: % - $(Q)$* 2>/dev/null && touch $*.ok + $(Q)$* $(TESTFLAGS) 2>/dev/null && touch $*.ok test: testsclean check check: tests tests_run tests: $(tests_targets) tests_run: $(tests_targets_ok) +benchmark: test +benchmark: TESTFLAGS+=-b tags: cd $(srcdir) ; etags -lc `find $(dirs) -name *.[chY]` diff --git a/test/birdtest.c b/test/birdtest.c index a4312e9b1..05501ebf2 100644 --- a/test/birdtest.c +++ b/test/birdtest.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -35,6 +36,7 @@ static int no_fork; static int no_timeout; static int is_terminal; /* Whether stdout is a live terminal or pipe redirect */ +int bt_benchmark; uint bt_verbose; const char *bt_filename; const char *bt_test_id; @@ -67,9 +69,14 @@ bt_init(int argc, char *argv[]) bt_test_id = NULL; is_terminal = isatty(fileno(stdout)); - while ((c = getopt(argc, argv, "lcftv")) >= 0) + while ((c = getopt(argc, argv, "blcftv")) >= 0) switch (c) { + case 'b': + bt_benchmark = 1; + no_timeout = 1; + break; + case 'l': list_tests = 1; break; @@ -155,10 +162,25 @@ int bt_run_test_fn(int (*fn)(const void *), const void *fn_arg, int timeout) int result; alarm(timeout); - if (fn_arg) - result = fn(fn_arg); - else - result = ((int (*)(void))fn)(); + if (bt_benchmark) { + for (int i=0; i<11; i++) { + struct timespec begin, end; + clock_gettime(CLOCK_MONOTONIC, &begin); + if (fn_arg) + result = fn(fn_arg); + else + result = ((int (*)(void))fn)(); + clock_gettime(CLOCK_MONOTONIC, &end); + s64 dif = (end.tv_sec - begin.tv_sec) * 1000000000 + end.tv_nsec - begin.tv_nsec; + if (i) + bt_log("benchmark: %ld", dif); + } + } else { + if (fn_arg) + result = fn(fn_arg); + else + result = ((int (*)(void))fn)(); + } if (!bt_suite_result) result = 0; diff --git a/test/birdtest.h b/test/birdtest.h index 4443bfc1c..f004b6376 100644 --- a/test/birdtest.h +++ b/test/birdtest.h @@ -20,6 +20,7 @@ extern int bt_result; extern int bt_suite_result; extern char bt_out_fmt_buf[1024]; +extern int bt_benchmark; extern uint bt_verbose; #define BT_VERBOSE_NO 0