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. Когда эта функция отключена, фреймворк отключает энергосбережение только при активном режиме с низкой задержкой.
Проверка
Чтобы проверить работу режима малой задержки при его включении, запустите следующие автоматизированные тесты и ручные тесты задержки ping.
Автоматизированное тестирование
Выполните следующие тесты 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
Убедитесь, что ваш компьютер подключен к телефону через ADB. Из оболочки ADB непрерывно пингуйте шлюз в течение 3 часов с интервалом в 1 секунду.
Сохраните результаты теста в текстовом файле и используйте электронную таблицу или скрипт Python для создания гистограммы результатов теста задержки ping.
Повторите шаги 1–3 с отключенным режимом задержки.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Сравните результаты теста, чтобы убедиться, что среднее значение задержки ping уменьшается при включении режима малой задержки.
Тест пинга нисходящего канала
Включить режим малой задержки.
adb root
adb shell cmd wifi force-low-latency-mode enabled
Из командной строки тестового компьютера непрерывно в течение 3 часов с интервалом в 1 секунду отправляйте пинг на IP-адрес телефона.
Сохраните результаты теста в текстовом файле и используйте электронную таблицу или скрипт Python для создания гистограммы результатов теста задержки ping.
Повторите шаги 1–3 с отключенным режимом задержки.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Сравните результаты теста, чтобы убедиться, что среднее значение задержки ping уменьшается при включении режима малой задержки.
Другие тесты
Повторите вышеуказанные тесты в разных условиях. Например, дома или в офисе.