Log performance counters at the end.

This commit is contained in:
Themaister 2012-10-30 23:28:54 +01:00
parent a1f40f6009
commit fbfbf1ed6a
6 changed files with 53 additions and 18 deletions

View File

@ -26,6 +26,26 @@
#include <sys/time.h>
#endif
#define MAX_COUNTERS 64
static struct rarch_perf_counter *perf_counters[MAX_COUNTERS];
static unsigned perf_ptr;
void rarch_perf_register(struct rarch_perf_counter *perf)
{
if (perf_ptr >= MAX_COUNTERS)
return;
perf_counters[perf_ptr++] = perf;
perf->registered = true;
}
void rarch_perf_log(void)
{
RARCH_LOG("[PERF]: Performance counters:\n");
for (unsigned i = 0; i < perf_ptr; i++)
RARCH_PERFORMANCE_LOG(perf_counters[i]->ident, *perf_counters[i]);
}
rarch_perf_tick_t rarch_get_perf_counter(void)
{
rarch_perf_tick_t time = 0;

View File

@ -28,23 +28,45 @@ typedef unsigned long long rarch_perf_tick_t;
typedef struct rarch_perf_counter
{
const char *ident;
rarch_perf_tick_t start;
rarch_perf_tick_t total;
unsigned call_cnt;
uint64_t call_cnt;
bool registered;
} rarch_perf_counter_t;
rarch_perf_tick_t rarch_get_perf_counter(void);
void rarch_perf_register(struct rarch_perf_counter *perf);
void rarch_perf_log(void);
#ifdef PERF_TEST
#define RARCH_PERFORMANCE_INIT(X) static rarch_perf_counter_t X
#define RARCH_PERFORMANCE_START(X) ((X).start = rarch_get_perf_counter())
#define RARCH_PERFORMANCE_STOP(X) do { (X).total += rarch_get_perf_counter() - (X).start; (X).call_cnt++; } while(0) /* TODO: we should increment at PERFORMANCE_START instead of PERFORMANCE_STOP since sometimes we cannot assume that we don't prematurely exit out of the function */
#define RARCH_PERFORMANCE_INIT(X) static rarch_perf_counter_t X = {#X}; \
do { \
if (!(X).registered) \
rarch_perf_register(&(X)); \
} while(0)
#define RARCH_PERFORMANCE_START(X) do { \
(X).call_cnt++; \
(X).start = rarch_get_perf_counter(); \
} while(0)
#define RARCH_PERFORMANCE_STOP(X) do { \
(X).total += rarch_get_perf_counter() - (X).start; \
} while(0)
#ifdef _WIN32
#define RARCH_PERFORMANCE_LOG(functionname, X) RARCH_LOG("[PERF]: Avg (%s): %I64u ticks.\n", functionname, (X).total / (X).call_cnt)
#define RARCH_PERFORMANCE_LOG(functionname, X) RARCH_LOG("[PERF]: Avg (%s): %I64u ticks, %I64u runs.\n", \
functionname, \
(X).total / (X).call_cnt, \
(X).call_cnt)
#else
#define RARCH_PERFORMANCE_LOG(functionname, X) RARCH_LOG("[PERF]: Avg (%s): %llu ticks.\n", functionname, (X).total / (X).call_cnt)
#define RARCH_PERFORMANCE_LOG(functionname, X) RARCH_LOG("[PERF]: Avg (%s): %llu ticks, %llu runs.\n", \
functionname, \
(long long unsigned)((X).total / (X).call_cnt), \
(long long unsigned)((X).call_cnt))
#endif
#else

View File

@ -1107,7 +1107,6 @@ static bool gl_frame(void *data, const void *frame, unsigned width, unsigned hei
RARCH_PERFORMANCE_START(copy_frame);
gl_copy_frame(gl, frame, width, height, pitch);
RARCH_PERFORMANCE_STOP(copy_frame);
RARCH_PERFORMANCE_LOG("gl_copy_frame", copy_frame);
}
struct gl_tex_info tex_info = {0};
@ -1144,7 +1143,6 @@ static bool gl_frame(void *data, const void *frame, unsigned width, unsigned hei
#endif
RARCH_PERFORMANCE_STOP(frame_run);
RARCH_PERFORMANCE_LOG("gl_frame", frame_run);
#ifdef RARCH_CONSOLE
if (!gl->block_swap)

View File

@ -192,9 +192,6 @@ void scaler_ctx_gen_reset(struct scaler_ctx *ctx)
void scaler_ctx_scale(struct scaler_ctx *ctx,
void *output, const void *input)
{
RARCH_PERFORMANCE_INIT(scaler_perf);
RARCH_PERFORMANCE_START(scaler_perf);
if (ctx->unscaled) // Just perform straight pixel conversion.
{
ctx->direct_pixconv(output, input,
@ -262,8 +259,5 @@ void scaler_ctx_scale(struct scaler_ctx *ctx,
else
ctx->scaler_vert(ctx, output, ctx->out_stride);
}
RARCH_PERFORMANCE_STOP(scaler_perf);
RARCH_PERFORMANCE_LOG("Scaler", scaler_perf);
}

View File

@ -397,7 +397,6 @@ static bool vg_frame(void *data, const void *frame, unsigned width, unsigned hei
RARCH_PERFORMANCE_START(vg_image);
vg_copy_frame(vg, frame, width, height, pitch);
RARCH_PERFORMANCE_STOP(vg_image);
RARCH_PERFORMANCE_LOG("vg_copy_frame", vg_image);
vgDrawImage(vg->mImage);
@ -409,8 +408,6 @@ static bool vg_frame(void *data, const void *frame, unsigned width, unsigned hei
#endif
RARCH_PERFORMANCE_STOP(vg_fr);
RARCH_PERFORMANCE_LOG("vg_frame", vg_fr);
vg->driver->swap_buffers();
return true;

View File

@ -272,7 +272,6 @@ static void video_frame(const void *data, unsigned width, unsigned height, size_
data = driver.scaler_out;
pitch = driver.scaler.out_stride;
RARCH_PERFORMANCE_STOP(video_frame_conv);
RARCH_PERFORMANCE_LOG("video_frame_conv()", video_frame_conv);
}
// Slightly messy code,
@ -2772,6 +2771,11 @@ int rarch_main(int argc, char *argv[])
while (rarch_main_iterate());
rarch_main_deinit();
rarch_deinit_msg_queue();
#ifdef PERF_TEST
rarch_perf_log();
#endif
rarch_main_clear_state();
return 0;
}