Android 10 amplía la API de bloqueo de Wi-Fi para permitir que las apps sensibles a la latencia configuren el Wi-Fi en un modo de baja latencia. El modo de baja latencia comienza cuando se cumplen todas las siguientes condiciones:
- El Wi-Fi está habilitado y el dispositivo tiene acceso a Internet.
- La app creó y adquirió un bloqueo de Wi-Fi y se ejecuta en primer plano.
- La pantalla está encendida.
Para admitir el modo de baja latencia en los dispositivos, los fabricantes deben actualizar el controlador WLAN y la HAL del proveedor. En el modo de baja latencia, el framework inhabilita de forma explícita el ahorro de energía (también conocido como estado de suspensión en el estándar IEEE 802.11). Los parámetros de escaneo y roaming en las capas del controlador y el firmware se pueden optimizar para reducir aún más la latencia de Wi-Fi. Las optimizaciones exactas son específicas de la implementación.
Android tiene un modo de bloqueo de Wi-Fi de alto rendimiento (que se introdujo en el nivel de API 12) que es independiente del modo de baja latencia.
Implementación
Para admitir la función de modo de baja latencia de Wi-Fi, proporciona implementaciones para las siguientes funciones IWifiChip
.
En el HAL de AIDL:
int getFeatureSet()
void setLatencyMode(in LatencyMode mode)
En la HAL de HIDL (1.3 o posterior), haz lo siguiente:
getCapabilities_1_3() generates (WifiStatus status, bitfield<ChipCapabilityMask> capabilities)
setLatencyMode(LatencyMode mode) generates (WifiStatus status)
Puedes encontrar una implementación de referencia en wifi_legacy_hal.cpp
con las siguientes funciones:
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)
En el modo de baja latencia, WifiLockManager
inhabilita de forma explícita el ahorro de energía en el framework de Android.
Para admitir esto, el controlador WLAN debe admitir el comando NL80211, NL80211_CMD_SET_POWER_SAVE
, para habilitar y deshabilitar el ahorro de energía. Cuando se inhabilita el ahorro de energía Wi-Fi, el sistema Wi-Fi debe permanecer en el estado activo y estar listo para enviar o recibir paquetes con una demora mínima.
Inhabilita la función
Para desactivar la función de modo de baja latencia, actualiza el código subyacente de getFeatureSet()
para la HAL de AIDL o getCapabilities_1_3()
para la HAL de HIDL, de modo que capabilities & SET_LATENCY_MODE = 0
, donde SET_LATENCY_MODE
se define en la definición de AIDL o HIDL de IWifiChip
.
Cuando esta función está inhabilitada, el framework inhabilita el ahorro de energía solo cuando el modo de baja latencia está activo.
Validación
Para probar que el modo de baja latencia funciona cuando está habilitado, ejecuta las siguientes pruebas automatizadas y pruebas de latencia de ping manual.
Pruebas automáticas
Ejecuta las siguientes pruebas de VTS y 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
Pruebas manuales
Equipo y entorno de prueba obligatorios
Para las pruebas manuales, se requiere la siguiente configuración:
- Punto de acceso (AP) de Wi-Fi
Teléfono del dispositivo en prueba (DUT) y computadora de prueba
- El DUT debe estar conectado al punto de acceso mediante Wi-Fi.
- La computadora de prueba debe estar conectada al punto de acceso a través de Wi-Fi o Ethernet.
- La computadora de prueba debe estar conectada al DUT a través de USB.
Prueba de ping de la conexión ascendente
Habilita el modo de baja latencia.
adb root
adb shell cmd wifi force-low-latency-mode enabled
Asegúrate de que la computadora esté conectada al teléfono a través de ADB. Desde el shell de ADB, haz ping a la puerta de enlace de forma continua durante 3 horas en intervalos de 1 segundo.
Guarda el resultado de la prueba en un archivo de texto y usa una hoja de cálculo o una secuencia de comandos de Python para generar un histograma de los resultados de la prueba de latencia de ping.
Repite los pasos 1 al 3 con el modo de latencia inhabilitado.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Compara los resultados de la prueba para asegurarte de que el valor de latencia de ping promedio se reduzca cuando el modo de latencia baja esté habilitado.
Prueba de ping de vínculo descendente
Habilita el modo de baja latencia.
adb root
adb shell cmd wifi force-low-latency-mode enabled
Desde la línea de comandos de la computadora de prueba, realiza un ping a la dirección IP del teléfono de forma continua durante 3 horas con intervalos de 1 segundo.
Guarda el resultado de la prueba en un archivo de texto y usa una hoja de cálculo o una secuencia de comandos de Python para generar un histograma de los resultados de la prueba de latencia de ping.
Repite los pasos 1 al 3 con el modo de latencia inhabilitado.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Compara los resultados de la prueba para asegurarte de que el valor de latencia de ping promedio se reduzca cuando el modo de latencia baja esté habilitado.
Otras pruebas
Repite las pruebas anteriores en diferentes entornos. Por ejemplo, en casa o en la oficina.