From: Daniel Stone Date: Thu, 17 May 2012 23:56:36 +0000 (+0100) Subject: Add benchmarking test to rulescomp X-Git-Tag: xkbcommon-0.2.0~581 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=661cb84051d025d80aad54bce2882762cb28fbe7;p=platform%2Fupstream%2Flibxkbcommon.git Add benchmarking test to rulescomp Apparently it only takes us 8ms to build keymaps. Nice! Signed-off-by: Daniel Stone --- diff --git a/Makefile.am b/Makefile.am index c3f3b77..274fbcc 100644 --- a/Makefile.am +++ b/Makefile.am @@ -113,7 +113,7 @@ TESTS_LDADD = libxkbcommon.la test_xkey_LDADD = $(TESTS_LDADD) test_filecomp_LDADD = $(TESTS_LDADD) test_namescomp_LDADD = $(TESTS_LDADD) -test_rulescomp_LDADD = $(TESTS_LDADD) +test_rulescomp_LDADD = $(TESTS_LDADD) -lrt test_canonicalise_LDADD = $(TESTS_LDADD) test_state_LDADD = $(TESTS_LDADD) test_context_LDADD = $(TESTS_LDADD) diff --git a/test/rulescomp.c b/test/rulescomp.c index fbf335d..ee98f16 100644 --- a/test/rulescomp.c +++ b/test/rulescomp.c @@ -26,12 +26,15 @@ authorization from the authors. #include #include +#include #include "xkbcommon/xkbcommon.h" +#define BENCHMARK_ITERATIONS 1000 + static int -test_rmlvo(const char *rules, const char *model, const char *layout, - const char *variant, const char *options) +do_test_rmlvo(const char *rules, const char *model, const char *layout, + const char *variant, const char *options, int silent) { struct xkb_context *context; struct xkb_keymap *keymap; @@ -46,8 +49,9 @@ test_rmlvo(const char *rules, const char *model, const char *layout, context = xkb_context_new(0); assert(context); - fprintf(stderr, "\nCompiling %s %s %s %s %s\n", rmlvo.rules, rmlvo.model, - rmlvo.layout, rmlvo.variant, rmlvo.options); + if (!silent) + fprintf(stderr, "Compiling %s %s %s %s %s\n", rules, model, layout, + variant, options); keymap = xkb_map_new_from_names(context, &rmlvo, 0); if (!keymap) { @@ -60,8 +64,43 @@ test_rmlvo(const char *rules, const char *model, const char *layout, return 1; } -int -main(void) +static int +test_rmlvo(const char *rules, const char *model, const char *layout, + const char *variant, const char *options) +{ + return do_test_rmlvo(rules, model, layout, variant, options, 0); +} + +static int +test_rmlvo_silent(const char *rules, const char *model, const char *layout, + const char *variant, const char *options) +{ + return do_test_rmlvo(rules, model, layout, variant, options, 1); +} + +static void +benchmark(void) +{ + struct timespec start, stop, elapsed; + int i; + + clock_gettime(CLOCK_MONOTONIC, &start); + for (i = 0; i < BENCHMARK_ITERATIONS; i++) + assert(test_rmlvo_silent("base", "", "us", "", "")); + clock_gettime(CLOCK_MONOTONIC, &stop); + + elapsed.tv_sec = stop.tv_sec - start.tv_sec; + elapsed.tv_nsec = stop.tv_nsec - start.tv_nsec; + if (elapsed.tv_nsec < 0) { + elapsed.tv_nsec += 1000000000; + elapsed.tv_sec--; + } + + fprintf(stderr, "compiled %d keymaps in %ld.%09lds\n", + BENCHMARK_ITERATIONS, elapsed.tv_sec, elapsed.tv_nsec); +} + +int main(int argc, char *argv[]) { assert(test_rmlvo("base", "pc105", "us,il,ru,ca", ",,,multix", "grp:alts_toggle,ctrl:nocaps,compose:rwin")); assert(test_rmlvo("base", "", "us", "", "")); @@ -73,5 +112,5 @@ main(void) assert(!test_rmlvo("base", "pc105", "", "", "")); assert(!test_rmlvo("badrules", "", "us", "", "")); - return 0; + benchmark(); }