Cette page décrit les méthodes courantes de mesure de la latence d'entrée et de sortie.
Mesurer la latence de sortie
Il existe plusieurs techniques disponibles pour mesurer la latence de sortie, avec différents degrés de précision et de facilité d'exécution, décrites ci-dessous. Consultez également le circuit de test pour un exemple d'environnement de test.
Test des LED et de l'oscilloscope
Ce test mesure la latence par rapport à l'indicateur LED de l'appareil. Si votre appareil de production ne dispose pas de LED, vous pouvez installer la LED sur un prototype d'appareil au facteur de forme. Pour une précision encore meilleure sur les prototypes d'appareils dotés de circuits exposés, connectez directement une sonde d'oscilloscope à la LED pour contourner la latence du capteur de lumière.
Si vous ne pouvez pas installer de LED sur votre appareil de production ou prototype, essayez les solutions suivantes :
- Utilisez une broche d'entrée/sortie à usage général (GPIO) dans le même but.
- Utilisez JTAG ou un autre port de débogage.
- Utilisez le rétroéclairage de l'écran. Cela peut être risqué car le rétroéclairage peut avoir une latence non négligeable et peut contribuer à une lecture de latence inexacte.
Pour réaliser ce test :
- Exécutez une application qui fait clignoter périodiquement la LED en même temps qu'elle émet de l'audio.
Remarque : Pour obtenir des résultats utiles, il est essentiel d'utiliser les API appropriées dans l'application de test afin d'utiliser le chemin de sortie audio rapide. Voir Conception pour une latence réduite pour l'arrière-plan.
- Placez un capteur de lumière à côté de la LED.
- Connectez les sondes d'un oscilloscope double canal à la fois à la prise casque filaire (sortie ligne) et au capteur de lumière.
- Utilisez l'oscilloscope pour mesurer la différence de temps entre l'observation du signal de sortie de ligne et le signal du capteur de lumière.
La différence de temps correspond à la latence approximative de la sortie audio, en supposant que la latence de la LED et la latence du capteur de lumière sont toutes deux nulles. Généralement, la LED et le capteur de lumière ont chacun une latence relativement faible, de l'ordre d'une milliseconde ou moins, ce qui est suffisamment faible pour être ignoré.
Mesurer la latence aller-retour
La latence aller-retour est la somme de la latence de sortie et de la latence d’entrée.
Test de Larsen
L'un des tests de latence les plus simples est un test de retour audio (effet Larsen). Cela fournit une mesure grossière de la latence combinée de sortie et d’entrée en chronométrant une boucle de réponse impulsionnelle. Ce test n'est pas très utile pour une analyse détaillée en soi en raison de la nature du test, mais il peut être utile pour calibrer d'autres tests et pour établir une limite supérieure.
Cette méthode ne décompose pas les temps des composants, ce qui est important lorsque la latence de sortie et la latence d'entrée sont indépendantes. Cette méthode n’est donc pas recommandée pour mesurer de manière isolée la latence de sortie ou les valeurs de latence d’entrée précises, mais elle peut être utile pour établir des estimations approximatives.
La latence de sortie vers le haut-parleur de l'appareil peut être considérablement supérieure à la latence de sortie vers le connecteur du casque. Cela est dû à la correction et à la protection des haut-parleurs.
Pour réaliser ce test :
- Exécutez une application qui capture l'audio du microphone et lit immédiatement les données capturées sur le haut-parleur.
- Créez un son externe, comme taper un crayon près du microphone. Ce bruit génère une boucle de rétroaction. Alternativement, on peut injecter une impulsion dans la boucle à l'aide d'un logiciel.
- Mesurez le temps entre les impulsions de retour pour obtenir la somme de la latence de sortie, de la latence d'entrée et de la surcharge de l'application.
Voici quelques ressources pour obtenir une application pour le test de Larsen :
- L'application de bouclage Dr. Rick O'Rang est une application Android pour les tests de retour audio. Vous pouvez télécharger l'application depuis Google Play ou obtenir le code source depuis GitHub .
- Nous avons également publié un exemple d'implémentation sur slesTestFeedback.cpp . Il s'agit d'une application en ligne de commande construite à l'aide de l'environnement de construction de la plate-forme ; cependant, il devrait être simple d'adopter le code pour d'autres environnements. Vous aurez également besoin du code FIFO non bloquant situé dans la bibliothèque
audio_utils
.
Clé de bouclage audio
Le dongle de bouclage audio Dr. Rick O'Rang est pratique pour mesurer la latence aller-retour sur le connecteur du casque. L'image ci-dessous montre le résultat de l'injection d'une impulsion dans la boucle une fois, puis de l'oscillation de la boucle de rétroaction. La période des oscillations est la latence aller-retour. Le périphérique spécifique, la version du logiciel et les conditions de test ne sont pas spécifiés ici. Les résultats présentés ne doivent pas être extrapolés.
![mesure aller-retour](https://source.android.com/static/docs/core/audio/images/round_trip.png?authuser=0&hl=fr)
Figure 1. Mesure aller-retour
Vous devrez peut-être retirer le câble USB pour réduire le bruit et régler le niveau de volume pour obtenir une oscillation stable.
Mesurer la latence d'entrée
La latence d’entrée est plus difficile à mesurer que la latence de sortie. Les tests suivants pourraient vous aider.
Une approche consiste à déterminer d'abord la latence de sortie à l'aide de la méthode LED et oscilloscope, puis à utiliser le test de retour audio (Larsen) pour déterminer la somme de la latence de sortie et de la latence d'entrée. La différence entre ces deux mesures est la latence d'entrée.
Une autre technique consiste à utiliser une broche GPIO sur un appareil prototype. En externe, activez une entrée GPIO en même temps que vous présentez un signal audio à l'appareil. Exécutez une application qui compare la différence entre les heures d'arrivée du signal GPIO et des données audio.
Réduire la latence
Pour obtenir une faible latence audio, accordez une attention particulière dans l'ensemble du système à la planification, à la gestion des interruptions, à la gestion de l'alimentation et à la conception des pilotes de périphérique. Votre objectif est d'empêcher toute partie de la plateforme de bloquer un fil audio SCHED_FIFO
pendant plus de quelques millisecondes. En adoptant une telle approche systématique, vous pouvez réduire la latence audio et bénéficier de performances globales plus prévisibles.
Les sous-consommations audio, lorsqu'elles surviennent, ne sont souvent détectables que sous certaines conditions ou uniquement au niveau des transitions. Essayez de stresser le système en lançant de nouvelles applications et en faisant défiler rapidement les différents écrans. Mais sachez que certaines conditions de test sont si stressantes qu’elles dépassent les objectifs de conception. Par exemple, rédiger un rapport de bogue impose une telle charge au système qu'il peut être acceptable d'avoir un sous-fonctionnement dans ce cas.
Lors du test de sous-utilisation :
- Configurez n'importe quel DSP après le processeur de l'application afin qu'il ajoute une latence minimale.
- Exécutez des tests dans différentes conditions telles que l'écran allumé ou éteint, l'USB branché ou débranché, le WiFi activé ou désactivé, le Bluetooth activé ou désactivé et la téléphonie et les radios de données activées ou désactivées.
- Sélectionnez une musique relativement calme que vous connaissez très bien et dans laquelle il est facile d'entendre des sous-entendus.
- Utilisez des écouteurs filaires pour plus de sensibilité.
- Accordez-vous des pauses pour ne pas ressentir de « fatigue auditive ».
Une fois que vous avez trouvé les causes sous-jacentes des sous-utilisations, réduisez le nombre et la taille des tampons pour en tirer parti. L'approche hâtive consistant à réduire le nombre et la taille des tampons avant d'analyser les sous-utilisations et de corriger les causes de ces sous-utilisations n'aboutit qu'à de la frustration.
Outils
systrace
est un excellent outil à usage général pour diagnostiquer les problèmes de performances au niveau du système.
La sortie de dumpsys media.audio_flinger
contient également une section utile appelée « statistiques de déplacement simples ». Celui-ci contient un résumé de la variabilité des temps écoulés pour chaque mixage audio et cycle d'E/S. Idéalement, toutes les mesures de temps devraient être à peu près égales au temps de cycle moyen ou nominal. Si vous voyez un minimum très faible ou un maximum élevé, cela indique un problème, probablement une latence de planification élevée ou un temps de désactivation d'interruption. La partie queue du résultat est particulièrement utile, car elle met en évidence la variabilité au-delà de +/- 3 écarts types.