En esta página, se describen los métodos comunes para medir la latencia de entrada y salida.
Mide la latencia de salida
Existen varias técnicas disponibles para medir la latencia de salida, con diferentes grados de precisión y facilidad de ejecución, que se describen a continuación. Consulta también el circuito de prueba para ver un ejemplo de entorno de prueba.
Prueba de LED y osciloscopio
Esta prueba mide la latencia en relación con el indicador LED del dispositivo. Si tu dispositivo de producción no tiene un LED, puedes instalarlo en un dispositivo de factor de forma de prototipo. Para obtener una mayor precisión en los dispositivos de prototipos con circuitos expuestos, conecta una sonda de osciloscopio al LED directamente para omitir la latencia del sensor de luz.
Si no puedes instalar un LED en tu dispositivo de producción o prototipo, prueba las siguientes soluciones:
- Usa un pin de entrada y salida de uso general (GPIO) para el mismo propósito.
- Usa JTAG o algún otro puerto de depuración.
- Usa la luz de fondo de la pantalla. Esto puede ser riesgoso, ya que la retroiluminación puede tener una latencia no despreciable y puede contribuir a una lectura de latencia imprecisa.
Para realizar esta prueba, haz lo siguiente:
- Ejecuta una app que haga parpadear el LED de forma periódica al mismo tiempo que emite audio.
Nota: Para obtener resultados útiles, es fundamental usar las APIs correctas en la app de prueba para que ejercites la ruta de salida de audio rápida. Consulta Diseños para lograr latencia reducida para obtener información sobre el segundo plano.
- Coloca un sensor de luz junto al LED.
- Conecta las sondas de un osciloscopio de dos canales al conector de auriculares con cable (salida de línea) y al sensor de luz.
- Usa el osciloscopio para medir la diferencia de tiempo entre observar la señal de salida de línea en comparación con la señal del sensor de luz.
La diferencia de tiempo es la latencia aproximada de salida de audio, siempre que la latencia del LED y la del sensor de luz sean cero. Por lo general, el LED y el sensor de luz tienen una latencia relativamente baja, del orden de un milisegundo o menos, que es lo suficientemente baja como para ignorarla.
Mide la latencia de ida y vuelta
La latencia de ida y vuelta es la suma de la latencia de salida y la latencia de entrada.
Prueba de Larsen
Una de las pruebas de latencia más fáciles es una prueba de comentarios de audio (efecto Larsen). Esto proporciona una medición aproximada de la latencia combinada de salida y entrada a través del tiempo de un bucle de respuesta de impulso. Esta prueba no es muy útil para un análisis detallado por sí sola debido a su naturaleza, pero puede ser útil para calibrar otras pruebas y establecer un límite superior.
Este método no desglosa los tiempos de los componentes, lo que es importante cuando la latencia de salida y la latencia de entrada son independientes. Por lo tanto, no se recomienda este método para medir la latencia de salida precisa o los valores de latencia de entrada de forma aislada, pero podría ser útil para establecer estimaciones aproximadas.
La latencia de salida a la bocina integrada en el dispositivo puede ser mucho mayor que la latencia de salida al conector de auriculares. Esto se debe a la corrección y protección de las bocinas.
Para realizar esta prueba, haz lo siguiente:
- Ejecuta una app que capture audio del micrófono y reproduzca inmediatamente los datos capturados a través de la bocina.
- Crea un sonido de forma externa, como golpear un lápiz junto al micrófono. Este ruido genera un ciclo de reacción. Como alternativa, se puede insertar un impulso en el bucle con software.
- Mide el tiempo entre los pulsos de comentarios para obtener la suma de la latencia de salida, la latencia de entrada y la sobrecarga de la aplicación.
Estos son algunos recursos para obtener una app para la prueba de Larsen:
- La app de bucle invertido Dr. Rick O'Rang es una app para Android que permite realizar pruebas de comentarios de audio. Puedes descargar la app desde Google Play o obtener el código fuente desde GitHub.
-
También publicamos una implementación de ejemplo en slesTestFeedback.cpp.
Esta es una app de línea de comandos y se compila con el entorno de compilación de la plataforma.
Sin embargo, debería ser sencillo adoptar el código para otros entornos.
También necesitarás el código FIFO no bloqueador que se encuentra en la biblioteca
audio_utils
.
Llave de bucle invertido de audio
El llave de dongle de bucle de retorno de audio Dr. Rick O'Rang es útil para medir la latencia de ida y vuelta a través del conector de auriculares. En la siguiente imagen, se muestra el resultado de inyectar un impulso en el bucle una vez y, luego, permitir que el bucle de retroalimentación oscile. El período de las oscilaciones es la latencia de ida y vuelta. No se especifican aquí el dispositivo específico, la versión de software ni las condiciones de prueba. Los resultados que se muestran no se deben extrapolar.

Figura 1: Medición de ida y vuelta
Es posible que debas quitar el cable USB para reducir el ruido y ajustar el nivel de volumen para obtener una oscilación estable.
Mide la latencia de entrada
La latencia de entrada es más difícil de medir que la de salida. Las siguientes pruebas pueden ser útiles.
Un enfoque es determinar primero la latencia de salida con el método del LED y el osciloscopio y, luego, usar la prueba de retroalimentación de audio (Larsen) para determinar la suma de la latencia de salida y la latencia de entrada. La diferencia entre estas dos mediciones es la latencia de entrada.
Otra técnica es usar un pin GPIO en un dispositivo prototipo. De forma externa, presiona una entrada GPIO al mismo tiempo que presentas una señal de audio al dispositivo. Ejecuta una app que compare la diferencia en los tiempos de llegada del indicador GPIO y los datos de audio.
Reduce la latencia
Para lograr una baja latencia de audio, presta especial atención en todo el sistema a la programación, el manejo de interrupciones, la administración de energía y el diseño del controlador de dispositivos. Tu objetivo es evitar que cualquier parte de la plataforma bloquee un subproceso de audio SCHED_FIFO
durante más de un par de milisegundos. Si adoptas un enfoque tan sistemático, puedes reducir la latencia de audio y obtener el beneficio adicional de un rendimiento más predecible en general.
Cuando ocurren, los subdesbordamientos de audio suelen detectarse solo en ciertas condiciones o solo en las transiciones. Intenta estresar el sistema iniciando apps nuevas y desplázate rápidamente por varias pantallas. Sin embargo, ten en cuenta que algunas condiciones de prueba son tan estresantes que superan los objetivos de diseño. Por ejemplo, tomar un informe de errores genera una carga tan enorme en el sistema que puede ser aceptable tener una disminución en ese caso.
Cuando pruebes si hay subdesbordamientos, haz lo siguiente:
- Configura cualquier DSP después del procesador de la app para que agregue una latencia mínima.
- Ejecuta pruebas en diferentes condiciones, como con la pantalla encendida o apagada, el USB conectado o desconectado, el Wi-Fi activado o desactivado, el Bluetooth activado o desactivado, y las radios de telefonía y datos activadas o desactivadas.
- Selecciona música relativamente tranquila con la que estés muy familiarizado y en la que sea fácil escuchar los subtítulos.
- Usa auriculares con cable para obtener mayor sensibilidad.
- Tómate descansos para no experimentar "fatiga auditiva".
Una vez que encuentres las causas subyacentes de los subdesbordamientos, reduce los recuentos y los tamaños de los búferes para aprovechar esto. El enfoque ansioso de reducir los recuentos y tamaños de búfer antes de analizar los subdesbordamientos y corregir las causas de estos solo genera frustración.
Herramientas
systrace
es una excelente herramienta de uso general para diagnosticar fallas de rendimiento a nivel del sistema.
El resultado de dumpsys media.audio_flinger
también contiene una sección útil llamada "estadísticas móviles simples". Aquí se incluye un resumen de la variabilidad de los tiempos transcurridos para cada combinación de audio y ciclo de E/S.
Idealmente, todas las mediciones de tiempo deben ser aproximadamente iguales al tiempo medio o nominal del ciclo. Si ves un valor mínimo muy bajo o un valor máximo alto, esto indica un problema, probablemente una latencia de programación alta o un tiempo de inhabilitación de interrupción. La parte del cola del resultado es especialmente útil, ya que destaca la variabilidad más allá de +/- 3 desviaciones estándar.