diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2017-08-02 22:09:09 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-08-02 22:09:09 +0000 |
commit | d4bbe1d2b40990f7281cbf038ecf3052f1821bc4 (patch) | |
tree | fca83dcd25898efb74d5228be51bfddf267b916c /service | |
parent | 29702d5f6bf0b83837778377f765d393bdfcf5c1 (diff) | |
parent | 3cf27a7144be15b7ca400412e4f1bc31daa8be13 (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.java | 38 |
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); } } |