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_MODE
在 IWifiChip
AIDL 或 HIDL 定义中定义。当此功能被禁用时,框架仅在低延迟模式激活时禁用省电功能。
验证
为了测试启用低延迟模式时是否正常工作,请运行以下自动化测试和手动 ping 延迟测试。
自动化测试
运行以下 VTS 和 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 接入点 (AP)
被测设备 (DUT) 手机和测试计算机
- DUT 必须通过 Wi-Fi 连接到接入点。
- 测试计算机必须通过 Wi-Fi 或以太网连接到接入点。
- 测试计算机必须通过 USB 连接到 DUT。
上行链路 ping 测试
启用低延迟模式。
adb root
adb shell cmd wifi force-low-latency-mode enabled
确保您的计算机通过 ADB 连接到手机。从 ADB shell 中,以 1 秒的间隔持续 ping 网关 3 小时。
将测试输出保存在文本文件中,并使用电子表格或 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
从测试计算机的命令行中,以 1 秒的间隔持续 ping 手机的 IP 地址 3 小时。
将测试输出保存在文本文件中,并使用电子表格或 Python 脚本生成 ping 延迟测试结果的直方图。
在禁用延迟模式的情况下重复步骤 1 到 3。
adb root
adb shell cmd wifi force-low-latency-mode disabled
比较测试结果,以确保在启用低延迟模式时平均 ping 延迟值降低。
其他测试
在不同的环境中重复上述测试。例如,在家中或办公室。