mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2025-01-19 06:40:49 +00:00
-benchmark option to take the time in a rather simple way
This commit is contained in:
parent
b22f149d9e
commit
a002041ec2
1 changed files with 38 additions and 0 deletions
38
main.c
38
main.c
|
@ -23,6 +23,8 @@
|
|||
#include "gmqcc.h"
|
||||
#include "lexer.h"
|
||||
|
||||
#include <time.h>
|
||||
|
||||
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 */
|
||||
|
||||
|
|
Loading…
Reference in a new issue