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

Commit ed64c297 authored by Junyu Lai's avatar Junyu Lai Committed by Automerger Merge Worker
Browse files

Merge changes I3ba50cbd,I970ee365 am: 37f24081

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

Change-Id: I2cf4ea0abb1ff7bc74302cce16cbe8041b08d321
parents a6006f1d 37f24081
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -689,8 +689,7 @@ public class NetworkStatsManager {
            Objects.requireNonNull(defaultNetworks);
            Objects.requireNonNull(networkStateSnapshots);
            Objects.requireNonNull(underlyingNetworkInfos);
            // TODO: Change internal namings after the name is decided.
            mService.forceUpdateIfaces(defaultNetworks.toArray(new Network[0]),
            mService.notifyNetworkStatus(defaultNetworks.toArray(new Network[0]),
                    networkStateSnapshots.toArray(new NetworkStateSnapshot[0]), activeIface,
                    underlyingNetworkInfos.toArray(new UnderlyingNetworkInfo[0]));
        } catch (RemoteException e) {
+2 −2
Original line number Diff line number Diff line
@@ -65,8 +65,8 @@ interface INetworkStatsService {
    /** Increment data layer count of operations performed for UID and tag. */
    void incrementOperationCount(int uid, int tag, int operationCount);

    /** Force update of ifaces. */
    void forceUpdateIfaces(
    /**  Notify {@code NetworkStatsService} about network status changed. */
    void notifyNetworkStatus(
         in Network[] defaultNetworks,
         in NetworkStateSnapshot[] snapshots,
         in String activeIface,
+1 −5
Original line number Diff line number Diff line
@@ -8588,11 +8588,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
        final UnderlyingNetworkInfo[] underlyingNetworkInfos = getAllVpnInfo();
        try {
            final ArrayList<NetworkStateSnapshot> snapshots = new ArrayList<>();
            // TODO: Directly use NetworkStateSnapshot when feasible.
            for (final NetworkState state : getAllNetworkState()) {
                final NetworkStateSnapshot snapshot = new NetworkStateSnapshot(state.network,
                        state.networkCapabilities, state.linkProperties, state.subscriberId,
                        state.legacyNetworkType);
            for (final NetworkStateSnapshot snapshot : getAllNetworkStateSnapshots()) {
                snapshots.add(snapshot);
            }
            mStatsManager.notifyNetworkStatus(getDefaultNetworks(),
+27 −26
Original line number Diff line number Diff line
@@ -306,7 +306,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());

        mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // verify service has empty history for wifi
@@ -349,7 +349,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());

        mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // verify service has empty history for wifi
@@ -423,7 +423,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());

        mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // modify some number on wifi, and trigger poll event
@@ -464,7 +464,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());

        mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // create some traffic on first network
@@ -499,7 +499,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
                .insertEntry(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L)
                .insertEntry(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 512L, 4L, 0L, 0L, 0L));

        mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);
        forcePollAndWaitForIdle();

@@ -539,7 +539,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());

        mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // create some traffic
@@ -607,7 +607,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectNetworkStatsUidDetail(buildEmptyStats());

        setMobileRatTypeAndWaitForIdle(TelephonyManager.NETWORK_TYPE_UMTS);
        mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // Create some traffic.
@@ -699,7 +699,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
                new int[]{NetworkCapabilities.NET_CAPABILITY_OEM_PAID})};
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());
        mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // Create some traffic.
@@ -714,7 +714,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
                new int[]{NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE})};
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());
        mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // Create some traffic.
@@ -730,7 +730,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
                          NetworkCapabilities.NET_CAPABILITY_OEM_PAID})};
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());
        mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // Create some traffic.
@@ -744,7 +744,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        states = new NetworkStateSnapshot[]{buildOemManagedMobileState(IMSI_1, false, new int[]{})};
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());
        mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // Create some traffic.
@@ -797,7 +797,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());

        mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // create some traffic for two apps
@@ -856,7 +856,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());

        mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        NetworkStats.Entry entry1 = new NetworkStats.Entry(
@@ -900,7 +900,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());

        mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        NetworkStats.Entry uidStats = new NetworkStats.Entry(
@@ -931,7 +931,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {

        // mStatsFactory#readNetworkStatsDetail() has the following invocations:
        // 1) NetworkStatsService#systemReady from #setUp.
        // 2) mService#forceUpdateIfaces in the test above.
        // 2) mService#notifyNetworkStatus in the test above.
        //
        // Additionally, we should have one call from the above call to mService#getDetailedUidStats
        // with the augmented ifaceFilter.
@@ -955,7 +955,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());

        mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // create some initial traffic
@@ -1013,7 +1013,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());

        mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // create some initial traffic
@@ -1053,7 +1053,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());

        mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // Create some traffic
@@ -1092,7 +1092,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());

        mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // create some tethering traffic
@@ -1149,7 +1149,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectNetworkStatsSummary(buildEmptyStats());
        expectNetworkStatsUidDetail(buildEmptyStats());

        mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // verify service has empty history for wifi
@@ -1255,7 +1255,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
                mService.registerNetworkStatsProvider("TEST", provider);
        assertNotNull(cb);

        mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // Verifies that one requestStatsUpdate will be called during iface update.
@@ -1320,7 +1320,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
                mService.registerNetworkStatsProvider("TEST", provider);
        assertNotNull(cb);

        mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // Verifies that one requestStatsUpdate will be called during iface update.
@@ -1378,7 +1378,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        expectDefaultSettings();
        NetworkStateSnapshot[] states =
                new NetworkStateSnapshot[]{buildWifiState(true /* isMetered */, TEST_IFACE)};
        mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // Register custom provider and retrieve callback.
@@ -1428,7 +1428,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {

        // 3G network comes online.
        setMobileRatTypeAndWaitForIdle(TelephonyManager.NETWORK_TYPE_UMTS);
        mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // Create some traffic.
@@ -1450,7 +1450,8 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        setCombineSubtypeEnabled(true);

        // Call handleOnCollapsedRatTypeChanged manually to simulate the callback fired
        // when stopping monitor, this is needed by NetworkStatsService to trigger updateIfaces.
        // when stopping monitor, this is needed by NetworkStatsService to trigger
        // handleNotifyNetworkStatus.
        mService.handleOnCollapsedRatTypeChanged();
        HandlerUtils.waitForIdle(mHandlerThread, WAIT_TIMEOUT);
        // Create some traffic.
@@ -1499,7 +1500,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
        NetworkStateSnapshot[] states = new NetworkStateSnapshot[]{
                buildWifiState(true /*isMetered*/, TEST_IFACE2), buildMobile3gState(IMSI_1)};
        expectNetworkStatsUidDetail(buildEmptyStats());
        mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
        mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
                new UnderlyingNetworkInfo[0]);

        // Create some traffic on mobile network.
+20 −16
Original line number Diff line number Diff line
@@ -181,7 +181,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
    private static final int MSG_PERFORM_POLL = 1;
    // Perform polling, persist network, and register the global alert again.
    private static final int MSG_PERFORM_POLL_REGISTER_ALERT = 2;
    private static final int MSG_UPDATE_IFACES = 3;
    private static final int MSG_NOTIFY_NETWORK_STATUS = 3;
    // A message for broadcasting ACTION_NETWORK_STATS_UPDATED in handler thread to prevent
    // deadlock.
    private static final int MSG_BROADCAST_NETWORK_STATS_UPDATED = 4;
@@ -379,11 +379,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
                    performPoll(FLAG_PERSIST_ALL);
                    break;
                }
                case MSG_UPDATE_IFACES: {
                case MSG_NOTIFY_NETWORK_STATUS: {
                    // If no cached states, ignore.
                    if (mLastNetworkStateSnapshots == null) break;
                    // TODO (b/181642673): Protect mDefaultNetworks from concurrent accessing.
                    updateIfaces(mDefaultNetworks, mLastNetworkStateSnapshots, mActiveIface);
                    handleNotifyNetworkStatus(
                            mDefaultNetworks, mLastNetworkStateSnapshots, mActiveIface);
                    break;
                }
                case MSG_PERFORM_POLL_REGISTER_ALERT: {
@@ -474,7 +475,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
                @NonNull Looper looper, @NonNull Executor executor,
                @NonNull NetworkStatsService service) {
            // TODO: Update RatType passively in NSS, instead of querying into the monitor
            //  when forceUpdateIface.
            //  when notifyNetworkStatus.
            return new NetworkStatsSubscriptionsMonitor(context, looper, executor,
                    (subscriberId, type) -> service.handleOnCollapsedRatTypeChanged());
        }
@@ -971,16 +972,19 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
        }
    }

    public void forceUpdateIfaces(
            Network[] defaultNetworks,
            NetworkStateSnapshot[] networkStates,
            String activeIface,
            UnderlyingNetworkInfo[] underlyingNetworkInfos) {
    /**
     * Notify {@code NetworkStatsService} about network status changed.
     */
    public void notifyNetworkStatus(
            @NonNull Network[] defaultNetworks,
            @NonNull NetworkStateSnapshot[] networkStates,
            @Nullable String activeIface,
            @NonNull UnderlyingNetworkInfo[] underlyingNetworkInfos) {
        checkNetworkStackPermission(mContext);

        final long token = Binder.clearCallingIdentity();
        try {
            updateIfaces(defaultNetworks, networkStates, activeIface);
            handleNotifyNetworkStatus(defaultNetworks, networkStates, activeIface);
        } finally {
            Binder.restoreCallingIdentity(token);
        }
@@ -1244,12 +1248,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
    @VisibleForTesting
    public void handleOnCollapsedRatTypeChanged() {
        // Protect service from frequently updating. Remove pending messages if any.
        mHandler.removeMessages(MSG_UPDATE_IFACES);
        mHandler.removeMessages(MSG_NOTIFY_NETWORK_STATUS);
        mHandler.sendMessageDelayed(
                mHandler.obtainMessage(MSG_UPDATE_IFACES), mSettings.getPollDelay());
                mHandler.obtainMessage(MSG_NOTIFY_NETWORK_STATUS), mSettings.getPollDelay());
    }

    private void updateIfaces(
    private void handleNotifyNetworkStatus(
            Network[] defaultNetworks,
            NetworkStateSnapshot[] snapshots,
            String activeIface) {
@@ -1257,7 +1261,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
            mWakeLock.acquire();
            try {
                mActiveIface = activeIface;
                updateIfacesLocked(defaultNetworks, snapshots);
                handleNotifyNetworkStatusLocked(defaultNetworks, snapshots);
            } finally {
                mWakeLock.release();
            }
@@ -1270,10 +1274,10 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
     * they are combined under a single {@link NetworkIdentitySet}.
     */
    @GuardedBy("mStatsLock")
    private void updateIfacesLocked(@NonNull Network[] defaultNetworks,
    private void handleNotifyNetworkStatusLocked(@NonNull Network[] defaultNetworks,
            @NonNull NetworkStateSnapshot[] snapshots) {
        if (!mSystemReady) return;
        if (LOGV) Slog.v(TAG, "updateIfacesLocked()");
        if (LOGV) Slog.v(TAG, "handleNotifyNetworkStatusLocked()");

        // take one last stats snapshot before updating iface mapping. this
        // isn't perfect, since the kernel may already be counting traffic from