В 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)
В режиме низкой задержки энергосбережение явно отключено в Android Framework с помощью параметра
WifiLockManager.
Для этого драйвер 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.
Автоматическое тестирование
Выполните автоматическое тестирование, запустив следующие наборы тестов Vendor Test Suite (VTS) и Compatibility Test Suite (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
- Тестируемый телефон и тестовый компьютер
- Тестируемое устройство должно быть подключено к точке доступа по Wi-Fi.
- Тестовый компьютер должен быть подключен к точке доступа по Wi-Fi или Ethernet.
- Тестовый компьютер должен быть подключен к целевому устройству через USB.
Тест ping для исходящего канала
Включите режим низкой задержки.
adb root adb shell cmd wifi force-low-latency-mode enabledУбедитесь, что компьютер подключен к телефону через Android Debug Bridge (ADB). В оболочке ADB непрерывно отправляйте шлюзу эхо-запросы в течение трех часов с интервалом в одну секунду.
Сохраните результаты тестирования в текстовом файле и используйте таблицу или скрипт Python, чтобы создать гистограмму результатов тестирования задержки ping.
Повторите шаги 1–3, отключив режим задержки.
adb root adb shell cmd wifi force-low-latency-mode disabledСравните результаты тестирования, чтобы убедиться, что среднее значение задержки при отправке запроса ping уменьшается при включении режима низкой задержки.
Тест ping для исходящего трафика
Включите режим низкой задержки.
adb root adb shell cmd wifi force-low-latency-mode enabledВ командной строке тестового компьютера непрерывно отправляйте ping-запросы на IP-адрес телефона в течение трех часов с интервалом в одну секунду.
Сохраните результаты проверки в текстовом файле и используйте таблицу или скрипт Python, чтобы создать гистограмму результатов проверки задержки ping.
Повторите шаги 1–3, отключив режим задержки.
adb root adb shell cmd wifi force-low-latency-mode disabledСравните результаты тестов, чтобы убедиться, что среднее значение задержки пинга уменьшается, когда включен режим низкой задержки.
Другие тестовые оповещения
Повторите описанные выше тесты в разных условиях. например дома или в офисе.