Tryb niskiego opóźnienia Wi-Fi

Android 10 rozszerza interfejs API blokady Wi-Fi, aby umożliwić aplikacjom wrażliwym na opóźnienia konfigurowanie Wi-Fi w trybie małego opóźnienia . Tryb małego opóźnienia uruchamia się, gdy spełnione są wszystkie poniższe warunki:

  • Wi-Fi jest włączone, a urządzenie ma dostęp do Internetu.
  • Aplikacja utworzyła i uzyskała blokadę Wi-Fi i działa na pierwszym planie.
  • Ekran jest włączony.

Aby obsługiwać tryb małego opóźnienia na urządzeniach, producenci urządzeń muszą zaktualizować sterownik WLAN i HAL dostawcy. W trybie małego opóźnienia oszczędzanie energii (znane również jako stan uśpienia w standardzie IEEE 802.11) jest jawnie wyłączone przez platformę. Parametry skanowania i roamingu w warstwach sterownika i oprogramowania sprzętowego można zoptymalizować, aby jeszcze bardziej zmniejszyć opóźnienia Wi-Fi. Dokładne optymalizacje zależą od implementacji.

Android ma wysokowydajny tryb blokady Wi-Fi (wprowadzony na poziomie API 12), który jest niezależny od trybu małego opóźnienia.

Realizacja

Aby obsługiwać funkcję trybu niskiego opóźnienia Wi-Fi, zapewnij implementacje następujących funkcji IWifiChip .

W AIDL HAL:

  • int getFeatureSet()
  • void setLatencyMode(in LatencyMode mode)

W HIDL HAL (1.3 lub nowszy):

  • getCapabilities_1_3() generates (WifiStatus status, bitfield<ChipCapabilityMask> capabilities)
  • setLatencyMode(LatencyMode mode) generates (WifiStatus status)

Implementację referencyjną można znaleźć w wifi_legacy_hal.cpp z następującymi 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 małego opóźnienia oszczędzanie energii jest wyraźnie wyłączone przez WifiLockManager w środowisku Android. Aby to obsługiwać, sterownik WLAN musi obsługiwać polecenie NL80211, NL80211_CMD_SET_POWER_SAVE , aby włączyć i wyłączyć oszczędzanie energii. Gdy funkcja oszczędzania energii Wi-Fi jest wyłączona, system Wi-Fi musi pozostać w stanie uśpienia i być gotowy do wysyłania lub odbierania pakietów z minimalnym opóźnieniem.

Wyłączenie tej funkcji

Aby wyłączyć funkcję trybu małego opóźnienia, zaktualizuj podstawowy kod getFeatureSet() dla AIDL HAL lub getCapabilities_1_3() dla HIDL HAL, tak aby capabilities & SET_LATENCY_MODE = 0 , gdzie SET_LATENCY_MODE jest zdefiniowane w definicji IWifiChip AIDL lub HIDL . Gdy ta funkcja jest wyłączona, platforma wyłącza oszczędzanie energii tylko wtedy, gdy aktywny jest tryb małego opóźnienia.

Walidacja

Aby sprawdzić, czy tryb małych opóźnień działa po włączeniu, uruchom następujące automatyczne testy i ręczne testy opóźnień ping.

Zautomatyzowane testowanie

Uruchom następujące testy VTS i CTS:

Testowanie ręczne

Wymagany sprzęt testowy i środowisko

W przypadku testów ręcznych wymagana jest następująca konfiguracja:

  • Punkt dostępu Wi-Fi (AP)
  • Telefon i komputer testowy w ramach testowanego urządzenia (DUT).

    • Urządzenie DUT musi być połączone z punktem dostępu przez Wi-Fi.
    • Komputer testowy musi być podłączony do punktu dostępowego przez Wi-Fi lub Ethernet.
    • Komputer testowy musi być podłączony do testowanego urządzenia przez USB.
  1. Włącz tryb małego opóźnienia.

    adb root
    adb shell cmd wifi force-low-latency-mode enabled
    
  2. Upewnij się, że komputer jest połączony z telefonem poprzez ADB. Z powłoki ADB pinguj bramę w sposób ciągły przez 3 godziny w odstępach 1 sekundy.

  3. Zapisz wynik testu w pliku tekstowym i użyj arkusza kalkulacyjnego lub skryptu w języku Python, aby wygenerować histogram wyników testu opóźnienia ping.

  4. Powtórz kroki od 1 do 3 przy wyłączonym trybie opóźnienia.

    adb root
    adb shell cmd wifi force-low-latency-mode disabled
    
  5. Porównaj wyniki testu, aby upewnić się, że średnia wartość opóźnienia ping zostanie zmniejszona po włączeniu trybu małego opóźnienia.

  1. Włącz tryb małego opóźnienia.

    adb root
    adb shell cmd wifi force-low-latency-mode enabled
    
  2. Z wiersza poleceń komputera testowego pinguj adres IP telefonu w sposób ciągły przez 3 godziny w odstępach 1 sekundy.

  3. Zapisz wynik testu w pliku tekstowym i użyj arkusza kalkulacyjnego lub skryptu w języku Python, aby wygenerować histogram wyników testu opóźnienia ping.

  4. Powtórz kroki od 1 do 3 przy wyłączonym trybie opóźnienia.

    adb root
    adb shell cmd wifi force-low-latency-mode disabled
    
  5. Porównaj wyniki testu, aby upewnić się, że średnia wartość opóźnienia ping zostanie zmniejszona po włączeniu trybu małego opóźnienia.

Inne testy

Powtórz powyższe testy w różnych środowiskach. Na przykład w domu lub w biurze.