Android 10 étend l'API de verrouillage Wi-Fi pour permettre aux applications sensibles à la latence de configurer le Wi-Fi en mode à faible latence. Le mode à faible latence démarre lorsque toutes les conditions suivantes sont remplies :
- Le Wi-Fi est activé et l'appareil a accès à Internet.
- L'application a créé et acquis un verrouillage Wi-Fi, et s'exécute au premier plan.
- L'écran est allumé.
Pour prendre en charge le mode à faible latence sur les appareils, les fabricants doivent mettre à jour le pilote WLAN et le HAL du fournisseur. En mode à faible latence, l'économie d'énergie (également appelée état de veille dans la norme IEEE 802.11) est explicitement désactivée par le framework. Les paramètres d'analyse et d'itinérance dans les couches de pilote et de micrologiciel peuvent être optimisés pour réduire davantage la latence Wi-Fi. Les optimisations exactes sont spécifiques à l'implémentation.
Android dispose d'un mode de verrouillage Wi-Fi hautes performances (introduit au niveau d'API 12) distinct du mode à faible latence.
Implémentation
Pour prendre en charge la fonctionnalité de mode à faible latence Wi-Fi, fournissez des implémentations pour les fonctions IWifiChip suivantes.
Dans le HAL AIDL :
int getFeatureSet()void setLatencyMode(in LatencyMode mode)
Dans le HAL HIDL (1.3 ou version ultérieure) :
getCapabilities_1_3() generates (WifiStatus status, bitfield<ChipCapabilityMask> capabilities)setLatencyMode(LatencyMode mode) generates (WifiStatus status)
Une implémentation de référence est disponible dans
wifi_legacy_hal.cpp
avec les fonctions suivantes :
wifi_error wifi_get_supported_feature_set(wifi_interface_handle iface, feature_set *set)wifi_error wifi_set_latency_mode(wifi_interface_handle handle, wifi_latency_mode mode)
En mode à faible latence, l'économie d'énergie est explicitement désactivée par
WifiLockManager
dans le framework Android.
Pour ce faire, le pilote WLAN doit être compatible avec la commande NL80211, NL80211_CMD_SET_POWER_SAVE, afin d'activer et de désactiver l'économie d'énergie. Lorsque l'économie d'énergie Wi-Fi est désactivée, le système Wi-Fi doit rester en état d'éveil et être prêt à envoyer ou à recevoir des paquets avec un délai minimal.
Désactiver la fonctionnalité
Pour désactiver la fonctionnalité de mode à faible latence, mettez à jour le code sous-jacent de
getFeatureSet() pour le HAL AIDL ou
getCapabilities_1_3() pour le HAL HIDL,
de sorte que capabilities & SET_LATENCY_MODE = 0, où
SET_LATENCY_MODE est défini dans la définition AIDL ou HIDL IWifiChip.
Lorsque cette fonctionnalité est désactivée, le framework ne désactive l'économie d'énergie que lorsque le mode à faible latence est actif.
Validation
Pour vérifier que le mode à faible latence fonctionne lorsqu'il est activé, exécutez les tests automatisés et les tests manuels de latence ping suivants.
Tests automatiques
Effectuez des tests automatisés en exécutant les tests Vendor Test Suite (VTS) et Compatibility Test Suite (CTS) suivants :
- VTS (AIDL):
hardware/interfaces/wifi/aidl/vts/functional/wifi_chip_aidl_test.cpp - VTS (HIDL):
hardware/interfaces/wifi/1.3/vts/functional/wifi_chip_hidl_test.cpp - CTS:
cts/tests/tests/net/src/android/net/wifi/cts/WifiLockTest.java
Tests manuels
Équipement et environnement de test requis
Pour les tests manuels, la configuration suivante est requise :
- Point d'accès Wi-Fi
- Téléphone de l'appareil testé et ordinateur de test
- L'appareil testé doit être connecté au point d'accès via le Wi-Fi.
- L'ordinateur de test doit être connecté au point d'accès via le Wi-Fi ou Ethernet.
- L'ordinateur de test doit être connecté à l'appareil testé via USB.
Test ping en liaison montante
Activez le mode à faible latence.
adb root adb shell cmd wifi force-low-latency-mode enabledAssurez-vous que votre ordinateur est connecté au téléphone via Android Debug Bridge (ADB). Depuis l'interface système ADB, envoyez un ping à la passerelle en continu pendant trois heures à intervalles d'une seconde.
Enregistrez la sortie du test dans un fichier texte, puis utilisez une feuille de calcul ou un script Python pour générer un histogramme des résultats du test de latence ping.
Répétez les étapes 1 à 3 avec le mode de latence désactivé.
adb root adb shell cmd wifi force-low-latency-mode disabledComparez les résultats du test pour vérifier que la valeur moyenne de la latence ping est réduite lorsque le mode à faible latence est activé.
Test ping en liaison descendante
Activez le mode à faible latence.
adb root adb shell cmd wifi force-low-latency-mode enabledÀ partir de la ligne de commande de l'ordinateur de test, envoyez un ping à l'adresse IP du téléphone en continu pendant trois heures à intervalles d'une seconde.
Enregistrez la sortie du test dans un fichier texte, puis utilisez une feuille de calcul ou un script Python pour générer un histogramme des résultats du test de latence ping.
Répétez les étapes 1 à 3 avec le mode de latence désactivé.
adb root adb shell cmd wifi force-low-latency-mode disabledComparez les résultats du test pour vérifier que la valeur moyenne de la latence ping est réduite lorsque le mode à faible latence est activé.
Autres tests
Répétez les tests précédents dans différents environnements. Par exemple, à la maison ou au bureau.