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_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
手动测试
所需的测试设备和环境
对于手动测试,需要进行以下设置:
- WLAN 接入点 (AP)
被测设备 (DUT) 手机和测试计算机
- DUT 必须通过 WLAN 连接到接入点。
- 测试计算机必须通过 WLAN 或以太网连接到接入点。
- 测试计算机必须通过 USB 连接到 DUT。
上行链路 ping 测试
启用低延迟模式。
adb root
adb shell cmd wifi force-low-latency-mode enabled
确保您的计算机通过 ADB 与手机连接。通过 ADB shell,以 1 秒的间隔连续对网关执行 3 小时 ping 操作。
将测试输出保存在文本文件中,并使用电子表格或 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 秒的间隔连续对手机的 IP 地址执行 3 小时 ping 操作。
将测试输出保存在文本文件中,并使用电子表格或 Python 脚本生成 ping 延迟时间测试结果的直方图。
在停用延迟模式的情况下重复执行第 1-3 步。
adb root
adb shell cmd wifi force-low-latency-mode disabled
比较测试结果,以确保低延迟模式处于启用状态时平均 ping 延迟值有所降低。
其他测试
在不同的环境中重复上述测试。例如,您可以在家里或办公室进行测试。