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