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

Commit 012a4bad authored by Junyu Lai's avatar Junyu Lai
Browse files

[MS44.1] Add API to query tagged UID summary

Query tagged UID summary is currently needed by
StatsPullAtomService to collect tagged traffic statistics.
Add an Api via NetworkStatsManager to support this
functionality.

Test: atest NetworkStatsManagerTest
Bug: 204830222
Change-Id: Iaa54482a8109b56e66e829c5bec5a8a8f466641a
parent b70a0862
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -544,6 +544,15 @@ public final class NetworkStats implements AutoCloseable {
        mEnumerationIndex = 0;
    }

    /**
     * Collects tagged summary results and sets summary enumeration mode.
     * @throws RemoteException
     */
    void startTaggedSummaryEnumeration() throws RemoteException {
        mSummary = mSession.getTaggedSummaryForAllUid(mTemplate, mStartTimeStamp, mEndTimeStamp);
        mEnumerationIndex = 0;
    }

    /**
     * Collects history results for uid and resets history enumeration index.
     */
+34 −1
Original line number Diff line number Diff line
@@ -368,7 +368,7 @@ public class NetworkStatsManager {
     * @return Statistics which is described above.
     * @hide
     */
    @Nullable
    @NonNull
    // @SystemApi(client = MODULE_LIBRARIES)
    @WorkerThread
    public NetworkStats querySummary(@NonNull NetworkTemplate template, long startTime,
@@ -384,6 +384,39 @@ public class NetworkStatsManager {
        return null; // To make the compiler happy.
    }

    /**
     * Query tagged network usage statistics summaries.
     *
     * The results will only include tagged traffic made by UIDs belonging to the calling user
     * profile. The results are aggregated over time, so that all buckets will have the same
     * start and end timestamps as the passed arguments. Not aggregated over state, uid,
     * default network, metered, or roaming.
     * This may take a long time, and apps should avoid calling this on their main thread.
     *
     * @param template Template used to match networks. See {@link NetworkTemplate}.
     * @param startTime Start of period, in milliseconds since the Unix epoch, see
     *            {@link System#currentTimeMillis}.
     * @param endTime End of period, in milliseconds since the Unix epoch, see
     *            {@link System#currentTimeMillis}.
     * @return Statistics which is described above.
     * @hide
     */
    @NonNull
    // @SystemApi(client = MODULE_LIBRARIES)
    @WorkerThread
    public NetworkStats queryTaggedSummary(@NonNull NetworkTemplate template, long startTime,
            long endTime) throws SecurityException {
        try {
            NetworkStats result =
                    new NetworkStats(mContext, template, mFlags, startTime, endTime, mService);
            result.startTaggedSummaryEnumeration();
            return result;
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }
        return null; // To make the compiler happy.
    }

    /**
     * Query network usage statistics details for a given uid.
     * This may take a long time, and apps should avoid calling this on their main thread.
+4 −0
Original line number Diff line number Diff line
@@ -46,6 +46,10 @@ interface INetworkStatsSession {
     */
    @UnsupportedAppUsage
    NetworkStats getSummaryForAllUid(in NetworkTemplate template, long start, long end, boolean includeTags);

    /** Return network layer usage summary per UID for tagged traffic that matches template. */
    NetworkStats getTaggedSummaryForAllUid(in NetworkTemplate template, long start, long end);

    /** Return historical network layer stats for specific UID traffic that matches template. */
    @UnsupportedAppUsage
    NetworkStatsHistory getHistoryForUid(in NetworkTemplate template, int uid, int set, int tag, int fields);
+12 −2
Original line number Diff line number Diff line
@@ -766,8 +766,18 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
                    }
                    return stats;
                } catch (NullPointerException e) {
                    // TODO: Track down and fix the cause of this crash and remove this catch block.
                    Log.wtf(TAG, "NullPointerException in getSummaryForAllUid", e);
                    throw e;
                }
            }

            @Override
            public NetworkStats getTaggedSummaryForAllUid(
                    NetworkTemplate template, long start, long end) {
                try {
                    final NetworkStats tagStats = getUidTagComplete()
                            .getSummary(template, start, end, mAccessLevel, mCallingUid);
                    return tagStats;
                } catch (NullPointerException e) {
                    throw e;
                }
            }