Merge changes I3eb82680,I9d6147d9 am: bbd9fb5c27
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1547644 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I8d65a0465729426fb038004cd80a15ca9e438b0e
This commit is contained in:
@@ -19,6 +19,9 @@ package android.net;
|
|||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.net.ConnectivityMetricsEvent;
|
import android.net.ConnectivityMetricsEvent;
|
||||||
import android.net.INetdEventCallback;
|
import android.net.INetdEventCallback;
|
||||||
|
import android.net.LinkProperties;
|
||||||
|
import android.net.Network;
|
||||||
|
import android.net.NetworkCapabilities;
|
||||||
|
|
||||||
/** {@hide} */
|
/** {@hide} */
|
||||||
interface IIpConnectivityMetrics {
|
interface IIpConnectivityMetrics {
|
||||||
@@ -29,6 +32,11 @@ interface IIpConnectivityMetrics {
|
|||||||
*/
|
*/
|
||||||
int logEvent(in ConnectivityMetricsEvent event);
|
int logEvent(in ConnectivityMetricsEvent event);
|
||||||
|
|
||||||
|
void logDefaultNetworkValidity(boolean valid);
|
||||||
|
void logDefaultNetworkEvent(in Network defaultNetwork, int score, boolean validated,
|
||||||
|
in LinkProperties lp, in NetworkCapabilities nc, in Network previousDefaultNetwork,
|
||||||
|
int previousScore, in LinkProperties previousLp, in NetworkCapabilities previousNc);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback can be registered by DevicePolicyManager or NetworkWatchlistService only.
|
* Callback can be registered by DevicePolicyManager or NetworkWatchlistService only.
|
||||||
* @return status {@code true} if registering/unregistering of the callback was successful,
|
* @return status {@code true} if registering/unregistering of the callback was successful,
|
||||||
|
|||||||
@@ -17,10 +17,13 @@
|
|||||||
package android.net.metrics;
|
package android.net.metrics;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
|
import android.annotation.Nullable;
|
||||||
import android.annotation.SystemApi;
|
import android.annotation.SystemApi;
|
||||||
import android.net.ConnectivityMetricsEvent;
|
import android.net.ConnectivityMetricsEvent;
|
||||||
import android.net.IIpConnectivityMetrics;
|
import android.net.IIpConnectivityMetrics;
|
||||||
|
import android.net.LinkProperties;
|
||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
|
import android.net.NetworkCapabilities;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
import android.os.ServiceManager;
|
||||||
@@ -66,6 +69,9 @@ public class IpConnectivityLog {
|
|||||||
final IIpConnectivityMetrics service =
|
final IIpConnectivityMetrics service =
|
||||||
IIpConnectivityMetrics.Stub.asInterface(ServiceManager.getService(SERVICE_NAME));
|
IIpConnectivityMetrics.Stub.asInterface(ServiceManager.getService(SERVICE_NAME));
|
||||||
if (service == null) {
|
if (service == null) {
|
||||||
|
if (DBG) {
|
||||||
|
Log.d(TAG, SERVICE_NAME + " service was not ready");
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Two threads racing here will write the same pointer because getService
|
// Two threads racing here will write the same pointer because getService
|
||||||
@@ -83,9 +89,6 @@ public class IpConnectivityLog {
|
|||||||
*/
|
*/
|
||||||
public boolean log(@NonNull ConnectivityMetricsEvent ev) {
|
public boolean log(@NonNull ConnectivityMetricsEvent ev) {
|
||||||
if (!checkLoggerService()) {
|
if (!checkLoggerService()) {
|
||||||
if (DBG) {
|
|
||||||
Log.d(TAG, SERVICE_NAME + " service was not ready");
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (ev.timestamp == 0) {
|
if (ev.timestamp == 0) {
|
||||||
@@ -161,6 +164,56 @@ public class IpConnectivityLog {
|
|||||||
return log(makeEv(data));
|
return log(makeEv(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs the validation status of the default network.
|
||||||
|
* @param valid whether the current default network was validated (i.e., whether it had
|
||||||
|
* {@link NetworkCapabilities.NET_CAPABILITY_VALIDATED}
|
||||||
|
* @return true if the event was successfully logged.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public boolean logDefaultNetworkValidity(boolean valid) {
|
||||||
|
if (!checkLoggerService()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
mService.logDefaultNetworkValidity(valid);
|
||||||
|
} catch (RemoteException ignored) {
|
||||||
|
// Only called within the system server.
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs a change in the default network.
|
||||||
|
*
|
||||||
|
* @param defaultNetwork the current default network
|
||||||
|
* @param score the current score of {@code defaultNetwork}
|
||||||
|
* @param lp the {@link LinkProperties} of {@code defaultNetwork}
|
||||||
|
* @param nc the {@link NetworkCapabilities} of the {@code defaultNetwork}
|
||||||
|
* @param validated whether {@code defaultNetwork} network is validated
|
||||||
|
* @param previousDefaultNetwork the previous default network
|
||||||
|
* @param previousScore the score of {@code previousDefaultNetwork}
|
||||||
|
* @param previousLp the {@link LinkProperties} of {@code previousDefaultNetwork}
|
||||||
|
* @param previousNc the {@link NetworkCapabilities} of {@code previousDefaultNetwork}
|
||||||
|
* @return true if the event was successfully logged.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public boolean logDefaultNetworkEvent(@Nullable Network defaultNetwork, int score,
|
||||||
|
boolean validated, @Nullable LinkProperties lp, @Nullable NetworkCapabilities nc,
|
||||||
|
@Nullable Network previousDefaultNetwork, int previousScore,
|
||||||
|
@Nullable LinkProperties previousLp, @Nullable NetworkCapabilities previousNc) {
|
||||||
|
if (!checkLoggerService()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
mService.logDefaultNetworkEvent(defaultNetwork, score, validated, lp, nc,
|
||||||
|
previousDefaultNetwork, previousScore, previousLp, previousNc);
|
||||||
|
} catch (RemoteException ignored) {
|
||||||
|
// Only called within the system server.
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private static ConnectivityMetricsEvent makeEv(Event data) {
|
private static ConnectivityMetricsEvent makeEv(Event data) {
|
||||||
ConnectivityMetricsEvent ev = new ConnectivityMetricsEvent();
|
ConnectivityMetricsEvent ev = new ConnectivityMetricsEvent();
|
||||||
ev.data = data;
|
ev.data = data;
|
||||||
|
|||||||
@@ -189,15 +189,11 @@ filegroup {
|
|||||||
"java/com/android/server/connectivity/AutodestructReference.java",
|
"java/com/android/server/connectivity/AutodestructReference.java",
|
||||||
"java/com/android/server/connectivity/ConnectivityConstants.java",
|
"java/com/android/server/connectivity/ConnectivityConstants.java",
|
||||||
"java/com/android/server/connectivity/DataConnectionStats.java",
|
"java/com/android/server/connectivity/DataConnectionStats.java",
|
||||||
"java/com/android/server/connectivity/DefaultNetworkMetrics.java",
|
|
||||||
"java/com/android/server/connectivity/DnsManager.java",
|
"java/com/android/server/connectivity/DnsManager.java",
|
||||||
"java/com/android/server/connectivity/IpConnectivityEventBuilder.java",
|
|
||||||
"java/com/android/server/connectivity/IpConnectivityMetrics.java",
|
|
||||||
"java/com/android/server/connectivity/KeepaliveTracker.java",
|
"java/com/android/server/connectivity/KeepaliveTracker.java",
|
||||||
"java/com/android/server/connectivity/LingerMonitor.java",
|
"java/com/android/server/connectivity/LingerMonitor.java",
|
||||||
"java/com/android/server/connectivity/MockableSystemProperties.java",
|
"java/com/android/server/connectivity/MockableSystemProperties.java",
|
||||||
"java/com/android/server/connectivity/Nat464Xlat.java",
|
"java/com/android/server/connectivity/Nat464Xlat.java",
|
||||||
"java/com/android/server/connectivity/NetdEventListenerService.java",
|
|
||||||
"java/com/android/server/connectivity/NetworkAgentInfo.java",
|
"java/com/android/server/connectivity/NetworkAgentInfo.java",
|
||||||
"java/com/android/server/connectivity/NetworkDiagnostics.java",
|
"java/com/android/server/connectivity/NetworkDiagnostics.java",
|
||||||
"java/com/android/server/connectivity/NetworkNotificationManager.java",
|
"java/com/android/server/connectivity/NetworkNotificationManager.java",
|
||||||
|
|||||||
@@ -89,7 +89,6 @@ import android.net.ICaptivePortal;
|
|||||||
import android.net.IConnectivityDiagnosticsCallback;
|
import android.net.IConnectivityDiagnosticsCallback;
|
||||||
import android.net.IConnectivityManager;
|
import android.net.IConnectivityManager;
|
||||||
import android.net.IDnsResolver;
|
import android.net.IDnsResolver;
|
||||||
import android.net.IIpConnectivityMetrics;
|
|
||||||
import android.net.INetd;
|
import android.net.INetd;
|
||||||
import android.net.INetworkManagementEventObserver;
|
import android.net.INetworkManagementEventObserver;
|
||||||
import android.net.INetworkMonitor;
|
import android.net.INetworkMonitor;
|
||||||
@@ -156,7 +155,6 @@ import android.os.PersistableBundle;
|
|||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.os.ServiceSpecificException;
|
import android.os.ServiceSpecificException;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.os.SystemProperties;
|
import android.os.SystemProperties;
|
||||||
@@ -929,14 +927,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
"no IpConnectivityMetrics service");
|
"no IpConnectivityMetrics service");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @see IpConnectivityMetrics
|
|
||||||
*/
|
|
||||||
public IIpConnectivityMetrics getIpConnectivityMetrics() {
|
|
||||||
return IIpConnectivityMetrics.Stub.asInterface(
|
|
||||||
ServiceManager.getService(IpConnectivityLog.SERVICE_NAME));
|
|
||||||
}
|
|
||||||
|
|
||||||
public IBatteryStats getBatteryStatsService() {
|
public IBatteryStats getBatteryStatsService() {
|
||||||
return BatteryStatsService.getService();
|
return BatteryStatsService.getService();
|
||||||
}
|
}
|
||||||
@@ -3009,9 +2999,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
}
|
}
|
||||||
if (valid != nai.lastValidated) {
|
if (valid != nai.lastValidated) {
|
||||||
if (wasDefault) {
|
if (wasDefault) {
|
||||||
mDeps.getMetricsLogger()
|
mMetricsLog.logDefaultNetworkValidity(valid);
|
||||||
.defaultNetworkMetrics().logDefaultNetworkValidity(
|
|
||||||
SystemClock.elapsedRealtime(), valid);
|
|
||||||
}
|
}
|
||||||
final int oldScore = nai.getCurrentScore();
|
final int oldScore = nai.getCurrentScore();
|
||||||
nai.lastValidated = valid;
|
nai.lastValidated = valid;
|
||||||
@@ -3439,7 +3427,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
// if there is a fallback. Taken together, the two form a X -> 0, 0 -> Y sequence
|
// if there is a fallback. Taken together, the two form a X -> 0, 0 -> Y sequence
|
||||||
// whose timestamps tell how long it takes to recover a default network.
|
// whose timestamps tell how long it takes to recover a default network.
|
||||||
long now = SystemClock.elapsedRealtime();
|
long now = SystemClock.elapsedRealtime();
|
||||||
mDeps.getMetricsLogger().defaultNetworkMetrics().logDefaultNetworkEvent(now, null, nai);
|
mMetricsLog.logDefaultNetworkEvent(null, 0, false,
|
||||||
|
null /* lp */, null /* nc */, nai.network, nai.getCurrentScore(),
|
||||||
|
nai.linkProperties, nai.networkCapabilities);
|
||||||
}
|
}
|
||||||
notifyIfacesChangedForNetworkStats();
|
notifyIfacesChangedForNetworkStats();
|
||||||
// TODO - we shouldn't send CALLBACK_LOST to requests that can be satisfied
|
// TODO - we shouldn't send CALLBACK_LOST to requests that can be satisfied
|
||||||
@@ -7238,9 +7228,28 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
updateDataActivityTracking(newDefaultNetwork, oldDefaultNetwork);
|
updateDataActivityTracking(newDefaultNetwork, oldDefaultNetwork);
|
||||||
// Notify system services of the new default.
|
// Notify system services of the new default.
|
||||||
makeDefault(newDefaultNetwork);
|
makeDefault(newDefaultNetwork);
|
||||||
|
|
||||||
// Log 0 -> X and Y -> X default network transitions, where X is the new default.
|
// Log 0 -> X and Y -> X default network transitions, where X is the new default.
|
||||||
mDeps.getMetricsLogger().defaultNetworkMetrics().logDefaultNetworkEvent(
|
final Network network = (newDefaultNetwork != null) ? newDefaultNetwork.network : null;
|
||||||
now, newDefaultNetwork, oldDefaultNetwork);
|
final int score = (newDefaultNetwork != null) ? newDefaultNetwork.getCurrentScore() : 0;
|
||||||
|
final boolean validated = newDefaultNetwork != null && newDefaultNetwork.lastValidated;
|
||||||
|
final LinkProperties lp = (newDefaultNetwork != null)
|
||||||
|
? newDefaultNetwork.linkProperties : null;
|
||||||
|
final NetworkCapabilities nc = (newDefaultNetwork != null)
|
||||||
|
? newDefaultNetwork.networkCapabilities : null;
|
||||||
|
|
||||||
|
final Network prevNetwork = (oldDefaultNetwork != null)
|
||||||
|
? oldDefaultNetwork.network : null;
|
||||||
|
final int prevScore = (oldDefaultNetwork != null)
|
||||||
|
? oldDefaultNetwork.getCurrentScore() : 0;
|
||||||
|
final LinkProperties prevLp = (oldDefaultNetwork != null)
|
||||||
|
? oldDefaultNetwork.linkProperties : null;
|
||||||
|
final NetworkCapabilities prevNc = (oldDefaultNetwork != null)
|
||||||
|
? oldDefaultNetwork.networkCapabilities : null;
|
||||||
|
|
||||||
|
mMetricsLog.logDefaultNetworkEvent(network, score, validated, lp, nc,
|
||||||
|
prevNetwork, prevScore, prevLp, prevNc);
|
||||||
|
|
||||||
// Have a new default network, release the transition wakelock in
|
// Have a new default network, release the transition wakelock in
|
||||||
scheduleReleaseNetworkTransitionWakelock();
|
scheduleReleaseNetworkTransitionWakelock();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
package com.android.server.connectivity;
|
package com.android.server.connectivity;
|
||||||
|
|
||||||
import android.net.LinkProperties;
|
import android.net.LinkProperties;
|
||||||
|
import android.net.Network;
|
||||||
|
import android.net.NetworkCapabilities;
|
||||||
import android.net.metrics.DefaultNetworkEvent;
|
import android.net.metrics.DefaultNetworkEvent;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
|
|
||||||
@@ -61,7 +63,7 @@ public class DefaultNetworkMetrics {
|
|||||||
private int mLastTransports;
|
private int mLastTransports;
|
||||||
|
|
||||||
public DefaultNetworkMetrics() {
|
public DefaultNetworkMetrics() {
|
||||||
newDefaultNetwork(creationTimeMs, null);
|
newDefaultNetwork(creationTimeMs, null, 0, false, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void listEvents(PrintWriter pw) {
|
public synchronized void listEvents(PrintWriter pw) {
|
||||||
@@ -117,13 +119,21 @@ public class DefaultNetworkMetrics {
|
|||||||
mCurrentDefaultNetwork.validatedMs += timeMs - mLastValidationTimeMs;
|
mCurrentDefaultNetwork.validatedMs += timeMs - mLastValidationTimeMs;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void logDefaultNetworkEvent(
|
/**
|
||||||
long timeMs, NetworkAgentInfo newNai, NetworkAgentInfo oldNai) {
|
* Logs a default network event.
|
||||||
logCurrentDefaultNetwork(timeMs, oldNai);
|
* @see {IpConnectivityLog#logDefaultNetworkEvent}.
|
||||||
newDefaultNetwork(timeMs, newNai);
|
*/
|
||||||
|
public synchronized void logDefaultNetworkEvent(long timeMs, Network defaultNetwork, int score,
|
||||||
|
boolean validated, LinkProperties lp, NetworkCapabilities nc,
|
||||||
|
Network previousDefaultNetwork, int previousScore, LinkProperties previousLp,
|
||||||
|
NetworkCapabilities previousNc) {
|
||||||
|
logCurrentDefaultNetwork(timeMs, previousDefaultNetwork, previousScore, previousLp,
|
||||||
|
previousNc);
|
||||||
|
newDefaultNetwork(timeMs, defaultNetwork, score, validated, lp, nc);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void logCurrentDefaultNetwork(long timeMs, NetworkAgentInfo oldNai) {
|
private void logCurrentDefaultNetwork(long timeMs, Network network, int score,
|
||||||
|
LinkProperties lp, NetworkCapabilities nc) {
|
||||||
if (mIsCurrentlyValid) {
|
if (mIsCurrentlyValid) {
|
||||||
updateValidationTime(timeMs);
|
updateValidationTime(timeMs);
|
||||||
}
|
}
|
||||||
@@ -131,10 +141,10 @@ public class DefaultNetworkMetrics {
|
|||||||
ev.updateDuration(timeMs);
|
ev.updateDuration(timeMs);
|
||||||
ev.previousTransports = mLastTransports;
|
ev.previousTransports = mLastTransports;
|
||||||
// oldNai is null if the system had no default network before the transition.
|
// oldNai is null if the system had no default network before the transition.
|
||||||
if (oldNai != null) {
|
if (network != null) {
|
||||||
// The system acquired a new default network.
|
// The system acquired a new default network.
|
||||||
fillLinkInfo(ev, oldNai);
|
fillLinkInfo(ev, network, lp, nc);
|
||||||
ev.finalScore = oldNai.getCurrentScore();
|
ev.finalScore = score;
|
||||||
}
|
}
|
||||||
// Only change transport of the previous default network if the event currently logged
|
// Only change transport of the previous default network if the event currently logged
|
||||||
// corresponds to an existing default network, and not to the absence of a default network.
|
// corresponds to an existing default network, and not to the absence of a default network.
|
||||||
@@ -147,14 +157,15 @@ public class DefaultNetworkMetrics {
|
|||||||
mEventsLog.append(ev);
|
mEventsLog.append(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void newDefaultNetwork(long timeMs, NetworkAgentInfo newNai) {
|
private void newDefaultNetwork(long timeMs, Network network, int score, boolean validated,
|
||||||
|
LinkProperties lp, NetworkCapabilities nc) {
|
||||||
DefaultNetworkEvent ev = new DefaultNetworkEvent(timeMs);
|
DefaultNetworkEvent ev = new DefaultNetworkEvent(timeMs);
|
||||||
ev.durationMs = timeMs;
|
ev.durationMs = timeMs;
|
||||||
// newNai is null if the system has no default network after the transition.
|
// newNai is null if the system has no default network after the transition.
|
||||||
if (newNai != null) {
|
if (network != null) {
|
||||||
fillLinkInfo(ev, newNai);
|
fillLinkInfo(ev, network, lp, nc);
|
||||||
ev.initialScore = newNai.getCurrentScore();
|
ev.initialScore = score;
|
||||||
if (newNai.lastValidated) {
|
if (validated) {
|
||||||
mIsCurrentlyValid = true;
|
mIsCurrentlyValid = true;
|
||||||
mLastValidationTimeMs = timeMs;
|
mLastValidationTimeMs = timeMs;
|
||||||
}
|
}
|
||||||
@@ -164,10 +175,10 @@ public class DefaultNetworkMetrics {
|
|||||||
mCurrentDefaultNetwork = ev;
|
mCurrentDefaultNetwork = ev;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void fillLinkInfo(DefaultNetworkEvent ev, NetworkAgentInfo nai) {
|
private static void fillLinkInfo(DefaultNetworkEvent ev, Network network, LinkProperties lp,
|
||||||
LinkProperties lp = nai.linkProperties;
|
NetworkCapabilities nc) {
|
||||||
ev.netId = nai.network().getNetId();
|
ev.netId = network.getNetId();
|
||||||
ev.transports |= BitUtils.packBits(nai.networkCapabilities.getTransportTypes());
|
ev.transports |= BitUtils.packBits(nc.getTransportTypes());
|
||||||
ev.ipv4 |= lp.hasIpv4Address() && lp.hasIpv4DefaultRoute();
|
ev.ipv4 |= lp.hasIpv4Address() && lp.hasIpv4DefaultRoute();
|
||||||
ev.ipv6 |= lp.hasGlobalIpv6Address() && lp.hasIpv6DefaultRoute();
|
ev.ipv6 |= lp.hasGlobalIpv6Address() && lp.hasIpv6DefaultRoute();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,11 +20,15 @@ import android.content.Context;
|
|||||||
import android.net.ConnectivityMetricsEvent;
|
import android.net.ConnectivityMetricsEvent;
|
||||||
import android.net.IIpConnectivityMetrics;
|
import android.net.IIpConnectivityMetrics;
|
||||||
import android.net.INetdEventCallback;
|
import android.net.INetdEventCallback;
|
||||||
|
import android.net.LinkProperties;
|
||||||
|
import android.net.Network;
|
||||||
|
import android.net.NetworkCapabilities;
|
||||||
import android.net.NetworkStack;
|
import android.net.NetworkStack;
|
||||||
import android.net.metrics.ApfProgramEvent;
|
import android.net.metrics.ApfProgramEvent;
|
||||||
import android.net.metrics.IpConnectivityLog;
|
import android.net.metrics.IpConnectivityLog;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
|
import android.os.SystemClock;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
@@ -122,8 +126,6 @@ final public class IpConnectivityMetrics extends SystemService {
|
|||||||
|
|
||||||
public IpConnectivityMetrics(Context ctx, ToIntFunction<Context> capacityGetter) {
|
public IpConnectivityMetrics(Context ctx, ToIntFunction<Context> capacityGetter) {
|
||||||
super(ctx);
|
super(ctx);
|
||||||
// Load JNI libraries used by the IpConnectivityMetrics service and its dependencies
|
|
||||||
System.loadLibrary("service-connectivity");
|
|
||||||
mCapacityGetter = capacityGetter;
|
mCapacityGetter = capacityGetter;
|
||||||
initBuffer();
|
initBuffer();
|
||||||
}
|
}
|
||||||
@@ -363,6 +365,21 @@ final public class IpConnectivityMetrics extends SystemService {
|
|||||||
}
|
}
|
||||||
return mNetdListener.removeNetdEventCallback(callerType);
|
return mNetdListener.removeNetdEventCallback(callerType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void logDefaultNetworkValidity(boolean valid) {
|
||||||
|
mDefaultNetworkMetrics.logDefaultNetworkValidity(SystemClock.elapsedRealtime(), valid);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void logDefaultNetworkEvent(Network defaultNetwork, int score, boolean validated,
|
||||||
|
LinkProperties lp, NetworkCapabilities nc, Network previousDefaultNetwork,
|
||||||
|
int previousScore, LinkProperties previousLp, NetworkCapabilities previousNc) {
|
||||||
|
final long timeMs = SystemClock.elapsedRealtime();
|
||||||
|
mDefaultNetworkMetrics.logDefaultNetworkEvent(timeMs, defaultNetwork, score, validated,
|
||||||
|
lp, nc, previousDefaultNetwork, previousScore, previousLp, previousNc);
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
private static final ToIntFunction<Context> READ_BUFFER_SIZE = (ctx) -> {
|
private static final ToIntFunction<Context> READ_BUFFER_SIZE = (ctx) -> {
|
||||||
|
|||||||
@@ -1222,8 +1222,7 @@ public final class SystemServer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
t.traceBegin("IpConnectivityMetrics");
|
t.traceBegin("IpConnectivityMetrics");
|
||||||
mSystemServiceManager.startServiceFromJar(IP_CONNECTIVITY_METRICS_CLASS,
|
mSystemServiceManager.startService(IP_CONNECTIVITY_METRICS_CLASS);
|
||||||
CONNECTIVITY_SERVICE_APEX_PATH);
|
|
||||||
t.traceEnd();
|
t.traceEnd();
|
||||||
|
|
||||||
t.traceBegin("NetworkWatchlistService");
|
t.traceBegin("NetworkWatchlistService");
|
||||||
|
|||||||
@@ -24,6 +24,9 @@ import static org.junit.Assert.fail;
|
|||||||
import android.net.ConnectivityMetricsEvent;
|
import android.net.ConnectivityMetricsEvent;
|
||||||
import android.net.IIpConnectivityMetrics;
|
import android.net.IIpConnectivityMetrics;
|
||||||
import android.net.INetdEventCallback;
|
import android.net.INetdEventCallback;
|
||||||
|
import android.net.LinkProperties;
|
||||||
|
import android.net.Network;
|
||||||
|
import android.net.NetworkCapabilities;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
@@ -106,6 +109,16 @@ public class NetworkWatchlistServiceTests {
|
|||||||
counter--;
|
counter--;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: mark @Override when aosp/1541935 automerges to master.
|
||||||
|
public void logDefaultNetworkValidity(boolean valid) {
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: mark @Override when aosp/1541935 automerges to master.
|
||||||
|
public void logDefaultNetworkEvent(Network defaultNetwork, int score, boolean validated,
|
||||||
|
LinkProperties lp, NetworkCapabilities nc, Network previousDefaultNetwork,
|
||||||
|
int previousScore, LinkProperties previousLp, NetworkCapabilities previousNc) {
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
ServiceThread mHandlerThread;
|
ServiceThread mHandlerThread;
|
||||||
|
|||||||
@@ -161,7 +161,6 @@ import android.net.DataStallReportParcelable;
|
|||||||
import android.net.EthernetManager;
|
import android.net.EthernetManager;
|
||||||
import android.net.IConnectivityDiagnosticsCallback;
|
import android.net.IConnectivityDiagnosticsCallback;
|
||||||
import android.net.IDnsResolver;
|
import android.net.IDnsResolver;
|
||||||
import android.net.IIpConnectivityMetrics;
|
|
||||||
import android.net.INetd;
|
import android.net.INetd;
|
||||||
import android.net.INetworkMonitor;
|
import android.net.INetworkMonitor;
|
||||||
import android.net.INetworkMonitorCallbacks;
|
import android.net.INetworkMonitorCallbacks;
|
||||||
@@ -359,7 +358,6 @@ public class ConnectivityServiceTest {
|
|||||||
private HandlerThread mAlarmManagerThread;
|
private HandlerThread mAlarmManagerThread;
|
||||||
private TestNetIdManager mNetIdManager;
|
private TestNetIdManager mNetIdManager;
|
||||||
|
|
||||||
@Mock IIpConnectivityMetrics mIpConnectivityMetrics;
|
|
||||||
@Mock IpConnectivityMetrics.Logger mMetricsService;
|
@Mock IpConnectivityMetrics.Logger mMetricsService;
|
||||||
@Mock DefaultNetworkMetrics mDefaultNetworkMetrics;
|
@Mock DefaultNetworkMetrics mDefaultNetworkMetrics;
|
||||||
@Mock DeviceIdleInternal mDeviceIdleInternal;
|
@Mock DeviceIdleInternal mDeviceIdleInternal;
|
||||||
@@ -1373,7 +1371,6 @@ public class ConnectivityServiceTest {
|
|||||||
doReturn(mock(ProxyTracker.class)).when(deps).makeProxyTracker(any(), any());
|
doReturn(mock(ProxyTracker.class)).when(deps).makeProxyTracker(any(), any());
|
||||||
doReturn(mMetricsService).when(deps).getMetricsLogger();
|
doReturn(mMetricsService).when(deps).getMetricsLogger();
|
||||||
doReturn(true).when(deps).queryUserAccess(anyInt(), anyInt());
|
doReturn(true).when(deps).queryUserAccess(anyInt(), anyInt());
|
||||||
doReturn(mIpConnectivityMetrics).when(deps).getIpConnectivityMetrics();
|
|
||||||
doReturn(mBatteryStatsService).when(deps).getBatteryStatsService();
|
doReturn(mBatteryStatsService).when(deps).getBatteryStatsService();
|
||||||
doAnswer(inv -> {
|
doAnswer(inv -> {
|
||||||
mPolicyTracker = new WrappedMultinetworkPolicyTracker(
|
mPolicyTracker = new WrappedMultinetworkPolicyTracker(
|
||||||
|
|||||||
@@ -124,6 +124,22 @@ public class IpConnectivityMetricsTest {
|
|||||||
assertEquals("", output2);
|
assertEquals("", output2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void logDefaultNetworkEvent(long timeMs, NetworkAgentInfo nai,
|
||||||
|
NetworkAgentInfo oldNai) {
|
||||||
|
final Network network = (nai != null) ? nai.network() : null;
|
||||||
|
final int score = (nai != null) ? nai.getCurrentScore() : 0;
|
||||||
|
final boolean validated = (nai != null) ? nai.lastValidated : false;
|
||||||
|
final LinkProperties lp = (nai != null) ? nai.linkProperties : null;
|
||||||
|
final NetworkCapabilities nc = (nai != null) ? nai.networkCapabilities : null;
|
||||||
|
|
||||||
|
final Network prevNetwork = (oldNai != null) ? oldNai.network() : null;
|
||||||
|
final int prevScore = (oldNai != null) ? oldNai.getCurrentScore() : 0;
|
||||||
|
final LinkProperties prevLp = (oldNai != null) ? oldNai.linkProperties : null;
|
||||||
|
final NetworkCapabilities prevNc = (oldNai != null) ? oldNai.networkCapabilities : null;
|
||||||
|
|
||||||
|
mService.mDefaultNetworkMetrics.logDefaultNetworkEvent(timeMs, network, score, validated,
|
||||||
|
lp, nc, prevNetwork, prevScore, prevLp, prevNc);
|
||||||
|
}
|
||||||
@Test
|
@Test
|
||||||
public void testDefaultNetworkEvents() throws Exception {
|
public void testDefaultNetworkEvents() throws Exception {
|
||||||
final long cell = BitUtils.packBits(new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
|
final long cell = BitUtils.packBits(new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
|
||||||
@@ -147,7 +163,7 @@ public class IpConnectivityMetricsTest {
|
|||||||
for (NetworkAgentInfo[] pair : defaultNetworks) {
|
for (NetworkAgentInfo[] pair : defaultNetworks) {
|
||||||
timeMs += durationMs;
|
timeMs += durationMs;
|
||||||
durationMs += durationMs;
|
durationMs += durationMs;
|
||||||
mService.mDefaultNetworkMetrics.logDefaultNetworkEvent(timeMs, pair[1], pair[0]);
|
logDefaultNetworkEvent(timeMs, pair[1], pair[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
String want = String.join("\n",
|
String want = String.join("\n",
|
||||||
@@ -331,8 +347,8 @@ public class IpConnectivityMetricsTest {
|
|||||||
final long wifi = BitUtils.packBits(new int[]{NetworkCapabilities.TRANSPORT_WIFI});
|
final long wifi = BitUtils.packBits(new int[]{NetworkCapabilities.TRANSPORT_WIFI});
|
||||||
NetworkAgentInfo cellNai = makeNai(100, 50, false, true, cell);
|
NetworkAgentInfo cellNai = makeNai(100, 50, false, true, cell);
|
||||||
NetworkAgentInfo wifiNai = makeNai(101, 60, true, false, wifi);
|
NetworkAgentInfo wifiNai = makeNai(101, 60, true, false, wifi);
|
||||||
mService.mDefaultNetworkMetrics.logDefaultNetworkEvent(timeMs + 200, cellNai, null);
|
logDefaultNetworkEvent(timeMs + 200L, cellNai, null);
|
||||||
mService.mDefaultNetworkMetrics.logDefaultNetworkEvent(timeMs + 300, wifiNai, cellNai);
|
logDefaultNetworkEvent(timeMs + 300L, wifiNai, cellNai);
|
||||||
|
|
||||||
String want = String.join("\n",
|
String want = String.join("\n",
|
||||||
"dropped_events: 0",
|
"dropped_events: 0",
|
||||||
|
|||||||
Reference in New Issue
Block a user