[FFmpeg-devel] [PATCH 5/6] checkasm: allow run-time fallback to AV_READ_TIME
Rémi Denis-Courmont
remi at remlab.net
Wed Jul 19 22:55:39 EEST 2023
On Linux RISC-V, depending on kernel version and configuration, the
cycle counters may be available:
- via Linux perf (as on Arm),
- directly with RDCYCLE (which is considered legacy),
- neither (if admistratively disabled), or
- or both (in legacy compatibility mode).
This allows to try Linux perf, with a fallback to RDCYCLE. Without
this, benchmarking would breakdown in upcoming Linux RISC-V kernel
releases. This also paves the way for falling back from the cycle
counter on Arm or RISC-V, whence they too are disabled.
---
tests/checkasm/checkasm.c | 32 +++++++++++++++++++-------------
1 file changed, 19 insertions(+), 13 deletions(-)
diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
index fad660a924..3c8aa8631e 100644
--- a/tests/checkasm/checkasm.c
+++ b/tests/checkasm/checkasm.c
@@ -714,37 +714,43 @@ static int bench_init_linux(void)
state.close = checkasm_bench_linux_perf_close;
return 0;
}
-#elif CONFIG_MACOS_KPERF
+#endif
+#if CONFIG_MACOS_KPERF
static int bench_init_kperf(void)
{
ff_kperf_init();
state.start = state.stop = ff_kperf_cycles;
return 0;
}
-#else
+#endif
+#ifdef AV_READ_TIME
static int bench_init_ffmpeg(void)
{
-#ifdef AV_READ_TIME
printf("benchmarking with native FFmpeg timers\n");
+ state.start = state.stop = AV_READ_TIME;
return 0;
-#else
- fprintf(stderr, "checkasm: --bench is not supported on your system\n");
- return -1;
-#endif
}
#endif
static int bench_init(void)
{
+ int ret = -1;
#if CONFIG_LINUX_PERF
- int ret = bench_init_linux();
-#elif CONFIG_MACOS_KPERF
- int ret = bench_init_kperf();
-#else
- int ret = bench_init_ffmpeg();
+ if (ret < 0)
+ ret = bench_init_linux();
+#endif
+#if CONFIG_MACOS_KPERF
+ if (ret < 0)
+ ret = bench_init_kperf();
#endif
+#ifdef AV_READ_TIME
if (ret < 0)
- return ret;
+ ret = bench_init_ffmpeg();
+#endif
+ if (ret < 0) {
+ fputs("checkasm: --bench is not supported on your system\n", stderr);
+ return -1;
+ }
state.nop_time = measure_nop_time();
printf("nop: %d.%d\n", state.nop_time/10, state.nop_time%10);
--
2.40.1
More information about the ffmpeg-devel
mailing list