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

Commit 4f0659c0 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

API to adjust network stats.

Enables system apps to correctly account network usage performed on
behalf of another application.

Bug: 6695246
Change-Id: I39e243afd57936b6b30157a6ca511a17b6c55c39
parent a80ea657
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -45,4 +45,7 @@ interface INetworkStatsService {
    /** Advise persistance threshold; may be overridden internally. */
    void advisePersistThreshold(long thresholdBytes);

    /** Adjust recorded network stats. */
    void adjustNetworkStats(int uid, int tag, long rxBytes, long rxPackets, long txBytes, long txPackets, long operationCount);

}
+28 −0
Original line number Diff line number Diff line
@@ -88,6 +88,13 @@ public class TrafficStats {
     */
    public static final int TAG_SYSTEM_BACKUP = 0xFFFFFF03;

    /**
     * Default tag value for cloud messaging traffic.
     *
     * @hide
     */
    public static final int TAG_SYSTEM_CLOUD_MESSAGING = 0xFFFFFF04;

    private static INetworkStatsService sStatsService;

    private synchronized static INetworkStatsService getStatsService() {
@@ -246,6 +253,27 @@ public class TrafficStats {
        }
    }

    /**
     * Adjust network statistics for the given UID and tag by the requested
     * amount. This can be used to correctly account network usage performed on
     * behalf of another application. Values can be negative.
     * <p>
     * Requires that caller holds
     * {@link android.Manifest.permission#MODIFY_NETWORK_ACCOUNTING} permission.
     *
     * @see #setThreadStatsUid(int)
     * @hide
     */
    public static void adjustNetworkStats(int uid, int tag, long rxBytes, long rxPackets,
            long txBytes, long txPackets, long operationCount) {
        try {
            getStatsService().adjustNetworkStats(
                    uid, tag, rxBytes, rxPackets, txBytes, txPackets, operationCount);
        } catch (RemoteException e) {
            throw new RuntimeException(e);
        }
    }

    /** {@hide} */
    public static void closeQuietly(INetworkStatsSession session) {
        // TODO: move to NetworkStatsService once it exists
+8 −0
Original line number Diff line number Diff line
@@ -695,6 +695,14 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
        mGlobalAlertBytes = mSettings.getGlobalAlertBytes(mPersistThreshold);
    }

    @Override
    public void adjustNetworkStats(int uid, int tag, long rxBytes, long rxPackets, long txBytes,
            long txPackets, long operationCount) {
        mContext.enforceCallingOrSelfPermission(MODIFY_NETWORK_ACCOUNTING, TAG);

        // TODO: store adjusted network stats in separate data structure
    }

    /**
     * Receiver that watches for {@link IConnectivityManager} to claim network
     * interfaces. Used to associate {@link TelephonyManager#getSubscriberId()}