mirror of https://git.ffmpeg.org/ffmpeg.git
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ö <martin@martin.st>
This commit is contained in:
parent
d8f3cc90ac
commit
ac40c3bb07
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue