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

Commit e7ed1ce4 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

API to adjust network stats. DO NOT MERGE.

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

Bug: 6695246
Change-Id: I39e243afd57936b6b30157a6ca511a17b6c55c39
parent 7267baba
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()}