Loading core/java/android/net/IIpConnectivityMetrics.aidl +8 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,9 @@ package android.net; import android.os.Parcelable; import android.net.ConnectivityMetricsEvent; import android.net.INetdEventCallback; import android.net.LinkProperties; import android.net.Network; import android.net.NetworkCapabilities; /** {@hide} */ interface IIpConnectivityMetrics { Loading @@ -29,6 +32,11 @@ interface IIpConnectivityMetrics { */ 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. * @return status {@code true} if registering/unregistering of the callback was successful, Loading core/java/android/net/metrics/IpConnectivityLog.java +56 −3 Original line number Diff line number Diff line Loading @@ -17,10 +17,13 @@ package android.net.metrics; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.net.ConnectivityMetricsEvent; import android.net.IIpConnectivityMetrics; import android.net.LinkProperties; import android.net.Network; import android.net.NetworkCapabilities; import android.os.Parcelable; import android.os.RemoteException; import android.os.ServiceManager; Loading Loading @@ -66,6 +69,9 @@ public class IpConnectivityLog { final IIpConnectivityMetrics service = IIpConnectivityMetrics.Stub.asInterface(ServiceManager.getService(SERVICE_NAME)); if (service == null) { if (DBG) { Log.d(TAG, SERVICE_NAME + " service was not ready"); } return false; } // Two threads racing here will write the same pointer because getService Loading @@ -83,9 +89,6 @@ public class IpConnectivityLog { */ public boolean log(@NonNull ConnectivityMetricsEvent ev) { if (!checkLoggerService()) { if (DBG) { Log.d(TAG, SERVICE_NAME + " service was not ready"); } return false; } if (ev.timestamp == 0) { Loading Loading @@ -161,6 +164,56 @@ public class IpConnectivityLog { 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) { ConnectivityMetricsEvent ev = new ConnectivityMetricsEvent(); ev.data = data; Loading services/core/Android.bp +0 −4 Original line number Diff line number Diff line Loading @@ -189,15 +189,11 @@ filegroup { "java/com/android/server/connectivity/AutodestructReference.java", "java/com/android/server/connectivity/ConnectivityConstants.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/IpConnectivityEventBuilder.java", "java/com/android/server/connectivity/IpConnectivityMetrics.java", "java/com/android/server/connectivity/KeepaliveTracker.java", "java/com/android/server/connectivity/LingerMonitor.java", "java/com/android/server/connectivity/MockableSystemProperties.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/NetworkDiagnostics.java", "java/com/android/server/connectivity/NetworkNotificationManager.java", Loading services/core/java/com/android/server/ConnectivityService.java +25 −16 Original line number Diff line number Diff line Loading @@ -89,7 +89,6 @@ import android.net.ICaptivePortal; import android.net.IConnectivityDiagnosticsCallback; import android.net.IConnectivityManager; import android.net.IDnsResolver; import android.net.IIpConnectivityMetrics; import android.net.INetd; import android.net.INetworkManagementEventObserver; import android.net.INetworkMonitor; Loading Loading @@ -156,7 +155,6 @@ import android.os.PersistableBundle; import android.os.PowerManager; import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.ServiceSpecificException; import android.os.SystemClock; import android.os.SystemProperties; Loading Loading @@ -929,14 +927,6 @@ public class ConnectivityService extends IConnectivityManager.Stub "no IpConnectivityMetrics service"); } /** * @see IpConnectivityMetrics */ public IIpConnectivityMetrics getIpConnectivityMetrics() { return IIpConnectivityMetrics.Stub.asInterface( ServiceManager.getService(IpConnectivityLog.SERVICE_NAME)); } public IBatteryStats getBatteryStatsService() { return BatteryStatsService.getService(); } Loading Loading @@ -3009,9 +2999,7 @@ public class ConnectivityService extends IConnectivityManager.Stub } if (valid != nai.lastValidated) { if (wasDefault) { mDeps.getMetricsLogger() .defaultNetworkMetrics().logDefaultNetworkValidity( SystemClock.elapsedRealtime(), valid); mMetricsLog.logDefaultNetworkValidity(valid); } final int oldScore = nai.getCurrentScore(); nai.lastValidated = valid; Loading Loading @@ -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 // whose timestamps tell how long it takes to recover a default network. 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(); // TODO - we shouldn't send CALLBACK_LOST to requests that can be satisfied Loading Loading @@ -7238,9 +7228,28 @@ public class ConnectivityService extends IConnectivityManager.Stub updateDataActivityTracking(newDefaultNetwork, oldDefaultNetwork); // Notify system services of the new default. makeDefault(newDefaultNetwork); // Log 0 -> X and Y -> X default network transitions, where X is the new default. mDeps.getMetricsLogger().defaultNetworkMetrics().logDefaultNetworkEvent( now, newDefaultNetwork, oldDefaultNetwork); final Network network = (newDefaultNetwork != null) ? newDefaultNetwork.network : null; 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 scheduleReleaseNetworkTransitionWakelock(); } Loading services/core/java/com/android/server/connectivity/DefaultNetworkMetrics.java +29 −18 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.server.connectivity; import android.net.LinkProperties; import android.net.Network; import android.net.NetworkCapabilities; import android.net.metrics.DefaultNetworkEvent; import android.os.SystemClock; Loading Loading @@ -61,7 +63,7 @@ public class DefaultNetworkMetrics { private int mLastTransports; public DefaultNetworkMetrics() { newDefaultNetwork(creationTimeMs, null); newDefaultNetwork(creationTimeMs, null, 0, false, null, null); } public synchronized void listEvents(PrintWriter pw) { Loading Loading @@ -117,13 +119,21 @@ public class DefaultNetworkMetrics { mCurrentDefaultNetwork.validatedMs += timeMs - mLastValidationTimeMs; } public synchronized void logDefaultNetworkEvent( long timeMs, NetworkAgentInfo newNai, NetworkAgentInfo oldNai) { logCurrentDefaultNetwork(timeMs, oldNai); newDefaultNetwork(timeMs, newNai); /** * Logs a default network event. * @see {IpConnectivityLog#logDefaultNetworkEvent}. */ 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) { updateValidationTime(timeMs); } Loading @@ -131,10 +141,10 @@ public class DefaultNetworkMetrics { ev.updateDuration(timeMs); ev.previousTransports = mLastTransports; // 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. fillLinkInfo(ev, oldNai); ev.finalScore = oldNai.getCurrentScore(); fillLinkInfo(ev, network, lp, nc); ev.finalScore = score; } // 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. Loading @@ -147,14 +157,15 @@ public class DefaultNetworkMetrics { 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); ev.durationMs = timeMs; // newNai is null if the system has no default network after the transition. if (newNai != null) { fillLinkInfo(ev, newNai); ev.initialScore = newNai.getCurrentScore(); if (newNai.lastValidated) { if (network != null) { fillLinkInfo(ev, network, lp, nc); ev.initialScore = score; if (validated) { mIsCurrentlyValid = true; mLastValidationTimeMs = timeMs; } Loading @@ -164,10 +175,10 @@ public class DefaultNetworkMetrics { mCurrentDefaultNetwork = ev; } private static void fillLinkInfo(DefaultNetworkEvent ev, NetworkAgentInfo nai) { LinkProperties lp = nai.linkProperties; ev.netId = nai.network().getNetId(); ev.transports |= BitUtils.packBits(nai.networkCapabilities.getTransportTypes()); private static void fillLinkInfo(DefaultNetworkEvent ev, Network network, LinkProperties lp, NetworkCapabilities nc) { ev.netId = network.getNetId(); ev.transports |= BitUtils.packBits(nc.getTransportTypes()); ev.ipv4 |= lp.hasIpv4Address() && lp.hasIpv4DefaultRoute(); ev.ipv6 |= lp.hasGlobalIpv6Address() && lp.hasIpv6DefaultRoute(); } Loading Loading
core/java/android/net/IIpConnectivityMetrics.aidl +8 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,9 @@ package android.net; import android.os.Parcelable; import android.net.ConnectivityMetricsEvent; import android.net.INetdEventCallback; import android.net.LinkProperties; import android.net.Network; import android.net.NetworkCapabilities; /** {@hide} */ interface IIpConnectivityMetrics { Loading @@ -29,6 +32,11 @@ interface IIpConnectivityMetrics { */ 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. * @return status {@code true} if registering/unregistering of the callback was successful, Loading
core/java/android/net/metrics/IpConnectivityLog.java +56 −3 Original line number Diff line number Diff line Loading @@ -17,10 +17,13 @@ package android.net.metrics; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.net.ConnectivityMetricsEvent; import android.net.IIpConnectivityMetrics; import android.net.LinkProperties; import android.net.Network; import android.net.NetworkCapabilities; import android.os.Parcelable; import android.os.RemoteException; import android.os.ServiceManager; Loading Loading @@ -66,6 +69,9 @@ public class IpConnectivityLog { final IIpConnectivityMetrics service = IIpConnectivityMetrics.Stub.asInterface(ServiceManager.getService(SERVICE_NAME)); if (service == null) { if (DBG) { Log.d(TAG, SERVICE_NAME + " service was not ready"); } return false; } // Two threads racing here will write the same pointer because getService Loading @@ -83,9 +89,6 @@ public class IpConnectivityLog { */ public boolean log(@NonNull ConnectivityMetricsEvent ev) { if (!checkLoggerService()) { if (DBG) { Log.d(TAG, SERVICE_NAME + " service was not ready"); } return false; } if (ev.timestamp == 0) { Loading Loading @@ -161,6 +164,56 @@ public class IpConnectivityLog { 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) { ConnectivityMetricsEvent ev = new ConnectivityMetricsEvent(); ev.data = data; Loading
services/core/Android.bp +0 −4 Original line number Diff line number Diff line Loading @@ -189,15 +189,11 @@ filegroup { "java/com/android/server/connectivity/AutodestructReference.java", "java/com/android/server/connectivity/ConnectivityConstants.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/IpConnectivityEventBuilder.java", "java/com/android/server/connectivity/IpConnectivityMetrics.java", "java/com/android/server/connectivity/KeepaliveTracker.java", "java/com/android/server/connectivity/LingerMonitor.java", "java/com/android/server/connectivity/MockableSystemProperties.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/NetworkDiagnostics.java", "java/com/android/server/connectivity/NetworkNotificationManager.java", Loading
services/core/java/com/android/server/ConnectivityService.java +25 −16 Original line number Diff line number Diff line Loading @@ -89,7 +89,6 @@ import android.net.ICaptivePortal; import android.net.IConnectivityDiagnosticsCallback; import android.net.IConnectivityManager; import android.net.IDnsResolver; import android.net.IIpConnectivityMetrics; import android.net.INetd; import android.net.INetworkManagementEventObserver; import android.net.INetworkMonitor; Loading Loading @@ -156,7 +155,6 @@ import android.os.PersistableBundle; import android.os.PowerManager; import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.ServiceSpecificException; import android.os.SystemClock; import android.os.SystemProperties; Loading Loading @@ -929,14 +927,6 @@ public class ConnectivityService extends IConnectivityManager.Stub "no IpConnectivityMetrics service"); } /** * @see IpConnectivityMetrics */ public IIpConnectivityMetrics getIpConnectivityMetrics() { return IIpConnectivityMetrics.Stub.asInterface( ServiceManager.getService(IpConnectivityLog.SERVICE_NAME)); } public IBatteryStats getBatteryStatsService() { return BatteryStatsService.getService(); } Loading Loading @@ -3009,9 +2999,7 @@ public class ConnectivityService extends IConnectivityManager.Stub } if (valid != nai.lastValidated) { if (wasDefault) { mDeps.getMetricsLogger() .defaultNetworkMetrics().logDefaultNetworkValidity( SystemClock.elapsedRealtime(), valid); mMetricsLog.logDefaultNetworkValidity(valid); } final int oldScore = nai.getCurrentScore(); nai.lastValidated = valid; Loading Loading @@ -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 // whose timestamps tell how long it takes to recover a default network. 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(); // TODO - we shouldn't send CALLBACK_LOST to requests that can be satisfied Loading Loading @@ -7238,9 +7228,28 @@ public class ConnectivityService extends IConnectivityManager.Stub updateDataActivityTracking(newDefaultNetwork, oldDefaultNetwork); // Notify system services of the new default. makeDefault(newDefaultNetwork); // Log 0 -> X and Y -> X default network transitions, where X is the new default. mDeps.getMetricsLogger().defaultNetworkMetrics().logDefaultNetworkEvent( now, newDefaultNetwork, oldDefaultNetwork); final Network network = (newDefaultNetwork != null) ? newDefaultNetwork.network : null; 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 scheduleReleaseNetworkTransitionWakelock(); } Loading
services/core/java/com/android/server/connectivity/DefaultNetworkMetrics.java +29 −18 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.server.connectivity; import android.net.LinkProperties; import android.net.Network; import android.net.NetworkCapabilities; import android.net.metrics.DefaultNetworkEvent; import android.os.SystemClock; Loading Loading @@ -61,7 +63,7 @@ public class DefaultNetworkMetrics { private int mLastTransports; public DefaultNetworkMetrics() { newDefaultNetwork(creationTimeMs, null); newDefaultNetwork(creationTimeMs, null, 0, false, null, null); } public synchronized void listEvents(PrintWriter pw) { Loading Loading @@ -117,13 +119,21 @@ public class DefaultNetworkMetrics { mCurrentDefaultNetwork.validatedMs += timeMs - mLastValidationTimeMs; } public synchronized void logDefaultNetworkEvent( long timeMs, NetworkAgentInfo newNai, NetworkAgentInfo oldNai) { logCurrentDefaultNetwork(timeMs, oldNai); newDefaultNetwork(timeMs, newNai); /** * Logs a default network event. * @see {IpConnectivityLog#logDefaultNetworkEvent}. */ 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) { updateValidationTime(timeMs); } Loading @@ -131,10 +141,10 @@ public class DefaultNetworkMetrics { ev.updateDuration(timeMs); ev.previousTransports = mLastTransports; // 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. fillLinkInfo(ev, oldNai); ev.finalScore = oldNai.getCurrentScore(); fillLinkInfo(ev, network, lp, nc); ev.finalScore = score; } // 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. Loading @@ -147,14 +157,15 @@ public class DefaultNetworkMetrics { 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); ev.durationMs = timeMs; // newNai is null if the system has no default network after the transition. if (newNai != null) { fillLinkInfo(ev, newNai); ev.initialScore = newNai.getCurrentScore(); if (newNai.lastValidated) { if (network != null) { fillLinkInfo(ev, network, lp, nc); ev.initialScore = score; if (validated) { mIsCurrentlyValid = true; mLastValidationTimeMs = timeMs; } Loading @@ -164,10 +175,10 @@ public class DefaultNetworkMetrics { mCurrentDefaultNetwork = ev; } private static void fillLinkInfo(DefaultNetworkEvent ev, NetworkAgentInfo nai) { LinkProperties lp = nai.linkProperties; ev.netId = nai.network().getNetId(); ev.transports |= BitUtils.packBits(nai.networkCapabilities.getTransportTypes()); private static void fillLinkInfo(DefaultNetworkEvent ev, Network network, LinkProperties lp, NetworkCapabilities nc) { ev.netId = network.getNetId(); ev.transports |= BitUtils.packBits(nc.getTransportTypes()); ev.ipv4 |= lp.hasIpv4Address() && lp.hasIpv4DefaultRoute(); ev.ipv6 |= lp.hasGlobalIpv6Address() && lp.hasIpv6DefaultRoute(); } Loading