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 находится в android.hardware.wifi@1.3
. Для поддержки этой функции предоставьте реализации следующих функций в IWifiChip.hal
:
-
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 должна оставаться в активном состоянии и быть готовой к отправке или получению пакетов с минимальной задержкой.
Отключение функции
Чтобы отключить функцию режима с малой задержкой, обновите базовый код getCapabilities_1_3()
таким образом, чтобы capabilities & SET_LATENCY_MODE = 0
, где SET_LATENCY_MODE
определено в IWifiChip.hal
. Когда эта функция отключена, фреймворк отключает энергосбережение только тогда, когда активен режим с малой задержкой.
Проверка
Чтобы проверить, работает ли режим с малой задержкой, когда он включен, запустите следующие автоматические тесты и ручные тесты задержки проверки связи.
Автоматизированное тестирование
Запустите следующие тесты VTS и CTS:
- VTS:
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 для создания гистограммы результатов теста задержки 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
Из командной строки тестового компьютера непрерывно пингуйте IP-адрес телефона в течение 3 часов с интервалом в 1 секунду.
Сохраните выходные данные теста в текстовом файле и используйте электронную таблицу или скрипт Python для создания гистограммы результатов теста задержки ping.
Повторите шаги с 1 по 3 с отключенным режимом ожидания.
adb root
adb shell cmd wifi force-low-latency-mode disabled
Сравните результаты теста, чтобы убедиться, что среднее значение задержки проверки связи уменьшается при включении режима с малой задержкой.
Другие тесты
Повторите вышеуказанные тесты в разных средах. Например, дома или в офисе.