In Android 10 wurde die Wi‑Fi-Lock-API erweitert, damit latenzempfindliche Apps WLAN in einem Modus mit niedriger Latenz konfigurieren können. Der Modus für geringe Latenzzeit wird gestartet, wenn alle folgenden Bedingungen erfüllt sind:
- WLAN ist aktiviert und das Gerät hat Internetzugang.
- Die App hat eine WLAN-Sperre erstellt und abgerufen und wird im Vordergrund ausgeführt.
- Das Display ist eingeschaltet.
Damit Geräte den Modus mit niedriger Latenz unterstützen, müssen Gerätehersteller den WLAN-Treiber und die Vendor-HAL aktualisieren. Im Modus mit geringer Latenz wird der Energiesparmodus (auch als „Doze-Zustand“ im IEEE 802.11-Standard bezeichnet) explizit vom Framework deaktiviert. Die Scan- und Roaming-Parameter in der Treiber- und Firmware-Ebene können optimiert werden, um die WLAN-Latenz weiter zu reduzieren. Die genauen Optimierungen sind implementierungsspezifisch.
Android bietet einen WLAN-Sperrmodus mit hoher Leistung (eingeführt in API-Level 12), der vom Modus mit niedriger Latenz getrennt ist.
Implementierung
Um den WLAN-Modus mit geringer Latenz zu unterstützen, müssen Sie Implementierungen für die folgenden IWifiChip-Funktionen bereitstellen.
In der AIDL-HAL:
int getFeatureSet()void setLatencyMode(in LatencyMode mode)
In der HIDL-HAL (1.3 oder höher):
getCapabilities_1_3() generates (WifiStatus status, bitfield<ChipCapabilityMask> capabilities)setLatencyMode(LatencyMode mode) generates (WifiStatus status)
Eine Referenzimplementierung finden Sie unter wifi_legacy_hal.cpp mit den folgenden Funktionen:
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)
Im Modus mit geringer Latenz wird der Energiesparmodus durch WifiLockManager im Android-Framework explizit deaktiviert.
Dazu muss der WLAN-Treiber den NL80211-Befehl NL80211_CMD_SET_POWER_SAVE unterstützen, um den Energiesparmodus zu aktivieren und zu deaktivieren. Wenn der WLAN-Energiesparmodus deaktiviert ist, muss das WLAN-System im aktiven Zustand bleiben und bereit sein, Pakete mit minimaler Verzögerung zu senden oder zu empfangen.
WifiLockManager
Funktion deaktivieren
Wenn Sie den Modus mit niedriger Latenz deaktivieren möchten, aktualisieren Sie den zugrunde liegenden Code von getFeatureSet() für die AIDL-HAL oder getCapabilities_1_3() für die HIDL-HAL, sodass capabilities & SET_LATENCY_MODE = 0 gilt. Dabei wird SET_LATENCY_MODE in der AIDL- oder HIDL-Definition IWifiChip definiert.
Wenn diese Funktion deaktiviert ist, deaktiviert das Framework den Energiesparmodus nur, wenn der Modus mit niedriger Latenz aktiv ist.
Zertifizierungsstufe
Führen Sie die folgenden automatisierten Tests und manuellen Ping-Latenztests aus, um zu prüfen, ob der Modus mit niedriger Latenz funktioniert, wenn er aktiviert ist.
Automatisierte Tests
Führen Sie automatisierte Tests durch, indem Sie die folgenden Vendor Test Suite (VTS)- und Compatibility Test Suite (CTS)-Tests ausführen:
- 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
Manuelle Tests
Erforderliche Testgeräte und Umgebung
Für manuelle Tests ist die folgende Einrichtung erforderlich:
- WLAN-Zugangspunkt (AP)
- Smartphone des zu testenden Geräts und Testcomputer
- Das zu testende Gerät muss über WLAN mit dem Zugangspunkt verbunden sein.
- Der Testcomputer muss über WLAN oder Ethernet mit dem Zugangspunkt verbunden sein.
- Der Testcomputer muss über USB mit dem zu testenden Gerät verbunden sein.
Ping-Test für Uplink
Aktivieren Sie den Modus für geringe Latenzzeit.
adb root adb shell cmd wifi force-low-latency-mode enabledAchte darauf, dass dein Computer über Android Debug Bridge (ADB) mit dem Smartphone verbunden ist. Pinge das Gateway über die ADB-Shell 3 Stunden lang kontinuierlich in Intervallen von 1 Sekunde an.
Speichern Sie die Testausgabe in einer Textdatei und verwenden Sie eine Tabelle oder ein Python-Skript, um ein Histogramm der Ergebnisse des Ping-Latenztests zu erstellen.
Wiederholen Sie die Schritte 1 bis 3, wenn der Latenzmodus deaktiviert ist.
adb root adb shell cmd wifi force-low-latency-mode disabledVergleichen Sie die Testergebnisse, um zu prüfen, ob der durchschnittliche Ping-Latenzwert bei aktiviertem Modus mit niedriger Latenz reduziert wird.
Ping-Test für Downlink
Aktivieren Sie den Modus für geringe Latenzzeit.
adb root adb shell cmd wifi force-low-latency-mode enabledPingen Sie von der Befehlszeile des Testcomputers aus die IP-Adresse des Smartphones 3 Stunden lang im Sekundentakt an.
Speichern Sie die Testausgabe in einer Textdatei und verwenden Sie eine Tabelle oder ein Python-Skript, um ein Histogramm der Ergebnisse des Ping-Latenztests zu erstellen.
Wiederholen Sie die Schritte 1 bis 3, wenn der Latenzmodus deaktiviert ist.
adb root adb shell cmd wifi force-low-latency-mode disabledVergleichen Sie die Testergebnisse, um zu prüfen, ob der durchschnittliche Ping-Latenzwert bei aktiviertem Modus mit niedriger Latenz reduziert wird.
Andere Tests
Wiederholen Sie die vorherigen Tests in verschiedenen Umgebungen. Zum Beispiel zu Hause oder im Büro.