O Android 10 estende a API de bloqueio de Wi-Fi para permitir que apps sensíveis à latência configurem o Wi-Fi para um modo de baixa latência. O modo de baixa latência é iniciado quando todas as condições a seguir são atendidas:
- O Wi-Fi está ativado e o dispositivo tem acesso à Internet.
- O app criou e adquiriu um bloqueio de Wi-Fi e está sendo executado em primeiro plano.
- A tela está ligada.
Para oferecer suporte ao modo de baixa latência em dispositivos, os fabricantes precisam atualizar o driver de WLAN e a HAL do fornecedor. No modo de baixa latência, a economia de energia (também conhecida como estado de espera no padrão IEEE 802.11) é explicitamente desativada pelo framework. Os parâmetros de verificação e roaming nas camadas de driver e firmware podem ser otimizados para reduzir ainda mais a latência do Wi-Fi. As otimizações exatas são específicas da implementação.
O Android tem um modo de bloqueio de Wi-Fi de alto desempenho (introduzido no nível 12 da API) que é separado do modo de baixa latência.
Implementação
Para oferecer suporte ao recurso de modo de baixa latência do Wi-Fi, forneça implementações para as seguintes funções IWifiChip.
Na HAL da AIDL:
int getFeatureSet()void setLatencyMode(in LatencyMode mode)
Na HAL HIDL (1.3 ou mais recente):
getCapabilities_1_3() generates (WifiStatus status, bitfield<ChipCapabilityMask> capabilities)setLatencyMode(LatencyMode mode) generates (WifiStatus status)
Uma implementação de referência pode ser encontrada em
wifi_legacy_hal.cpp
com as seguintes funções:
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)
No modo de baixa latência, a economia de energia é desativada explicitamente por
WifiLockManager
no framework do Android.
Para isso, o driver WLAN precisa ser compatível com o comando NL80211,
NL80211_CMD_SET_POWER_SAVE, para ativar e desativar a economia de energia. Quando a economia de energia do Wi-Fi está desativada, o sistema Wi-Fi precisa permanecer no estado ativo e pronto para enviar ou receber pacotes com atraso mínimo.
Desativar o recurso
Para desativar o modo de baixa latência, atualize o código subjacente de
getFeatureSet() para a HAL da AIDL ou
getCapabilities_1_3() para a HAL da HIDL,
de modo que capabilities & SET_LATENCY_MODE = 0, em que
SET_LATENCY_MODE é definido na definição da AIDL ou HIDL IWifiChip.
Quando esse recurso está desativado, o framework desativa a economia de energia apenas quando o modo de baixa latência está ativo.
Validação
Para testar se o modo de baixa latência funciona quando ativado, execute os seguintes testes automatizados e testes manuais de latência de ping.
Testes automatizados
Faça testes automatizados executando os seguintes testes do Teste de fornecedor (VTS) e do Teste de compatibilidade (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
Teste manual
Equipamentos e ambiente de teste necessários
Para testes manuais, é necessário fazer a seguinte configuração:
- Ponto de acesso (AP) Wi-Fi
- Smartphone do dispositivo em teste (DUT) e computador de teste
- O DUT precisa estar conectado ao ponto de acesso por Wi-Fi.
- O computador de teste precisa estar conectado ao ponto de acesso por Wi-Fi ou Ethernet.
- O computador de teste precisa estar conectado ao DUT por USB.
Teste de ping de uplink
Ative o modo de baixa latência.
adb root adb shell cmd wifi force-low-latency-mode enabledVerifique se o computador está conectado ao smartphone pelo Android Debug Bridge (ADB). No shell do ADB, faça ping no gateway continuamente por 3 horas em intervalos de 1 segundo.
Salve a saída do teste em um arquivo de texto e use uma planilha ou um script Python para gerar um histograma dos resultados do teste de latência de ping.
Repita as etapas de 1 a 3 com o modo de latência desativado.
adb root adb shell cmd wifi force-low-latency-mode disabledCompare os resultados do teste para verificar se o valor médio da latência de ping é reduzido quando o modo de baixa latência está ativado.
Teste de ping de downlink
Ative o modo de baixa latência.
adb root adb shell cmd wifi force-low-latency-mode enabledNa linha de comando do computador de teste, faça ping no endereço IP do smartphone continuamente por 3 horas em intervalos de 1 segundo.
Salve a saída do teste em um arquivo de texto e use uma planilha ou um script Python para gerar um histograma dos resultados do teste de latência de ping.
Repita as etapas de 1 a 3 com o modo de latência desativado.
adb root adb shell cmd wifi force-low-latency-mode disabledCompare os resultados do teste para verificar se o valor médio da latência de ping é reduzido quando o modo de baixa latência está ativado.
Outros testes
Repita os testes anteriores em ambientes diferentes. Por exemplo, em casa ou no escritório.