ffmpeg | branch: master | Martin Storsjö <[email protected]> | Thu Dec 14 16:04:36 2023 +0200| [ac40c3bb07781e72f3eb1e30ea450019cc1f6302] | committer: Martin Storsjö
checkasm: Test whether the native FFmpeg timers work 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. Signed-off-by: Martin Storsjö <[email protected]> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ac40c3bb07781e72f3eb1e30ea450019cc1f6302 --- tests/checkasm/checkasm.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index ba366ba3a8..87f24c77ca 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -757,6 +757,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 @@ -930,7 +938,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(); _______________________________________________ ffmpeg-cvslog mailing list [email protected] https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
