From 389a81485e62531dcd64ea8df4e5d056f50f0ded Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Wed, 24 Jan 2018 17:35:07 +0900 Subject: [PATCH] Determine the multipath hint from data usage. Bug: 35142602 Test: builds, boots Change-Id: I0f5de5e313ead442aa210f163db035fcf7de5e73 --- .../com/android/server/ConnectivityService.java | 15 +++++++++++++++ .../net/util/MultinetworkPolicyTracker.java | 1 + 2 files changed, 16 insertions(+) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index c1f4b789e0..c68837ae8f 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -137,6 +137,7 @@ import com.android.server.connectivity.IpConnectivityMetrics; import com.android.server.connectivity.KeepaliveTracker; import com.android.server.connectivity.LingerMonitor; import com.android.server.connectivity.MockableSystemProperties; +import com.android.server.connectivity.MultipathPolicyTracker; import com.android.server.connectivity.NetworkAgentInfo; import com.android.server.connectivity.NetworkDiagnostics; import com.android.server.connectivity.NetworkMonitor; @@ -507,6 +508,9 @@ public class ConnectivityService extends IConnectivityManager.Stub @VisibleForTesting final MultinetworkPolicyTracker mMultinetworkPolicyTracker; + @VisibleForTesting + final MultipathPolicyTracker mMultipathPolicyTracker; + /** * Implements support for the legacy "one network per network type" model. * @@ -890,6 +894,8 @@ public class ConnectivityService extends IConnectivityManager.Stub mContext, mHandler, () -> rematchForAvoidBadWifiUpdate()); mMultinetworkPolicyTracker.start(); + mMultipathPolicyTracker = new MultipathPolicyTracker(mContext, mHandler); + mDnsManager = new DnsManager(mContext, mNetd, mSystemProperties); registerPrivateDnsSettingsCallbacks(); } @@ -1966,6 +1972,9 @@ public class ConnectivityService extends IConnectivityManager.Stub pw.println(); dumpAvoidBadWifiSettings(pw); + pw.println(); + mMultipathPolicyTracker.dump(pw); + if (argsContain(args, SHORT_ARG) == false) { pw.println(); synchronized (mValidationLogs) { @@ -2901,6 +2910,11 @@ public class ConnectivityService extends IConnectivityManager.Stub return ConnectivityManager.MULTIPATH_PREFERENCE_UNMETERED; } + Integer networkPreference = mMultipathPolicyTracker.getMultipathPreference(network); + if (networkPreference != null) { + return networkPreference; + } + return mMultinetworkPolicyTracker.getMeteredMultipathPreference(); } @@ -2994,6 +3008,7 @@ public class ConnectivityService extends IConnectivityManager.Stub for (NetworkAgentInfo nai : mNetworkAgentInfos.values()) { nai.networkMonitor.systemReady = true; } + mMultipathPolicyTracker.start(); break; } case EVENT_REVALIDATE_NETWORK: { diff --git a/services/net/java/android/net/util/MultinetworkPolicyTracker.java b/services/net/java/android/net/util/MultinetworkPolicyTracker.java index 424e40d209..30c5cd98b7 100644 --- a/services/net/java/android/net/util/MultinetworkPolicyTracker.java +++ b/services/net/java/android/net/util/MultinetworkPolicyTracker.java @@ -122,6 +122,7 @@ public class MultinetworkPolicyTracker { return mAvoidBadWifi; } + // TODO: move this to MultipathPolicyTracker. public int getMeteredMultipathPreference() { return mMeteredMultipathPreference; }