Android 10 rozszerza interfejs API blokady Wi-Fi, aby umożliwić aplikacjom wrażliwym na opóźnienia konfigurowanie Wi-Fi w trybie niskich opóźnień. Tryb małego opóźnienia uruchamia się, gdy są spełnione wszystkie te warunki:
- Sieć Wi-Fi jest włączona, a urządzenie ma dostęp do internetu.
- Aplikacja utworzyła i uzyskała blokadę Wi-Fi oraz działa na pierwszym planie.
- Ekran jest włączony.
Aby obsługiwać tryb o niskiej latencji na urządzeniach, producenci muszą zaktualizować sterownik WLAN i interfejs HAL. W trybie niskiego opóźnienia oszczędzanie energii (znane też jako stan doze w standardzie IEEE 802.11) jest wyraźnie wyłączane przez framework. Parametry skanowania i roamingu w warstwach sterownika i oprogramowania można zoptymalizować, aby jeszcze bardziej zmniejszyć opóźnienia Wi-Fi. Konkretne optymalizacje zależą od implementacji.
Android ma wysoko wydajny tryb blokady Wi-Fi (wprowadzony w poziomie interfejsu API 12), który jest oddzielny od trybu o niskiej latencji.
Implementacja
Aby obsługiwać funkcję trybu Wi-Fi o niskim opóźnieniu, udostępnij implementacje tych funkcji: IWifiChip
.
W interfejsie AIDL HAL:
int getFeatureSet()
void setLatencyMode(in LatencyMode mode)
W interfejsie HAL HIDL (1.3 lub nowszy):
getCapabilities_1_3() generates (WifiStatus status, bitfield<ChipCapabilityMask> capabilities)
setLatencyMode(LatencyMode mode) generates (WifiStatus status)
Implementację referencyjną znajdziesz w zadaniu wifi_legacy_hal.cpp
z tymi funkcjami:
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)
W trybie niskiego opóźnienia oszczędzanie energii jest wyraźnie wyłączone przez WifiLockManager
w platformie Androida.
Aby umożliwić to, sterownik WLAN musi obsługiwać polecenie NL80211,
NL80211_CMD_SET_POWER_SAVE
, aby włączać i wyłączać oszczędzanie energii. Gdy funkcja oszczędzania energii Wi-Fi jest wyłączona, system Wi-Fi musi pozostać w stanie aktywnym i być gotowy do wysyłania lub odbierania pakietów z minimalnym opóźnieniem.
Wyłączanie funkcji
Aby wyłączyć funkcję trybu o niskiej latencji, zaktualizuj kod podstawowy getFeatureSet()
w przypadku interfejsu AIDL HAL lub getCapabilities_1_3()
w przypadku interfejsu HIDL HAL, tak aby capabilities & SET_LATENCY_MODE = 0
, gdzie SET_LATENCY_MODE
jest zdefiniowany w definicji IWifiChip
AIDL lub HIDL.
Gdy ta funkcja jest wyłączona, framework wyłącza oszczędzanie energii tylko wtedy, gdy aktywny jest tryb niskiej latencji.
Weryfikacja
Aby sprawdzić, czy tryb o niskim opóźnieniu działa po włączeniu, uruchom te automatyczne testy i ręczne testy opóźnienia pingowania.
Testowanie automatyczne
Przeprowadź te testy VTS i CTS:
- 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
Testy ręczne
Wymagane urządzenia i środowisko testowe
Aby przeprowadzić testowanie ręczne, musisz wykonać tę konfigurację:
- Punkt dostępu Wi-Fi (AP)
Testowany telefon i testowany komputer
- Urządzenie UTE musi być połączone z punktem dostępu przez Wi-Fi.
- Komputer testowy musi być połączony z punktem dostępu przez Wi-Fi lub Ethernet.
- Komputer testowy musi być podłączony do urządzenia DUT przez USB.
Test pingu w kierunku serwera
Włącz tryb niskiego opóźnienia.
adb root
adb shell cmd wifi force-low-latency-mode enabled
Upewnij się, że komputer jest połączony z telefonem przez ADB. W powłoce ADB pinguj bramę nieprzerwanie przez 3 godziny w odstępach 1 sekundy.
Zapisz wyniki testu w pliku tekstowym i użyj arkusza kalkulacyjnego lub skryptu Pythona, aby wygenerować histogram z wynikami testu opóźnienia pingu.
Powtórz kroki 1–3, wyłączając tryb opóźnienia.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Porównaj wyniki testu, aby sprawdzić, czy średni czas oczekiwania na ping jest krótszy po włączeniu trybu niskiego opóźnienia.
Test ping dla pobierania
Włącz tryb niskiego opóźnienia.
adb root
adb shell cmd wifi force-low-latency-mode enabled
W wierszu poleceń na komputerze testowym wysyłaj pingi na adres IP telefonu przez 3 godziny w odstępach 1 sekundy.
Zapisz wyniki testu w pliku tekstowym, a potem użyj arkusza kalkulacyjnego lub skryptu Pythona, aby wygenerować histogram wyników testu opóźnienia pingowania.
Powtórz kroki 1–3, wyłączając tryb opóźnienia.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Porównaj wyniki testu, aby sprawdzić, czy średni czas oczekiwania na ping jest krótszy po włączeniu trybu niskiego opóźnienia.
Inne testy
Powtórz powyższe testy w różnych środowiskach. Na przykład w domu lub w biurze.