The default timer register pmccntr_el0 usually requires enabling access with e.g. a kernel module.
On macOS, using cntvct_el0 gives measurements with the same magnitude as mach_absolute_time (which is used currently), but possibly with a little less overhead/noise. --- cntvct_el0 should have less noise than mach_absolute_time or clock_gettime. In one tested case, the cntvct_el0 timer has a frequency of 25 MHz (readable via the register cntfrq_el0). --- libavutil/aarch64/timer.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libavutil/aarch64/timer.h b/libavutil/aarch64/timer.h index fadc9568f8..922b0c5598 100644 --- a/libavutil/aarch64/timer.h +++ b/libavutil/aarch64/timer.h @@ -24,7 +24,7 @@ #include <stdint.h> #include "config.h" -#if HAVE_INLINE_ASM && !defined(__APPLE__) +#if HAVE_INLINE_ASM #define AV_READ_TIME read_time @@ -33,7 +33,16 @@ static inline uint64_t read_time(void) uint64_t cycle_counter; __asm__ volatile( "isb \t\n" +#if defined(__ANDROID__) || defined(__APPLE__) + // cntvct_el0 has lower resolution than pmccntr_el0, but is usually + // accessible from user space by default. + "mrs %0, cntvct_el0 " +#else + // pmccntr_el0 has higher resolution, but is usually not accessible + // from user space by default (but access can be enabled with a custom + // kernel module). "mrs %0, pmccntr_el0 " +#endif : "=r"(cycle_counter) :: "memory" ); return cycle_counter; -- 2.39.3 (Apple Git-146) _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".