[FFmpeg-devel] [PATCH 6/7] checkasm: allow run-time fallback to AV_READ_TIME
Rémi Denis-Courmont
remi at remlab.net
Sat Jul 15 18:23:38 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, bench will stop working in upcoming kernel releases.
---
tests/checkasm/checkasm.c | 29 ++++++++++++++++-------------
1 file changed, 16 insertions(+), 13 deletions(-)
diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
index 2e327de3a4..ad2dc9ab5a 100644
--- a/tests/checkasm/checkasm.c
+++ b/tests/checkasm/checkasm.c
@@ -708,7 +708,8 @@ static int bench_init_linux(void)
checkasm_bench_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();
@@ -727,25 +728,27 @@ static int bench_init_ffmpeg(void)
checkasm_bench_start = checkasm_bench_stop = ff_read_time;
return 0;
}
-#else
-static int bench_init_ffmpeg(void)
-{
- fprintf(stderr, "checkasm: --bench is not supported on your system\n");
- return -1;
-}
#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