Android 10 amplía la API de bloqueo de Wi-Fi para permitir que las apps sensibles a la latencia configuren Wi-Fi en un modo de baja latencia. El modo de baja latencia se inicia cuando se cumplen todas las siguientes condiciones:
- Wi-Fi está habilitado y el dispositivo tiene acceso a Internet.
- La app creó y adquirió un bloqueo de Wi-Fi, y se está ejecutando en primer plano.
- La pantalla está encendida.
Para admitir el modo de baja latencia en los dispositivos, los fabricantes de dispositivos deben actualizar el controlador de WLAN y la HAL del proveedor. En el modo de baja latencia, el framework inhabilita explícitamente el ahorro de energía (también conocido como estado de inactividad en el estándar IEEE 802.11). Los parámetros de exploración y roaming en las capas de controlador y 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 (introducido 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 de IWifiChip.
En la HAL de AIDL:
int getFeatureSet()void setLatencyMode(in LatencyMode mode)
En la HAL de HIDL (1.3 o versiones posteriores):
getCapabilities_1_3() generates (WifiStatus status, bitfield<ChipCapabilityMask> capabilities)setLatencyMode(LatencyMode mode) generates (WifiStatus status)
Se puede 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, el ahorro de energía es inhabilitado explícitamente por
WifiLockManager
en el framework de Android.
Para admitir esto, el controlador de 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 de Wi-Fi, el sistema de Wi-Fi debe permanecer en estado activo y estar listo para enviar o recibir paquetes con un retraso mínimo.
Inhabilitar 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 IWifiChip AIDL o HIDL.
Cuando se inhabilita esta función, 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 manuales de latencia de ping.
Pruebas automáticas
Para realizar pruebas automatizadas, ejecuta las siguientes pruebas del Conjunto de pruebas del proveedor (VTS) y del Conjunto de pruebas de compatibilidad (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 requeridos
Para las pruebas manuales, se requiere la siguiente configuración:
- Punto de acceso Wi-Fi (AP)
- Teléfono del dispositivo bajo prueba (DUT) y computadora de prueba
- El DUT debe estar conectado al punto de acceso a través de 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 vínculo de subida
Habilita el modo de baja latencia.
adb root adb shell cmd wifi force-low-latency-mode enabledAsegúrate de que la computadora esté conectada con el teléfono a través de Android Debug Bridge (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 del 1 al 3 con el modo de latencia inhabilitado.
adb root adb shell cmd wifi force-low-latency-mode disabledCompara los resultados de la prueba para verificar que el valor promedio de latencia de ping se reduzca cuando se habilita el modo de baja latencia.
Prueba de ping de vínculo de bajada
Habilita el modo de baja latencia.
adb root adb shell cmd wifi force-low-latency-mode enabledDesde la línea de comandos de la computadora de prueba, haz ping a la dirección IP del teléfono 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 del 1 al 3 con el modo de latencia inhabilitado.
adb root adb shell cmd wifi force-low-latency-mode disabledCompara los resultados de la prueba para verificar que el valor promedio de latencia de ping se reduzca cuando se habilita el modo de baja latencia.
Otras pruebas
Repite las pruebas anteriores en diferentes entornos. Por ejemplo, en casa o en la oficina.