Android 10 étend l'API de verrouillage du Wi-Fi pour permettre aux applications sensibles aux latences 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 dispose d'un accès à Internet.
- L'application a créé et acquis une serrure 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 d'appareils doivent mettre à jour le pilote WLAN et le HAL du fournisseur. En mode à faible latence, le mode d'économie d'énergie (également appelé "état de sommeil" dans la norme IEEE 802.11) est explicitement désactivé par le framework. Les paramètres de balayage et d'itinérance des couches pilote et micrologiciel peuvent être optimisés pour réduire encore plus la latence Wi-Fi. Les optimisations exactes sont spécifiques à l'implémentation.
Android dispose d'un mode 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 du Wi-Fi, fournissez des implémentations pour les fonctions IWifiChip
suivantes.
Dans AIDL HAL:
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)
Vous trouverez une implémentation de référence 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 prendre en charge la commande NL80211, NL80211_CMD_SET_POWER_SAVE
, pour activer et 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 actif 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 de 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 de 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 de ping suivants.
Tests automatiques
Exécutez les tests VTS et 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 (PA)
Appareil sous test (DUT) 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 Wi-Fi ou Ethernet.
- L'ordinateur de test doit être connecté à l'appareil testé via USB.
Test ping pour les liaisons montantes
Activez le mode à faible latence.
adb root
adb shell cmd wifi force-low-latency-mode enabled
Assurez-vous que votre ordinateur est connecté au téléphone via 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 la latence ping.
Répétez les étapes 1 à 3 avec le mode latence désactivé.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Comparez les résultats des tests pour vous assurer que la valeur de latence moyenne du 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
Dans 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 la latence ping.
Répétez les étapes 1 à 3 avec le mode latence désactivé.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Comparez les résultats des tests pour vous assurer que la valeur de latence moyenne du ping est réduite lorsque le mode à faible latence est activé.
Autres tests
Répétez les tests ci-dessus dans différents environnements. Par exemple, à la maison ou au bureau.