В Android 10 расширен API блокировки Wi-Fi, позволяющий приложениям, чувствительным к задержке, настраивать Wi-Fi в режим с низкой задержкой . Режим с низкой задержкой запускается при выполнении всех следующих условий:
- Wi-Fi включен, и устройство имеет доступ в интернет.
- Приложение создало и получило Wi-Fi-блокировку и работает в фоновом режиме.
- Экран включен.
Для поддержки режима низкой задержки на устройствах производители устройств должны обновить драйвер WLAN и HAL производителя. В режиме низкой задержки режим энергосбережения (также известный как режим Doze в стандарте IEEE 802.11) явно отключается фреймворком. Параметры сканирования и роуминга на уровне драйвера и микропрограммы могут быть оптимизированы для дальнейшего снижения задержки Wi-Fi. Точные оптимизации зависят от конкретной реализации.
В Android есть высокопроизводительный режим блокировки Wi-Fi (введенный в API уровня 12), который отделен от режима низкой задержки.
Выполнение
Для поддержки режима Wi-Fi с низкой задержкой необходимо реализовать следующие функции IWifiChip .
В AIDL HAL:
-
int getFeatureSet() -
void setLatencyMode(in LatencyMode mode)
В HIDL HAL (версия 1.3 или новее):
-
getCapabilities_1_3() generates (WifiStatus status, bitfield<ChipCapabilityMask> capabilities) -
setLatencyMode(LatencyMode mode) generates (WifiStatus status)
Пример реализации можно найти в wifi_legacy_hal.cpp , где представлены следующие функции:
-
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)
В режиме низкой задержки энергосбережение явно отключается модулем WifiLockManager в среде Android. Для этого драйвер WLAN должен поддерживать команду NL80211, NL80211_CMD_SET_POWER_SAVE , для включения и выключения энергосбережения. Когда энергосбережение Wi-Fi отключено, система Wi-Fi должна оставаться в активном состоянии и быть готовой отправлять или получать пакеты с минимальной задержкой.
Отключите эту функцию.
Чтобы отключить режим низкой задержки, обновите базовый код функции getFeatureSet() для AIDL HAL или getCapabilities_1_3() для HIDL HAL таким образом, чтобы capabilities & SET_LATENCY_MODE = 0 , где SET_LATENCY_MODE определено в определении IWifiChip AIDL или HIDL. Когда эта функция отключена, платформа отключает энергосбережение только тогда, когда активен режим низкой задержки.
Проверка
Чтобы проверить работоспособность режима с низкой задержкой при его включении, выполните следующие автоматические тесты и ручные тесты задержки пинга.
Автоматизированное тестирование
Выполните автоматизированное тестирование, запустив следующие тесты из набора тестов поставщика (VTS) и набора тестов совместимости (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
Ручное тестирование
Необходимое испытательное оборудование и условия.
Для ручного тестирования требуется следующая настройка:
- Точка доступа Wi-Fi (AP)
- Тестируемое устройство (DUT): телефон и тестовый компьютер
- Исследуемое устройство должно быть подключено к точке доступа по Wi-Fi.
- Тестовый компьютер должен быть подключен к точке доступа по Wi-Fi или Ethernet.
- Тестовый компьютер должен быть подключен к тестируемому устройству через USB.
тест пинга восходящего канала
Включите режим низкой задержки.
adb root adb shell cmd wifi force-low-latency-mode enabledУбедитесь, что ваш компьютер подключен к телефону через Android Debug Bridge (ADB). В оболочке ADB непрерывно отправляйте ping-запросы на шлюз в течение 3 часов с интервалом в 1 секунду.
Сохраните результаты теста в текстовый файл и используйте электронную таблицу или скрипт на Python для построения гистограммы результатов теста задержки пинга.
Повторите шаги с 1 по 3, отключив режим задержки.
adb root adb shell cmd wifi force-low-latency-mode disabledСравните результаты тестов, чтобы убедиться, что среднее значение задержки пинга снижается при включении режима низкой задержки.
тест пинга нисходящего канала
Включите режим с низкой задержкой.
adb root adb shell cmd wifi force-low-latency-mode enabledС помощью командной строки тестового компьютера непрерывно отправляйте ping-запросы на IP-адрес телефона в течение 3 часов с интервалом в 1 секунду.
Сохраните результаты теста в текстовый файл и используйте электронную таблицу или скрипт на Python для построения гистограммы результатов теста задержки пинга.
Повторите шаги с 1 по 3, отключив режим задержки.
adb root adb shell cmd wifi force-low-latency-mode disabledСравните результаты тестов, чтобы убедиться, что среднее значение задержки пинга снижается при включении режима низкой задержки.
Другие тесты
Повторите описанные выше тесты в разных условиях. Например, дома или в офисе.