From a002041ec2f53723425c972e235b9a88328459ab Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Fri, 24 Aug 2012 23:00:47 +0200 Subject: [PATCH] -benchmark option to take the time in a rather simple way --- main.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/main.c b/main.c index 4b850d0..2980f8b 100644 --- a/main.c +++ b/main.c @@ -23,6 +23,8 @@ #include "gmqcc.h" #include "lexer.h" +#include + uint32_t opts_flags[1 + (COUNT_FLAGS / 32)]; uint32_t opts_warn [1 + (COUNT_WARNINGS / 32)]; @@ -34,6 +36,7 @@ bool opts_memchk = false; bool opts_dump = false; bool opts_werror = false; bool opts_forcecrc = false; +bool opts_benchmark = false; uint16_t opts_forced_crc; @@ -205,6 +208,10 @@ static bool options_parse(int argc, char **argv) { opts_memchk = true; continue; } + if (!strcmp(argv[0]+1, "benchmark")) { + opts_benchmark = true; + continue; + } switch (argv[0][1]) { /* -h, show usage but exit with 0 */ @@ -392,6 +399,8 @@ int main(int argc, char **argv) { int retval = 0; bool opts_output_free = false; + struct timespec ta, tb, tc; + app_name = argv[0]; /* default options / warn flags */ @@ -445,6 +454,8 @@ int main(int argc, char **argv) { if (items_elements) { printf("Mode: manual\n"); printf("There are %lu items to compile:\n", (unsigned long)items_elements); + if (opts_benchmark) + clock_gettime(CLOCK_MONOTONIC, &ta); for (itr = 0; itr < items_elements; ++itr) { printf(" item: %s (%s)\n", items_data[itr].filename, @@ -459,7 +470,12 @@ int main(int argc, char **argv) { } } + if (opts_benchmark) + clock_gettime(CLOCK_MONOTONIC, &tb); parser_finish(opts_output); + if (opts_benchmark) + clock_gettime(CLOCK_MONOTONIC, &tc); + } else { FILE *src; char *line; @@ -485,6 +501,8 @@ int main(int argc, char **argv) { opts_output_free = true; } + if (opts_benchmark) + clock_gettime(CLOCK_MONOTONIC, &ta); while (progs_nextline(&line, &linelen, src)) { if (!line[0] || (line[0] == '/' && line[1] == '/')) continue; @@ -495,12 +513,32 @@ int main(int argc, char **argv) { } } + if (opts_benchmark) + clock_gettime(CLOCK_MONOTONIC, &tb); parser_finish(opts_output); + if (opts_benchmark) + clock_gettime(CLOCK_MONOTONIC, &tc); srcdone: fclose(src); mem_d(line); } + if (opts_benchmark) + { + printf("started parsing at: %lu:%09lu\n", (unsigned long)ta.tv_sec, (unsigned long)ta.tv_nsec); + printf("started codegen at: %lu:%09lu\n", (unsigned long)tb.tv_sec, (unsigned long)tb.tv_nsec); + printf(" finished at: %lu:%09lu\n", (unsigned long)tc.tv_sec, (unsigned long)tc.tv_nsec); + { + size_t sec = tb.tv_sec - ta.tv_sec; + size_t nsec = (tb.tv_nsec + sec * 1000000000L) - ta.tv_nsec; + printf("Parsing took %lu\n", (unsigned long)nsec); + } + { + size_t sec = tc.tv_sec - tb.tv_sec; + size_t nsec = (tc.tv_nsec + sec * 1000000000L) - tb.tv_nsec; + printf("Codegen took %lu\n", (unsigned long)nsec); + } + } /* stuff */ -- 2.39.2