From 66ef2cd08fe275af81125a1d04bc2f8e9c0b4ac2 Mon Sep 17 00:00:00 2001 From: Magnus Auvinen Date: Sun, 16 Dec 2007 15:33:44 +0000 Subject: added performance timers --- src/engine/e_engine.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) (limited to 'src/engine/e_engine.c') diff --git a/src/engine/e_engine.c b/src/engine/e_engine.c index 998621e8..c3851380 100644 --- a/src/engine/e_engine.c +++ b/src/engine/e_engine.c @@ -69,3 +69,76 @@ void engine_writeconfig() char buf[1024]; config_save(engine_savepath("default.cfg", buf, sizeof(buf))); } + + +static int perf_tick = 1; +static PERFORMACE_INFO *current = 0; + +void perf_init() +{ +} + +void perf_next() +{ + perf_tick++; + current = 0; +} + +void perf_start(PERFORMACE_INFO *info) +{ + if(info->tick != perf_tick) + { + info->parent = current; + info->first_child = 0; + info->next_child = 0; + + if(info->parent) + { + info->next_child = info->parent->first_child; + info->parent->first_child = info; + } + + info->tick = perf_tick; + info->biggest = 0; + info->total = 0; + } + + current = info; + current->start = time_get(); +} + +void perf_end() +{ + int64 delta = time_get()-current->start; + current->total += delta; + + if(delta > current->biggest) + current->biggest = delta; + + current = current->parent; +} + +static void perf_dump_imp(PERFORMACE_INFO *info, int indent) +{ + char buf[512] = {0}; + int64 freq = time_freq(); + int i; + + for(i = 0; i < indent; i++) + buf[i] = ' '; + + sprintf(&buf[indent], "%-20s %8.2f %8.2f", info->name, info->total*1000/(float)freq, info->biggest*1000/(float)freq); + dbg_msg("perf", "%s", buf); + + info = info->first_child; + while(info) + { + perf_dump_imp(info, indent+2); + info = info->next_child; + } +} + +void perf_dump(PERFORMACE_INFO *top) +{ + perf_dump_imp(top, 0); +} -- cgit 1.4.1