Wi-Fi 低延迟模式

Android 10 扩展了 Wi-Fi 锁 API,允许对延迟敏感的应用将 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 框架中的 WifiLockManager 显式禁用省电功能。为了支持这一点,WLAN 驱动程序必须支持 NL80211 命令 NL80211_CMD_SET_POWER_SAVE,以启用和禁用省电功能。当 Wi-Fi 省电功能被禁用时,Wi-Fi 系统必须保持唤醒状态,并准备好以最小的延迟发送或接收数据包。

禁用此功能

要关闭低延迟模式功能,请更新 AIDL HAL 的 getFeatureSet() 或 HIDL HAL 的 getCapabilities_1_3() 的底层代码,使 capabilities & SET_LATENCY_MODE = 0,其中 SET_LATENCY_MODEIWifiChip AIDL 或 HIDL 定义中定义。当此功能被禁用时,框架仅在低延迟模式激活时禁用省电功能。

验证

为了测试启用低延迟模式时是否正常工作,请运行以下自动化测试和手动 ping 延迟测试。

自动化测试

运行以下 VTS 和 CTS 测试

手动测试

必需的测试设备和环境

对于手动测试,需要以下设置

  • Wi-Fi 接入点 (AP)
  • 被测设备 (DUT) 手机和测试计算机

    • DUT 必须通过 Wi-Fi 连接到接入点。
    • 测试计算机必须通过 Wi-Fi 或以太网连接到接入点。
    • 测试计算机必须通过 USB 连接到 DUT。
  1. 启用低延迟模式。

    adb root
    adb shell cmd wifi force-low-latency-mode enabled
  2. 确保您的计算机通过 ADB 连接到手机。从 ADB shell 中,以 1 秒的间隔持续 ping 网关 3 小时。

  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. 从测试计算机的命令行中,以 1 秒的间隔持续 ping 手机的 IP 地址 3 小时。

  3. 将测试输出保存在文本文件中,并使用电子表格或 Python 脚本生成 ping 延迟测试结果的直方图。

  4. 在禁用延迟模式的情况下重复步骤 1 到 3。

    adb root
    adb shell cmd wifi force-low-latency-mode disabled
  5. 比较测试结果,以确保在启用低延迟模式时平均 ping 延迟值降低。

其他测试

在不同的环境中重复上述测试。例如,在家中或办公室。