In Android 10 wird die WLAN-Sperre API erweitert, damit latenzempfindliche Apps das 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:
- Das WLAN ist aktiviert und das Gerät hat Internetzugang.
- Die App hat eine WLAN-Sperre erstellt und erworben und wird im Vordergrund ausgeführt.
- Das Display ist eingeschaltet.
Um den Modus mit niedriger Latenz auf Geräten zu unterstützen, müssen Gerätehersteller den WLAN-Treiber und die HAL des Anbieters aktualisieren. Im Modus mit geringer Latenz wird der Energiesparmodus (im IEEE 802.11-Standard auch als Ruhemodus bezeichnet) vom Framework ausdrücklich deaktiviert. Die Such- und Roaming-Parameter in den Treiber- und Firmwareschichten können optimiert werden, um die WLAN-Latenz weiter zu reduzieren. Die genauen Optimierungen sind implementierungsspezifisch.
Android bietet einen Hochleistungsmodus für die WLAN-Sperre (eingeführt in API-Level 12), der sich vom Modus mit niedriger Latenz unterscheidet.
Implementierung
Um den Modus mit niedriger Latenz für WLAN 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 mit den folgenden Funktionen finden Sie unter wifi_legacy_hal.cpp
:
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 niedriger Latenz wird der Energiesparmodus vom Android-Framework explizit deaktiviert.WifiLockManager
Dazu muss der WLAN-Treiber den Befehl „NL80211“, NL80211_CMD_SET_POWER_SAVE
, unterstützen, um den Energiesparmodus zu aktivieren und zu deaktivieren. Wenn die WLAN-Energiesparfunktion deaktiviert ist, muss das WLAN-System inaktiv bleiben und bereit sein, Pakete mit minimaler Verzögerung zu senden oder zu empfangen.
Funktion deaktivieren
Wenn Sie die Funktion für 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 so, dass capabilities & SET_LATENCY_MODE = 0
, wobei SET_LATENCY_MODE
in der IWifiChip
AIDL- oder HIDL-Definition definiert ist.
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 die folgenden VTS- und CTS-Tests aus:
- 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 (ZP)
Testgerät (Device Under Test, DUT) und Testcomputer
- Das DUT 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 DUT 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 enabled
Achten Sie darauf, dass Ihr Computer über ADB mit dem Smartphone verbunden ist. Führen Sie über die ADB-Shell 3 Stunden lang in Intervallen von 1 Sekunde einen Ping an das Gateway aus.
Speichern Sie die Testausgabe in einer Textdatei und erstellen Sie mit einer Tabelle oder einem Python-Script ein Histogramm der Ping-Latenztestergebnisse.
Wiederholen Sie die Schritte 1 bis 3, wobei der Latenzmodus deaktiviert ist.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Vergleichen Sie die Testergebnisse, um sicherzustellen, dass der durchschnittliche Ping-Latenzwert reduziert wird, wenn der Modus mit geringer Latenz aktiviert ist.
Ping-Test für Downlink
Aktivieren Sie den Modus für geringe Latenzzeit.
adb root
adb shell cmd wifi force-low-latency-mode enabled
Führen Sie über die Befehlszeile des Testcomputers 3 Stunden lang in 1-Sekunden-Intervallen einen Ping auf die IP-Adresse des Smartphones aus.
Speichern Sie die Testausgabe in einer Textdatei und erstellen Sie mit einer Tabelle oder einem Python-Script ein Histogramm der Ping-Latenztestergebnisse.
Wiederholen Sie die Schritte 1 bis 3, wobei der Latenzmodus deaktiviert ist.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Vergleichen Sie die Testergebnisse, um sicherzustellen, dass der durchschnittliche Ping-Latenzwert reduziert wird, wenn der Modus mit geringer Latenz aktiviert ist.
Andere Tests
Wiederholen Sie die obigen Tests in verschiedenen Umgebungen. Beispielsweise zu Hause oder im Büro.