From 4dce7f31c7b547c27d83e19336999475b401d01e Mon Sep 17 00:00:00 2001 From: Andrea Shepard <andrea@special-circumstanc.es> Date: Sun, 12 Jan 2020 03:34:34 +0000 Subject: [PATCH] Packrat backend stats counters (off by default) --- src/backends/packrat.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/backends/packrat.c b/src/backends/packrat.c index 1941f1c9..ab0f8748 100644 --- a/src/backends/packrat.c +++ b/src/backends/packrat.c @@ -3,6 +3,15 @@ #include "../internal.h" #include "../parsers/parser_internal.h" +/* #define DETAILED_PACKRAT_STATISTICS */ + +#ifdef DETAILED_PACKRAT_STATISTICS +static size_t packrat_hash_count = 0; +static size_t packrat_hash_bytes = 0; +static size_t packrat_cmp_count = 0; +static size_t packrat_cmp_bytes = 0; +#endif + static uint32_t cache_key_hash(const void* key); // short-hand for creating lowlevel parse cache values (parse result case) @@ -262,17 +271,34 @@ void h_packrat_free(HParser *parser) { } static uint32_t cache_key_hash(const void* key) { +#ifdef DETAILED_PACKRAT_STATISTICS + ++(packrat_hash_count); + packrat_hash_bytes += sizeof(HParserCacheKey); +#endif return h_djbhash(key, sizeof(HParserCacheKey)); } + static bool cache_key_equal(const void* key1, const void* key2) { +#ifdef DETAILED_PACKRAT_STATISTICS + ++(packrat_cmp_count); + packrat_cmp_bytes += sizeof(HParserCacheKey); +#endif return memcmp(key1, key2, sizeof(HParserCacheKey)) == 0; } static uint32_t pos_hash(const void* key) { +#ifdef DETAILED_PACKRAT_STATISTICS + ++(packrat_hash_count); + packrat_hash_bytes += sizeof(HInputStream); +#endif return h_djbhash(key, sizeof(HInputStream)); } static bool pos_equal(const void* key1, const void* key2) { +#ifdef DETAILED_PACKRAT_STATISTICS + ++(packrat_cmp_count); + packrat_cmp_bytes += sizeof(HInputStream); +#endif return memcmp(key1, key2, sizeof(HInputStream)) == 0; } -- GitLab