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

Commit a5729ee2 authored by Junyu Lai's avatar Junyu Lai
Browse files

[MS37] Replace NetworkStatsManagerInternal usages in NPMS

This is done by:
1. Add NetworkStatsManagerInternal APIs directly from
   NetworkStatsManager, these APIs are needed by NPMS.
2. Replace all usages with these APIs.
3. Delete NetworkStatsManagerInternal implementation.

Test: atest FrameworksNetTests NetworkPolicyManagerServiceTest
Bug: 204830222
CTS-Coverage-Bug: 213124616
Change-Id: If51b6676915e3a0a8a9f95221d735306911442fc
parent f2eb3a58
Loading
Loading
Loading
Loading
+70 −0
Original line number Diff line number Diff line
@@ -871,4 +871,74 @@ public class NetworkStatsManager {
            return msg.getData().getParcelable(key);
        }
    }

    /**
     * Mark given UID as being in foreground for stats purposes.
     *
     * @hide
     */
    // @SystemApi
    @RequiresPermission(anyOf = {
            NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
            android.Manifest.permission.NETWORK_STACK})
    public void setUidForeground(int uid, boolean uidForeground) {
        try {
            mService.setUidForeground(uid, uidForeground);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Advise persistence threshold; may be overridden internally.
     *
     * @hide
     */
    // @SystemApi
    @RequiresPermission(anyOf = {
            NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
            android.Manifest.permission.NETWORK_STACK})
    public void advisePersistThreshold(long thresholdBytes) {
        try {
            mService.advisePersistThreshold(thresholdBytes);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Force update of statistics.
     *
     * @hide
     */
    // @SystemApi
    @RequiresPermission(anyOf = {
            NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
            android.Manifest.permission.NETWORK_STACK})
    public void forceUpdate() {
        try {
            mService.forceUpdate();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Set the warning and limit to all registered custom network stats providers.
     * Note that invocation of any interface will be sent to all providers.
     *
     * @hide
     */
    // @SystemApi
    @RequiresPermission(anyOf = {
            NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
            android.Manifest.permission.NETWORK_STACK})
    public void setStatsProviderWarningAndLimitAsync(@NonNull String iface, long warning,
            long limit) {
        try {
            mService.setStatsProviderWarningAndLimitAsync(iface, warning, limit);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }
}
+12 −0
Original line number Diff line number Diff line
@@ -94,4 +94,16 @@ interface INetworkStatsService {
    /** Registers a network stats provider */
    INetworkStatsProviderCallback registerNetworkStatsProvider(String tag,
            in INetworkStatsProvider provider);

    /** Mark given UID as being in foreground for stats purposes. */
    void setUidForeground(int uid, boolean uidForeground);

    /** Advise persistence threshold; may be overridden internally. */
    void advisePersistThreshold(long thresholdBytes);

    /**
     * Set the warning and limit to all registered custom network stats providers.
     * Note that invocation of any interface will be sent to all providers.
     */
     void setStatsProviderWarningAndLimitAsync(String iface, long warning, long limit);
}
+0 −37
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.server.net;

import android.annotation.NonNull;

public abstract class NetworkStatsManagerInternal {
    /** Mark given UID as being in foreground for stats purposes. */
    public abstract void setUidForeground(int uid, boolean uidForeground);

    /** Advise persistance threshold; may be overridden internally. */
    public abstract void advisePersistThreshold(long thresholdBytes);

    /** Force update of statistics. */
    public abstract void forceUpdate();

    /**
     * Set the warning and limit to all registered custom network stats providers.
     * Note that invocation of any interface will be sent to all providers.
     */
    public abstract void setStatsProviderWarningAndLimitAsync(@NonNull String iface, long warning,
            long limit);
}
+18 −34
Original line number Diff line number Diff line
@@ -430,7 +430,6 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
                new DefaultNetworkStatsSettings(context), new NetworkStatsFactory(netd),
                new NetworkStatsObservers(), getDefaultSystemDir(), getDefaultBaseDir(),
                new Dependencies());
        service.registerLocalService();

        return service;
    }
@@ -511,11 +510,6 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
        }
    }

    private void registerLocalService() {
        LocalServices.addService(NetworkStatsManagerInternal.class,
                new NetworkStatsManagerInternalImpl());
    }

    /**
     * Observer that watches for {@link INetdUnsolicitedEventListener} alerts.
     */
@@ -1006,7 +1000,8 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
    }

    @VisibleForTesting
    void setUidForeground(int uid, boolean uidForeground) {
    public void setUidForeground(int uid, boolean uidForeground) {
        PermissionUtils.enforceNetworkStackPermission(mContext);
        synchronized (mStatsLock) {
            final int set = uidForeground ? SET_FOREGROUND : SET_DEFAULT;
            final int oldSet = mActiveUidCounterSet.get(uid, SET_DEFAULT);
@@ -1042,7 +1037,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {

    @Override
    public void forceUpdate() {
        mContext.enforceCallingOrSelfPermission(READ_NETWORK_USAGE_HISTORY, TAG);
        PermissionUtils.enforceNetworkStackPermission(mContext);

        final long token = Binder.clearCallingIdentity();
        try {
@@ -1052,7 +1047,9 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
        }
    }

    private void advisePersistThreshold(long thresholdBytes) {
    /** Advise persistence threshold; may be overridden internally. */
    public void advisePersistThreshold(long thresholdBytes) {
        PermissionUtils.enforceNetworkStackPermission(mContext);
        // clamp threshold into safe range
        mPersistThreshold = NetworkStatsUtils.constrain(thresholdBytes,
                128 * KB_IN_BYTES, 2 * MB_IN_BYTES);
@@ -1689,25 +1686,13 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
        removeUidsLocked(CollectionUtils.toIntArray(uids));
    }

    private class NetworkStatsManagerInternalImpl extends NetworkStatsManagerInternal {
        @Override
        public void setUidForeground(int uid, boolean uidForeground) {
            NetworkStatsService.this.setUidForeground(uid, uidForeground);
        }

        @Override
        public void advisePersistThreshold(long thresholdBytes) {
            NetworkStatsService.this.advisePersistThreshold(thresholdBytes);
        }

        @Override
        public void forceUpdate() {
            NetworkStatsService.this.forceUpdate();
        }

        @Override
    /**
     * Set the warning and limit to all registered custom network stats providers.
     * Note that invocation of any interface will be sent to all providers.
     */
    public void setStatsProviderWarningAndLimitAsync(
            @NonNull String iface, long warning, long limit) {
        PermissionUtils.enforceNetworkStackPermission(mContext);
        if (LOGV) {
            Log.v(TAG, "setStatsProviderWarningAndLimitAsync("
                    + iface + "," + warning + "," + limit + ")");
@@ -1715,7 +1700,6 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
        invokeForAllStatsProviderCallbacks((cb) -> cb.mProvider.onSetWarningAndLimit(iface,
                warning, limit));
    }
    }

    @Override
    protected void dump(FileDescriptor fd, PrintWriter rawWriter, String[] args) {
+2 −2
Original line number Diff line number Diff line
@@ -444,7 +444,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {

    private final Context mContext;
    private final IActivityManager mActivityManager;
    private NetworkStatsManagerInternal mNetworkStats;
    private NetworkStatsManager mNetworkStats;
    private final INetworkManagementService mNetworkManager;
    private UsageStatsManagerInternal mUsageStats;
    private AppStandbyInternal mAppStandby;
@@ -799,6 +799,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
        mPolicyFile = new AtomicFile(new File(systemDir, "netpolicy.xml"), "net-policy");

        mAppOps = context.getSystemService(AppOpsManager.class);
        mNetworkStats = context.getSystemService(NetworkStatsManager.class);
        mMultipathPolicyTracker = new MultipathPolicyTracker(mContext, mHandler);
        // Expose private service for system components to use.
        LocalServices.addService(NetworkPolicyManagerInternal.class,
@@ -898,7 +899,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {

            mUsageStats = LocalServices.getService(UsageStatsManagerInternal.class);
            mAppStandby = LocalServices.getService(AppStandbyInternal.class);
            mNetworkStats = LocalServices.getService(NetworkStatsManagerInternal.class);

            synchronized (mUidRulesFirstLock) {
                synchronized (mNetworkPoliciesSecondLock) {
Loading