summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2017-08-02 22:09:09 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2017-08-02 22:09:09 +0000
commitd4bbe1d2b40990f7281cbf038ecf3052f1821bc4 (patch)
treefca83dcd25898efb74d5228be51bfddf267b916c /service
parent29702d5f6bf0b83837778377f765d393bdfcf5c1 (diff)
parent3cf27a7144be15b7ca400412e4f1bc31daa8be13 (diff)
Merge "Stay on network during ongoing traffic" into oc-dr1-dev
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkSelector.java38
1 files changed, 21 insertions, 17 deletions
diff --git a/service/java/com/android/server/wifi/WifiNetworkSelector.java b/service/java/com/android/server/wifi/WifiNetworkSelector.java
index 4c1df200a..57779ad08 100644
--- a/service/java/com/android/server/wifi/WifiNetworkSelector.java
+++ b/service/java/com/android/server/wifi/WifiNetworkSelector.java
@@ -25,7 +25,6 @@ import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.text.TextUtils;
import android.util.LocalLog;
-import android.util.Log;
import android.util.Pair;
import com.android.internal.R;
@@ -62,6 +61,8 @@ public class WifiNetworkSelector {
private final int mThresholdQualifiedRssi5;
private final int mThresholdMinimumRssi24;
private final int mThresholdMinimumRssi5;
+ private final int mStayOnNetworkMinimumTxRate;
+ private final int mStayOnNetworkMinimumRxRate;
private final boolean mEnableAutoJoinWhenAssociated;
/**
@@ -147,6 +148,18 @@ public class WifiNetworkSelector {
+ " , ID: " + network.networkId);
}
+ int currentRssi = wifiInfo.getRssi();
+ boolean hasQualifiedRssi =
+ (wifiInfo.is24GHz() && (currentRssi > mThresholdQualifiedRssi24))
+ || (wifiInfo.is5GHz() && (currentRssi > mThresholdQualifiedRssi5));
+ // getTxSuccessRate() and getRxSuccessRate() returns the packet rate in per 5 seconds unit.
+ boolean hasActiveStream = (wifiInfo.getTxSuccessRatePps() > mStayOnNetworkMinimumTxRate)
+ || (wifiInfo.getRxSuccessRatePps() > mStayOnNetworkMinimumRxRate);
+ if (hasQualifiedRssi && hasActiveStream) {
+ localLog("Stay on current network because of good RSSI and ongoing traffic");
+ return true;
+ }
+
// Ephemeral network is not qualified.
if (network.ephemeral) {
localLog("Current network is an ephemeral one.");
@@ -159,28 +172,15 @@ public class WifiNetworkSelector {
return false;
}
- int currentRssi = wifiInfo.getRssi();
if (wifiInfo.is24GHz()) {
// 2.4GHz networks is not qualified whenever 5GHz is available
if (is5GHzNetworkAvailable(scanDetails)) {
localLog("Current network is 2.4GHz. 5GHz networks available.");
return false;
}
- // When 5GHz is not available, we go through normal 2.4GHz qualification
- if (currentRssi < mThresholdQualifiedRssi24) {
- localLog("Current network band=2.4GHz, RSSI["
- + currentRssi + "]-acceptable but not qualified.");
- return false;
- }
- } else if (wifiInfo.is5GHz()) {
- // Must be 5GHz, so we always apply qualification checks
- if (currentRssi < mThresholdQualifiedRssi5) {
- localLog("Current network band=5GHz, RSSI["
- + currentRssi + "]-acceptable but not qualified.");
- return false;
- }
- } else {
- Log.e(TAG, "We're on a wifi network that's neither 2.4 or 5GHz... aliens!");
+ }
+ if (!hasQualifiedRssi) {
+ localLog("Current network RSSI[" + currentRssi + "]-acceptable but not qualified.");
return false;
}
@@ -579,5 +579,9 @@ public class WifiNetworkSelector {
R.integer.config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz);
mEnableAutoJoinWhenAssociated = context.getResources().getBoolean(
R.bool.config_wifi_framework_enable_associated_network_selection);
+ mStayOnNetworkMinimumTxRate = context.getResources().getInteger(
+ R.integer.config_wifi_framework_min_tx_rate_for_staying_on_network);
+ mStayOnNetworkMinimumRxRate = context.getResources().getInteger(
+ R.integer.config_wifi_framework_min_rx_rate_for_staying_on_network);
}
}