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(