mirror of
https://github.com/libretro/RetroArch
synced 2025-02-08 15:40:14 +00:00
Log performance counters at the end.
This commit is contained in:
parent
a1f40f6009
commit
fbfbf1ed6a
20
benchmark.c
20
benchmark.c
@ -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;
|
||||
|
34
benchmark.h
34
benchmark.h
@ -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
|
||||
|
2
gfx/gl.c
2
gfx/gl.c
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
3
gfx/vg.c
3
gfx/vg.c
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user