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 低延遲模式功能位於android.hardware.wifi@1.3
中。要支持此功能,請在IWifiChip.hal
中提供以下功能的實現:
-
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 系統必須保持喚醒狀態並準備好以最小延遲發送或接收數據包。
禁用該功能
要關閉低延遲模式功能,請更新getCapabilities_1_3()
的底層代碼,使capabilities & SET_LATENCY_MODE = 0
,其中SET_LATENCY_MODE
在IWifiChip.hal
中定義。禁用此功能時,框架僅在低延遲模式處於活動狀態時禁用省電。
驗證
要測試啟用後的低延遲模式是否有效,請運行以下自動測試和手動 ping 延遲測試。
自動化測試
運行以下 VTS 和 CTS 測試:
- VTS:
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延遲值會降低。
其他測試
在不同的環境中重複上述測試。例如,在家中或辦公室。