WLAN 低延迟模式

Android 10 扩展了 Wi-Fi lock API,以允许容易受到延迟时间影响的应用将 Wi-Fi 配置为低延迟模式。当满足以下所有条件时,低延迟模式便会启动:

  • 已启用 WLAN,设备可以访问互联网。
  • 应用已创建并获得 Wi-Fi 锁,并且正在前台运行。
  • 屏幕处于开启状态。

要在设备上支持低延迟模式,设备制造商必须更新 WLAN 驱动程序和供应商 HAL。在低延迟模式下,框架会明确停用节电模式(在 IEEE 802.11 标准中也称为低电耗模式状态)。您可以优化驱动程序层和固件层中的扫描和漫游参数,以进一步降低 Wi-Fi 延迟。确切的优化项目因实现而异。

Android 具有高性能 WLAN 锁定模式(在 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 系统必须保持唤醒状态,并可以开始以最低延迟发送或接收数据包。

停用此功能

如需关闭低延迟模式功能,请更新 getFeatureSet()(对于 AIDL HAL)或 getCapabilities_1_3()(对于 HIDL HAL)的底层代码,使得 capabilities & SET_LATENCY_MODE = 0,其中 SET_LATENCY_MODEIWifiChip AIDL 或 HIDL 定义中进行定义。停用此功能后,仅当低延迟模式处于启用状态时,框架才会停用节电模式。

验证

要测试低延迟模式在启用状态下的工作情况,请运行以下自动测试和手动 ping 延迟时间测试。

自动测试

运行以下 VTS 和 CTS 测试:

手动测试

所需的测试设备和环境

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

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

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

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

  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 秒的间隔连续对手机的 IP 地址执行 3 小时 ping 操作。

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

  4. 在停用延迟模式的情况下重复执行第 1-3 步。

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

其他测试

在不同的环境中重复上述测试。例如,您可以在家里或办公室进行测试。