Android 10 estende l'API di blocco Wi-Fi per consentire alle app sensibili alla latenza di configurare il Wi-Fi in una modalità a bassa latenza . La modalità a bassa latenza viene avviata quando vengono soddisfatte tutte le seguenti condizioni:
- Il Wi-Fi è abilitato e il dispositivo ha accesso a Internet.
- L'app ha creato e acquisito un blocco Wi-Fi ed è in esecuzione in primo piano.
- Lo schermo è acceso.
Per supportare la modalità a bassa latenza sui dispositivi, i produttori dei dispositivi devono aggiornare il driver WLAN e l'HAL del fornitore. Nella modalità a bassa latenza, il risparmio energetico (noto anche come stato doze nello standard IEEE 802.11) è esplicitamente disabilitato dal framework. I parametri di scansione e roaming nei livelli driver e firmware possono essere ottimizzati per ridurre ulteriormente la latenza Wi-Fi. Le ottimizzazioni esatte sono specifiche dell'implementazione.
Android dispone di una modalità di blocco Wi-Fi ad alte prestazioni (introdotta nel livello API 12) separata dalla modalità a bassa latenza.
Implementazione
Per supportare la funzionalità della modalità Wi-Fi a bassa latenza, fornire implementazioni per le seguenti funzioni IWifiChip
.
Nell'HAL AIDL:
-
int getFeatureSet()
-
void setLatencyMode(in LatencyMode mode)
Nell'HIDL HAL (1.3 o successivo):
-
getCapabilities_1_3() generates (WifiStatus status, bitfield<ChipCapabilityMask> capabilities)
-
setLatencyMode(LatencyMode mode) generates (WifiStatus status)
Un'implementazione di riferimento può essere trovata in wifi_legacy_hal.cpp
con le seguenti funzioni:
-
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)
In modalità a bassa latenza, il risparmio energetico è esplicitamente disabilitato da WifiLockManager
nel framework Android. Per supportare ciò, il driver WLAN deve supportare il comando NL80211, NL80211_CMD_SET_POWER_SAVE
, per abilitare e disabilitare il risparmio energetico. Quando il risparmio energetico Wi-Fi è disabilitato, il sistema Wi-Fi deve rimanere nello stato attivo ed essere pronto a inviare o ricevere pacchetti con un ritardo minimo.
Disabilitare la funzione
Per disattivare la funzionalità della modalità a bassa latenza, aggiornare il codice sottostante di getFeatureSet()
per AIDL HAL o getCapabilities_1_3()
per HIDL HAL, in modo tale che capabilities & SET_LATENCY_MODE = 0
, dove SET_LATENCY_MODE
è definito nella definizione IWifiChip
AIDL o HIDL . Quando questa funzionalità è disabilitata, il framework disabilita il risparmio energetico solo quando è attiva la modalità a bassa latenza.
Validazione
Per verificare che la modalità a bassa latenza funzioni quando abilitata, esegui i seguenti test automatizzati e test manuali di latenza del ping.
Test automatizzati
Eseguire i seguenti test VTS e 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
Test manuale
Attrezzatura e ambiente di prova richiesti
Per i test manuali è necessaria la seguente configurazione:
- Punto di accesso Wi-Fi (AP)
Telefono dispositivo sottoposto a test (DUT) e computer di test
- Il DUT deve essere connesso al punto di accesso tramite Wi-Fi.
- Il computer di prova deve essere connesso al punto di accesso tramite Wi-Fi o Ethernet.
- Il computer di prova deve essere collegato al DUT tramite USB.
Test del ping in uplink
Abilita la modalità a bassa latenza.
adb root
adb shell cmd wifi force-low-latency-mode enabled
Assicurati che il tuo computer sia connesso al telefono tramite ADB. Dalla shell ADB, eseguire il ping del gateway ininterrottamente per 3 ore a intervalli di 1 secondo.
Salva l'output del test in un file di testo e utilizza un foglio di calcolo o uno script Python per generare un istogramma dei risultati del test di latenza del ping.
Ripetere i passaggi da 1 a 3 con la modalità latenza disabilitata.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Confronta i risultati del test per garantire che il valore medio della latenza del ping venga ridotto quando è abilitata la modalità a bassa latenza.
Test del ping in downlink
Abilita la modalità a bassa latenza.
adb root
adb shell cmd wifi force-low-latency-mode enabled
Dalla riga di comando del computer di prova, eseguire il ping dell'indirizzo IP del telefono ininterrottamente per 3 ore a intervalli di 1 secondo.
Salva l'output del test in un file di testo e utilizza un foglio di calcolo o uno script Python per generare un istogramma dei risultati del test di latenza del ping.
Ripetere i passaggi da 1 a 3 con la modalità latenza disabilitata.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Confronta i risultati del test per garantire che il valore medio della latenza del ping venga ridotto quando è abilitata la modalità a bassa latenza.
Altri test
Ripetere i test sopra in ambienti diversi. Ad esempio, a casa o in ufficio.