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

В 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):

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

Необходимое тестовое оборудование и среда

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

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

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

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

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

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

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

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

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

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

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

Другие тестовые оповещения

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