Android 10 расширяет API блокировки Wi-Fi, позволяя приложениям, чувствительным к задержке, настраивать Wi-Fi в режим с низкой задержкой . Режим низкой задержки запускается при выполнении всех следующих условий:
- Wi-Fi включен, и устройство имеет доступ в Интернет.
- Приложение создало и получило блокировку Wi-Fi и работает на переднем плане.
- Экран включен.
Для поддержки режима низкой задержки на устройствах производители устройств должны обновить драйвер WLAN и HAL поставщика. В режиме с малой задержкой энергосбережение (также известное как спящее состояние в стандарте 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) и тестовый компьютер
- DUT должен быть подключен к точке доступа через Wi-Fi.
- Тестовый компьютер должен быть подключен к точке доступа через Wi-Fi или Ethernet.
- Тестовый компьютер должен быть подключен к проверяемому устройству через USB.
Пинг-тест восходящей линии связи
Включите режим низкой задержки.
adb root
adb shell cmd wifi force-low-latency-mode enabled
Убедитесь, что ваш компьютер подключен к телефону через ADB. Из оболочки ADB непрерывно пингуйте шлюз в течение 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
Из командной строки тестового компьютера непрерывно пингуйте IP-адрес телефона в течение 3 часов с интервалом в 1 секунду.
Сохраните выходные данные теста в текстовом файле и используйте электронную таблицу или скрипт Python для создания гистограммы результатов теста задержки пинга.
Повторите шаги с 1 по 3, отключив режим задержки.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Сравните результаты теста, чтобы убедиться, что среднее значение задержки пинга уменьшается при включении режима низкой задержки.
Другие тесты
Повторите вышеуказанные тесты в разных средах. Например, дома или в офисе.