Режим Wi-Fi с низкой задержкой

В Android 10 расширен API блокировки Wi-Fi, позволяющий приложениям, чувствительным к задержке, настраивать Wi-Fi в режим с низкой задержкой . Режим с низкой задержкой запускается при выполнении всех следующих условий:

  • Wi-Fi включен, и устройство имеет доступ в интернет.
  • Приложение создало и получило Wi-Fi-блокировку и работает в фоновом режиме.
  • Экран включен.

Для поддержки режима низкой задержки на устройствах производители устройств должны обновить драйвер WLAN и HAL производителя. В режиме низкой задержки режим энергосбережения (также известный как режим Doze в стандарте 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):

Ручное тестирование

Необходимое испытательное оборудование и условия.

Для ручного тестирования требуется следующая настройка:

  • Точка доступа Wi-Fi (AP)
  • Тестируемое устройство (DUT): телефон и тестовый компьютер
    • Исследуемое устройство должно быть подключено к точке доступа по Wi-Fi.
    • Тестовый компьютер должен быть подключен к точке доступа по Wi-Fi или Ethernet.
    • Тестовый компьютер должен быть подключен к тестируемому устройству через USB.
  1. Включите режим низкой задержки.

    adb root
    adb shell cmd wifi force-low-latency-mode enabled
    
  2. Убедитесь, что ваш компьютер подключен к телефону через Android Debug Bridge (ADB). В оболочке ADB непрерывно отправляйте ping-запросы на шлюз в течение 3 часов с интервалом в 1 секунду.

  3. Сохраните результаты теста в текстовый файл и используйте электронную таблицу или скрипт на Python для построения гистограммы результатов теста задержки пинга.

  4. Повторите шаги с 1 по 3, отключив режим задержки.

    adb root
    adb shell cmd wifi force-low-latency-mode disabled
    
  5. Сравните результаты тестов, чтобы убедиться, что среднее значение задержки пинга снижается при включении режима низкой задержки.

  1. Включите режим с низкой задержкой.

    adb root
    adb shell cmd wifi force-low-latency-mode enabled
    
  2. С помощью командной строки тестового компьютера непрерывно отправляйте ping-запросы на IP-адрес телефона в течение 3 часов с интервалом в 1 секунду.

  3. Сохраните результаты теста в текстовый файл и используйте электронную таблицу или скрипт на Python для построения гистограммы результатов теста задержки пинга.

  4. Повторите шаги с 1 по 3, отключив режим задержки.

    adb root
    adb shell cmd wifi force-low-latency-mode disabled
    
  5. Сравните результаты тестов, чтобы убедиться, что среднее значение задержки пинга снижается при включении режима низкой задержки.

Другие тесты

Повторите описанные выше тесты в разных условиях. Например, дома или в офисе.