diff mbox series

[FFmpeg-devel,6/7] checkasm: allow run-time fallback to AV_READ_TIME

Message ID 20230714182835.66326-6-remi@remlab.net
State New
Headers show
Series checkasm RISC-V Linux perf enablement | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Rémi Denis-Courmont July 14, 2023, 6:28 p.m. UTC
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 mbox series

Patch

diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
index c3075fe37c..d72850f076 100644
--- a/tests/checkasm/checkasm.c
+++ b/tests/checkasm/checkasm.c
@@ -701,7 +701,8 @@  static int bench_init_linux(void)
     checkasm_bench_stop = checkasm_bench_linux_perf_stop;
     return 0;
 }
-#elif CONFIG_MACOS_KPERF
+#endif
+#if CONFIG_MACOS_KPERF
 static int bench_init_kperf(void)
 {
     ff_kperf_init();
@@ -720,25 +721,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);