Define new APIs for metering and roaming network stats buckets.

These are analagous to the state buckets for tracking whether usage is
incurred while the app is in the foreground or background. We will
additionally track whether data usage is incurred over a metered or
unmetered network, and whether it is incurred over a roaming or native
network.

The APIs are not implemented in this CL; the existing buckets are
still returned with METERING_ALL and ROAMING_ALL to indicate that this
is not yet being tracked.

Bug: 25813438
Bug: 25813958
Change-Id: I76dd3dd063ed28ef5579ca3a978570532e7836bc
This commit is contained in:
Jeff Davidson
2016-01-06 13:53:36 -08:00
parent 8dc22e3e90
commit b7ab1f9da6

View File

@@ -121,12 +121,12 @@ public final class NetworkStats implements AutoCloseable {
*/ */
public static class Bucket { public static class Bucket {
/** /**
* Combined usage across all other states. * Combined usage across all states.
*/ */
public static final int STATE_ALL = -1; public static final int STATE_ALL = -1;
/** /**
* Usage not accounted in any other states. * Usage not accounted for in any other state.
*/ */
public static final int STATE_DEFAULT = 0x1; public static final int STATE_DEFAULT = 0x1;
@@ -150,8 +150,40 @@ public final class NetworkStats implements AutoCloseable {
*/ */
public static final int UID_TETHERING = TrafficStats.UID_TETHERING; public static final int UID_TETHERING = TrafficStats.UID_TETHERING;
/**
* Combined usage across all metering states.
*/
public static final int METERING_ALL = -1;
/**
* Usage not accounted for in any other metering state.
*/
public static final int METERING_DEFAULT = 0x1;
/**
* Metered usage.
*/
public static final int METERING_METERED = 0x2;
/**
* Combined usage across all roaming states.
*/
public static final int ROAMING_ALL = -1;
/**
* Usage not accounted for in any other roaming state.
*/
public static final int ROAMING_DEFAULT = 0x1;
/**
* Roaming usage.
*/
public static final int ROAMING_ROAMING = 0x2;
private int mUid; private int mUid;
private int mState; private int mState;
private int mMetering;
private int mRoaming;
private long mBeginTimeStamp; private long mBeginTimeStamp;
private long mEndTimeStamp; private long mEndTimeStamp;
private long mRxBytes; private long mRxBytes;
@@ -205,6 +237,30 @@ public final class NetworkStats implements AutoCloseable {
return mState; return mState;
} }
/**
* Metering state. One of the following values:<p/>
* <ul>
* <li>{@link #METERING_ALL}</li>
* <li>{@link #METERING_DEFAULT}</li>
* <li>{@link #METERING_METERED}</li>
* </ul>
*/
public int getMetering() {
return mMetering;
}
/**
* Roaming state. One of the following values:<p/>
* <ul>
* <li>{@link #ROAMING_ALL}</li>
* <li>{@link #ROAMING_DEFAULT}</li>
* <li>{@link #ROAMING_ROAMING}</li>
* </ul>
*/
public int getRoaming() {
return mRoaming;
}
/** /**
* Start timestamp of the bucket's time interval. Defined in terms of "Unix time", see * Start timestamp of the bucket's time interval. Defined in terms of "Unix time", see
* {@link java.lang.System#currentTimeMillis}. * {@link java.lang.System#currentTimeMillis}.
@@ -398,6 +454,9 @@ public final class NetworkStats implements AutoCloseable {
private void fillBucketFromSummaryEntry(Bucket bucketOut) { private void fillBucketFromSummaryEntry(Bucket bucketOut) {
bucketOut.mUid = Bucket.convertUid(mRecycledSummaryEntry.uid); bucketOut.mUid = Bucket.convertUid(mRecycledSummaryEntry.uid);
bucketOut.mState = Bucket.convertState(mRecycledSummaryEntry.set); bucketOut.mState = Bucket.convertState(mRecycledSummaryEntry.set);
// TODO: Implement metering/roaming tracking.
bucketOut.mMetering = Bucket.METERING_ALL;
bucketOut.mRoaming = Bucket.ROAMING_ALL;
bucketOut.mBeginTimeStamp = mStartTimeStamp; bucketOut.mBeginTimeStamp = mStartTimeStamp;
bucketOut.mEndTimeStamp = mEndTimeStamp; bucketOut.mEndTimeStamp = mEndTimeStamp;
bucketOut.mRxBytes = mRecycledSummaryEntry.rxBytes; bucketOut.mRxBytes = mRecycledSummaryEntry.rxBytes;
@@ -444,6 +503,8 @@ public final class NetworkStats implements AutoCloseable {
mRecycledHistoryEntry); mRecycledHistoryEntry);
bucketOut.mUid = Bucket.convertUid(getUid()); bucketOut.mUid = Bucket.convertUid(getUid());
bucketOut.mState = Bucket.STATE_ALL; bucketOut.mState = Bucket.STATE_ALL;
bucketOut.mMetering = Bucket.METERING_ALL;
bucketOut.mRoaming = Bucket.ROAMING_ALL;
bucketOut.mBeginTimeStamp = mRecycledHistoryEntry.bucketStart; bucketOut.mBeginTimeStamp = mRecycledHistoryEntry.bucketStart;
bucketOut.mEndTimeStamp = mRecycledHistoryEntry.bucketStart + bucketOut.mEndTimeStamp = mRecycledHistoryEntry.bucketStart +
mRecycledHistoryEntry.bucketDuration; mRecycledHistoryEntry.bucketDuration;