Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4c5b52da authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by Automerger Merge Worker
Browse files

Merge changes I3eb82680,I9d6147d9 am: bbd9fb5c am: c27bf45c am: 54e08a02

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1547644

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I3f0d6bfead295ed6a98a15ef9bb3542b88d5652a
parents dc4633ec 54e08a02
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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 {
@@ -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,
+56 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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) {
@@ -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;
+0 −4
Original line number Diff line number Diff line
@@ -212,15 +212,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",
+25 −16
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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();
        }
@@ -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;
@@ -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
@@ -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();
        }
+29 −18
Original line number Diff line number Diff line
@@ -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;

@@ -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) {
@@ -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);
        }
@@ -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.
@@ -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;
            }
@@ -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