diff options
author | Chiachang Wang <chiachangwang@google.com> | 2019-12-03 09:49:53 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2019-12-03 09:49:53 +0000 |
commit | 0656b1be55e323126ab267fe4dcfdbc6fa03ab05 (patch) | |
tree | cd43725e0b48b717808b97d81a42723e4154f7e7 /src | |
parent | a3b1403404a731f11ba09976930402a951cb8e3e (diff) | |
parent | e797c9b2ae71b751cb2557987dff80788f928717 (diff) |
Merge "Allow to disable tcp detection via flag"
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/server/connectivity/NetworkMonitor.java | 47 |
1 files changed, 35 insertions, 12 deletions
diff --git a/src/com/android/server/connectivity/NetworkMonitor.java b/src/com/android/server/connectivity/NetworkMonitor.java index 3dfe004..ba881e4 100644 --- a/src/com/android/server/connectivity/NetworkMonitor.java +++ b/src/com/android/server/connectivity/NetworkMonitor.java @@ -144,6 +144,7 @@ import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Random; +import java.util.StringJoiner; import java.util.UUID; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -390,15 +391,15 @@ public class NetworkMonitor extends StateMachine { public NetworkMonitor(Context context, INetworkMonitorCallbacks cb, Network network, SharedLog validationLog) { this(context, cb, network, new IpConnectivityLog(), validationLog, - Dependencies.DEFAULT, new DataStallStatsUtils(), new TcpSocketTracker( - new TcpSocketTracker.Dependencies(context, - ShimUtils.isReleaseOrDevelopmentApiAbove(Build.VERSION_CODES.Q)))); + Dependencies.DEFAULT, new DataStallStatsUtils(), + getTcpSocketTrackerOrNull(context)); } @VisibleForTesting public NetworkMonitor(Context context, INetworkMonitorCallbacks cb, Network network, IpConnectivityLog logger, SharedLog validationLogs, - Dependencies deps, DataStallStatsUtils detectionStatsUtils, TcpSocketTracker tst) { + Dependencies deps, DataStallStatsUtils detectionStatsUtils, + @Nullable TcpSocketTracker tst) { // Add suffix indicating which NetworkMonitor we're talking about. super(TAG + "/" + network.toString()); @@ -758,8 +759,10 @@ public class NetworkMonitor extends StateMachine { } break; case EVENT_POLL_TCPINFO: + final TcpSocketTracker tst = getTcpSocketTracker(); + if (tst == null) break; // Transit if retrieve socket info is succeeded and suspected as a stall. - if (getTcpSocketTracker().pollSocketsInfo() && evaluateDataStall()) { + if (tst.pollSocketsInfo() && evaluateDataStall()) { transitionTo(mEvaluatingState); } else { sendTcpPollingEvent(); @@ -2114,6 +2117,7 @@ public class NetworkMonitor extends StateMachine { } @VisibleForTesting + @Nullable protected TcpSocketTracker getTcpSocketTracker() { return mTcpTracker; } @@ -2130,6 +2134,7 @@ public class NetworkMonitor extends StateMachine { @VisibleForTesting protected boolean isDataStall() { Boolean result = null; + final StringJoiner msg = VDBG_STALL ? new StringJoiner(", ") : null; // Reevaluation will generate traffic. Thus, set a minimal reevaluation timer to limit the // possible traffic cost in metered network. if (!mNetworkCapabilities.hasCapability(NET_CAPABILITY_NOT_METERED) @@ -2141,12 +2146,17 @@ public class NetworkMonitor extends StateMachine { // 1. TCP connection fail rate(lost+retrans) is higher than threshold. // 2. Accumulate enough packets count. // TODO: Need to filter per target network. - if (dataStallEvaluateTypeEnabled(DATA_STALL_EVALUATION_TYPE_TCP)) { - if (getTcpSocketTracker().getLatestReceivedCount() > 0) { + final TcpSocketTracker tst = getTcpSocketTracker(); + if (dataStallEvaluateTypeEnabled(DATA_STALL_EVALUATION_TYPE_TCP) && tst != null) { + if (tst.getLatestReceivedCount() > 0) { result = false; - } else if (getTcpSocketTracker().isDataStallSuspected()) { + } else if (tst.isDataStallSuspected()) { result = true; } + if (VDBG_STALL) { + msg.add("tcp packets received=" + tst.getLatestReceivedCount()) + .add("tcp fail rate=" + tst.getLatestPacketFailPercentage()); + } } // Check dns signal. Suspect it may be a data stall if both : @@ -2158,13 +2168,14 @@ public class NetworkMonitor extends StateMachine { result = true; logNetworkEvent(NetworkEvent.NETWORK_CONSECUTIVE_DNS_TIMEOUT_FOUND); } + if (VDBG_STALL) { + msg.add("consecutive dns timeout count=" + + mDnsStallDetector.getConsecutiveTimeoutCount()); + } } if (VDBG_STALL) { - log("isDataStall: result=" + result + ", consecutive dns timeout count=" - + mDnsStallDetector.getConsecutiveTimeoutCount() - + ", tcp packets received=" + getTcpSocketTracker().getLatestReceivedCount() - + ", tcp fail rate=" + getTcpSocketTracker().getLatestPacketFailPercentage()); + log("isDataStall: result=" + result + ", " + msg); } return (result == null) ? false : result; @@ -2298,4 +2309,16 @@ public class NetworkMonitor extends StateMachine { */ void log(String s); } + + @Nullable + private static TcpSocketTracker getTcpSocketTrackerOrNull(Context context) { + return ((Dependencies.DEFAULT.getDeviceConfigPropertyInt( + NAMESPACE_CONNECTIVITY, + CONFIG_DATA_STALL_EVALUATION_TYPE, + DEFAULT_DATA_STALL_EVALUATION_TYPES) + & DATA_STALL_EVALUATION_TYPE_TCP) != 0) + ? new TcpSocketTracker(new TcpSocketTracker.Dependencies(context, + ShimUtils.isReleaseOrDevelopmentApiAbove(Build.VERSION_CODES.Q))) + : null; + } } |