Wifi usability: Change the unit of the threshold for tx/rx throughput from Mbps to Kbps
Data stall event can be triggered if the tx/rx tput is consecutively below a threshold over multiple RSSI polls. Changing the unit of the threshold from Mbps to Kbps allows us to configure a value below 1Mbps, e.g., 400Kbps.
Bug: 141027476
Test: frameworks/opt/net/wifi/tests/wifitests/runtests.sh
Change-Id: If0ca391b248c4248da8d2fee37c82d74fdb25ed2
Signed-off-by: Mingguang Xu <mingguangxu@google.com>
Merged-In: I76d6338cd2d482d198fde1e5a2d1a0540c087ca6
diff --git a/service/java/com/android/server/wifi/DeviceConfigFacade.java b/service/java/com/android/server/wifi/DeviceConfigFacade.java
index a9889f4..947261b 100644
--- a/service/java/com/android/server/wifi/DeviceConfigFacade.java
+++ b/service/java/com/android/server/wifi/DeviceConfigFacade.java
@@ -31,10 +31,10 @@
// Default duration for evaluating Wifi condition to trigger a data stall
// measured in milliseconds
public static final int DEFAULT_DATA_STALL_DURATION_MS = 1500;
- // Default threshold of Tx throughput below which to trigger a data stall measured in Mbps
- public static final int DEFAULT_DATA_STALL_TX_TPUT_THR_MBPS = 2;
- // Default threshold of Rx throughput below which to trigger a data stall measured in Mbps
- public static final int DEFAULT_DATA_STALL_RX_TPUT_THR_MBPS = 2;
+ // Default threshold of Tx throughput below which to trigger a data stall measured in Kbps
+ public static final int DEFAULT_DATA_STALL_TX_TPUT_THR_KBPS = 2000;
+ // Default threshold of Rx throughput below which to trigger a data stall measured in Kbps
+ public static final int DEFAULT_DATA_STALL_RX_TPUT_THR_KBPS = 2000;
// Default threshold of Tx packet error rate above which to trigger a data stall in percentage
public static final int DEFAULT_DATA_STALL_TX_PER_THR = 90;
// Default threshold of CCA level above which to trigger a data stall in percentage
@@ -77,17 +77,17 @@
/**
* Gets the threshold of Tx throughput below which to trigger a data stall.
*/
- public int getDataStallTxTputThrMbps() {
- return DeviceConfig.getInt(NAMESPACE, "data_stall_tx_tput_thr_mbps",
- DEFAULT_DATA_STALL_TX_TPUT_THR_MBPS);
+ public int getDataStallTxTputThrKbps() {
+ return DeviceConfig.getInt(NAMESPACE, "data_stall_tx_tput_thr_kbps",
+ DEFAULT_DATA_STALL_TX_TPUT_THR_KBPS);
}
/**
* Gets the threshold of Rx throughput below which to trigger a data stall.
*/
- public int getDataStallRxTputThrMbps() {
- return DeviceConfig.getInt(NAMESPACE, "data_stall_rx_tput_thr_mbps",
- DEFAULT_DATA_STALL_RX_TPUT_THR_MBPS);
+ public int getDataStallRxTputThrKbps() {
+ return DeviceConfig.getInt(NAMESPACE, "data_stall_rx_tput_thr_kbps",
+ DEFAULT_DATA_STALL_RX_TPUT_THR_KBPS);
}
/**
diff --git a/service/java/com/android/server/wifi/WifiDataStall.java b/service/java/com/android/server/wifi/WifiDataStall.java
index 6eb3b41..a7931fe 100644
--- a/service/java/com/android/server/wifi/WifiDataStall.java
+++ b/service/java/com/android/server/wifi/WifiDataStall.java
@@ -52,8 +52,8 @@
private int mMinTxBad;
private int mMinTxSuccessWithoutRx;
private int mDataStallDurationMs;
- private int mDataStallTxTputThrMbps;
- private int mDataStallRxTputThrMbps;
+ private int mDataStallTxTputThrKbps;
+ private int mDataStallRxTputThrKbps;
private int mDataStallTxPerThr;
private int mDataStallCcaLevelThr;
private int mLastFrequency = -1;
@@ -156,12 +156,12 @@
boolean isTxTputLow = false;
boolean isRxTputLow = false;
if (txLinkSpeed > 0) {
- int txTput = txLinkSpeed * (100 - txPer) * (100 - ccaLevel);
- isTxTputLow = txTput < mDataStallTxTputThrMbps * 100 * 100;
+ int txTputKbps = txLinkSpeed * 1000 * (100 - txPer) * (100 - ccaLevel);
+ isTxTputLow = txTputKbps < mDataStallTxTputThrKbps * 100 * 100;
}
if (rxLinkSpeed > 0) {
- int rxTput = rxLinkSpeed * (100 - ccaLevel);
- isRxTputLow = rxTput < mDataStallRxTputThrMbps * 100;
+ int rxTputKbps = rxLinkSpeed * 1000 * (100 - ccaLevel);
+ isRxTputLow = rxTputKbps < mDataStallRxTputThrKbps * 100;
}
boolean dataStallTx = isTxTputLow || ccaLevel >= mDataStallCcaLevelThr
@@ -255,14 +255,14 @@
private void updateUsabilityDataCollectionFlags() {
mDataStallDurationMs = mDeviceConfigFacade.getDataStallDurationMs();
- mDataStallTxTputThrMbps = mDeviceConfigFacade.getDataStallTxTputThrMbps();
- mDataStallRxTputThrMbps = mDeviceConfigFacade.getDataStallRxTputThrMbps();
+ mDataStallTxTputThrKbps = mDeviceConfigFacade.getDataStallTxTputThrKbps();
+ mDataStallRxTputThrKbps = mDeviceConfigFacade.getDataStallRxTputThrKbps();
mDataStallTxPerThr = mDeviceConfigFacade.getDataStallTxPerThr();
mDataStallCcaLevelThr = mDeviceConfigFacade.getDataStallCcaLevelThr();
mWifiMetrics.setDataStallDurationMs(mDataStallDurationMs);
- mWifiMetrics.setDataStallTxTputThrMbps(mDataStallTxTputThrMbps);
- mWifiMetrics.setDataStallRxTputThrMbps(mDataStallRxTputThrMbps);
+ mWifiMetrics.setDataStallTxTputThrKbps(mDataStallTxTputThrKbps);
+ mWifiMetrics.setDataStallRxTputThrKbps(mDataStallRxTputThrKbps);
mWifiMetrics.setDataStallTxPerThr(mDataStallTxPerThr);
mWifiMetrics.setDataStallCcaLevelThr(mDataStallCcaLevelThr);
}
diff --git a/service/java/com/android/server/wifi/WifiMetrics.java b/service/java/com/android/server/wifi/WifiMetrics.java
index 1b7e8cd..54a0be6 100644
--- a/service/java/com/android/server/wifi/WifiMetrics.java
+++ b/service/java/com/android/server/wifi/WifiMetrics.java
@@ -2784,10 +2784,10 @@
+ mExperimentValues.linkSpeedCountsLoggingEnabled);
pw.println("mExperimentValues.dataStallDurationMs="
+ mExperimentValues.dataStallDurationMs);
- pw.println("mExperimentValues.dataStallTxTputThrMbps="
- + mExperimentValues.dataStallTxTputThrMbps);
- pw.println("mExperimentValues.dataStallRxTputThrMbps="
- + mExperimentValues.dataStallRxTputThrMbps);
+ pw.println("mExperimentValues.dataStallTxTputThrKbps="
+ + mExperimentValues.dataStallTxTputThrKbps);
+ pw.println("mExperimentValues.dataStallRxTputThrKbps="
+ + mExperimentValues.dataStallRxTputThrKbps);
pw.println("mExperimentValues.dataStallTxPerThr="
+ mExperimentValues.dataStallTxPerThr);
pw.println("mExperimentValues.dataStallCcaLevelThr="
@@ -5214,18 +5214,18 @@
/**
* Sets the threshold of Tx throughput below which to trigger a data stall
*/
- public void setDataStallTxTputThrMbps(int txTputThr) {
+ public void setDataStallTxTputThrKbps(int txTputThr) {
synchronized (mLock) {
- mExperimentValues.dataStallTxTputThrMbps = txTputThr;
+ mExperimentValues.dataStallTxTputThrKbps = txTputThr;
}
}
/**
* Sets the threshold of Rx throughput below which to trigger a data stall
*/
- public void setDataStallRxTputThrMbps(int rxTputThr) {
+ public void setDataStallRxTputThrKbps(int rxTputThr) {
synchronized (mLock) {
- mExperimentValues.dataStallRxTputThrMbps = rxTputThr;
+ mExperimentValues.dataStallRxTputThrKbps = rxTputThr;
}
}
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiDataStallTest.java b/tests/wifitests/src/com/android/server/wifi/WifiDataStallTest.java
index 71b6589..6ac1836 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiDataStallTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiDataStallTest.java
@@ -76,10 +76,10 @@
.thenReturn(WifiDataStall.MIN_TX_SUCCESS_WITHOUT_RX_DEFAULT);
when(mDeviceConfigFacade.getDataStallDurationMs()).thenReturn(
DeviceConfigFacade.DEFAULT_DATA_STALL_DURATION_MS);
- when(mDeviceConfigFacade.getDataStallTxTputThrMbps()).thenReturn(
- DeviceConfigFacade.DEFAULT_DATA_STALL_TX_TPUT_THR_MBPS);
- when(mDeviceConfigFacade.getDataStallRxTputThrMbps()).thenReturn(
- DeviceConfigFacade.DEFAULT_DATA_STALL_RX_TPUT_THR_MBPS);
+ when(mDeviceConfigFacade.getDataStallTxTputThrKbps()).thenReturn(
+ DeviceConfigFacade.DEFAULT_DATA_STALL_TX_TPUT_THR_KBPS);
+ when(mDeviceConfigFacade.getDataStallRxTputThrKbps()).thenReturn(
+ DeviceConfigFacade.DEFAULT_DATA_STALL_RX_TPUT_THR_KBPS);
when(mDeviceConfigFacade.getDataStallTxPerThr()).thenReturn(
DeviceConfigFacade.DEFAULT_DATA_STALL_TX_PER_THR);
when(mDeviceConfigFacade.getDataStallCcaLevelThr()).thenReturn(