Message ID | 20240111205721.79886-1-martin@martin.st |
---|---|
State | Accepted |
Commit | ac40c3bb07781e72f3eb1e30ea450019cc1f6302 |
Headers | show |
Series | [FFmpeg-devel,v2] checkasm: Test whether the native FFmpeg timers work | expand |
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 |
On Thu, 11 Jan 2024, Martin Storsjö wrote: > On some platforms (in particular, ARM/AArch64), the implementation > of AV_READ_TIME() may use a privileged instruction - in such > cases, benchmarking just fails with a SIGILL. > > Instead of crashing, try executing AV_READ_TIME() once within > a region with the signal handler active, to allow gracefully > informing the user about the issue. > > This matches the dav1d checkasm commit > 95a192549a448b70d9542e840c4e34b60d09b093. > --- > Reworded the commit message and the printed warning message, as > the actual type of the timer is undefined and varies across > platforms. > --- > tests/checkasm/checkasm.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) Will apply soon. // Martin
diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index 994d64e96b..05f23898d3 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -754,6 +754,14 @@ static int bench_init_kperf(void) static int bench_init_ffmpeg(void) { #ifdef AV_READ_TIME + if (!checkasm_save_context()) { + checkasm_set_signal_handler_state(1); + AV_READ_TIME(); + checkasm_set_signal_handler_state(0); + } else { + fprintf(stderr, "checkasm: unable to execute platform specific timer\n"); + return -1; + } printf("benchmarking with native FFmpeg timers\n"); return 0; #else @@ -927,7 +935,9 @@ int checkasm_bench_func(void) /* Indicate that the current test has failed */ void checkasm_fail_func(const char *msg, ...) { - if (state.current_func_ver->cpu && state.current_func_ver->ok) { + if (state.current_func_ver && state.current_func_ver->cpu && + state.current_func_ver->ok) + { va_list arg; print_cpu_name();