Android 10 rozszerza interfejs API blokady Wi-Fi, aby umożliwić aplikacjom wrażliwym na opóźnienia skonfigurowanie Wi-Fi w trybie niskich opóźnień. Tryb niskiego opóźnienia włącza się, gdy spełnione są 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 dostawcy. 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. Dokładne 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 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 niskiej latencji oszczędzanie energii jest wyłączone w ramach WifiLockManager
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
Uruchom 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)
Telefon i komputer testowy
- 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.
- Testowy komputer musi być połączony z badanym urządzeniem 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, 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.
Test pingu w dół
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.