Expose time-interval detail query on INetworkStatsSession
Also, force polling when a session is opened for NetworkStatsManager. Bug: 21864554 Bug: 21754685 Change-Id: I24ea822c2d5bc1421ec7ee65d0cfe27cf02dd69e
This commit is contained in:
@@ -309,12 +309,10 @@ public final class NetworkStats implements AutoCloseable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Collects device summary results into a Bucket.
|
* Collects device summary results into a Bucket.
|
||||||
* @param startTime
|
|
||||||
* @param endTime
|
|
||||||
* @throws RemoteException
|
* @throws RemoteException
|
||||||
*/
|
*/
|
||||||
Bucket getDeviceSummaryForNetwork(long startTime, long endTime) throws RemoteException {
|
Bucket getDeviceSummaryForNetwork() throws RemoteException {
|
||||||
mSummary = mSession.getDeviceSummaryForNetwork(mTemplate, startTime, endTime);
|
mSummary = mSession.getDeviceSummaryForNetwork(mTemplate, mStartTimeStamp, mEndTimeStamp);
|
||||||
|
|
||||||
// Setting enumeration index beyond end to avoid accidental enumeration over data that does
|
// Setting enumeration index beyond end to avoid accidental enumeration over data that does
|
||||||
// not belong to the calling user.
|
// not belong to the calling user.
|
||||||
@@ -325,12 +323,10 @@ public final class NetworkStats implements AutoCloseable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Collects summary results and sets summary enumeration mode.
|
* Collects summary results and sets summary enumeration mode.
|
||||||
* @param startTime
|
|
||||||
* @param endTime
|
|
||||||
* @throws RemoteException
|
* @throws RemoteException
|
||||||
*/
|
*/
|
||||||
void startSummaryEnumeration(long startTime, long endTime) throws RemoteException {
|
void startSummaryEnumeration() throws RemoteException {
|
||||||
mSummary = mSession.getSummaryForAllUid(mTemplate, startTime, endTime, false);
|
mSummary = mSession.getSummaryForAllUid(mTemplate, mStartTimeStamp, mEndTimeStamp, false);
|
||||||
|
|
||||||
mEnumerationIndex = 0;
|
mEnumerationIndex = 0;
|
||||||
}
|
}
|
||||||
@@ -341,8 +337,9 @@ public final class NetworkStats implements AutoCloseable {
|
|||||||
void startHistoryEnumeration(int uid) {
|
void startHistoryEnumeration(int uid) {
|
||||||
mHistory = null;
|
mHistory = null;
|
||||||
try {
|
try {
|
||||||
mHistory = mSession.getHistoryForUid(mTemplate, uid, android.net.NetworkStats.SET_ALL,
|
mHistory = mSession.getHistoryIntervalForUid(mTemplate, uid,
|
||||||
android.net.NetworkStats.TAG_NONE, NetworkStatsHistory.FIELD_ALL);
|
android.net.NetworkStats.SET_ALL, android.net.NetworkStats.TAG_NONE,
|
||||||
|
NetworkStatsHistory.FIELD_ALL, mStartTimeStamp, mEndTimeStamp);
|
||||||
setSingleUid(uid);
|
setSingleUid(uid);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.w(TAG, e);
|
Log.w(TAG, e);
|
||||||
@@ -368,9 +365,9 @@ public final class NetworkStats implements AutoCloseable {
|
|||||||
stepUid();
|
stepUid();
|
||||||
mHistory = null;
|
mHistory = null;
|
||||||
try {
|
try {
|
||||||
mHistory = mSession.getHistoryForUid(mTemplate, getUid(),
|
mHistory = mSession.getHistoryIntervalForUid(mTemplate, getUid(),
|
||||||
android.net.NetworkStats.SET_ALL, android.net.NetworkStats.TAG_NONE,
|
android.net.NetworkStats.SET_ALL, android.net.NetworkStats.TAG_NONE,
|
||||||
NetworkStatsHistory.FIELD_ALL);
|
NetworkStatsHistory.FIELD_ALL, mStartTimeStamp, mEndTimeStamp);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.w(TAG, e);
|
Log.w(TAG, e);
|
||||||
// Leaving mHistory null
|
// Leaving mHistory null
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ public class NetworkStatsManager {
|
|||||||
|
|
||||||
Bucket bucket = null;
|
Bucket bucket = null;
|
||||||
NetworkStats stats = new NetworkStats(mContext, template, startTime, endTime);
|
NetworkStats stats = new NetworkStats(mContext, template, startTime, endTime);
|
||||||
bucket = stats.getDeviceSummaryForNetwork(startTime, endTime);
|
bucket = stats.getDeviceSummaryForNetwork();
|
||||||
|
|
||||||
stats.close();
|
stats.close();
|
||||||
return bucket;
|
return bucket;
|
||||||
@@ -106,7 +106,7 @@ public class NetworkStatsManager {
|
|||||||
/**
|
/**
|
||||||
* Query network usage statistics summaries. Result is summarised data usage for all uids
|
* Query network usage statistics summaries. Result is summarised data usage for all uids
|
||||||
* belonging to calling user. Result is a single Bucket aggregated over time, state and uid.
|
* belonging to calling user. Result is a single Bucket aggregated over time, state and uid.
|
||||||
* This means the bucket's start and end timestamp are going to be the same as the 'startTime'
|
* This means the bucket's start and end timestamp are going to be the same as the 'startTime'
|
||||||
* and 'endTime' parameters, state is going to be {@link NetworkStats.Bucket#STATE_ALL} and uid
|
* and 'endTime' parameters, state is going to be {@link NetworkStats.Bucket#STATE_ALL} and uid
|
||||||
* {@link NetworkStats.Bucket#UID_ALL}.
|
* {@link NetworkStats.Bucket#UID_ALL}.
|
||||||
*
|
*
|
||||||
@@ -130,7 +130,7 @@ public class NetworkStatsManager {
|
|||||||
|
|
||||||
NetworkStats stats;
|
NetworkStats stats;
|
||||||
stats = new NetworkStats(mContext, template, startTime, endTime);
|
stats = new NetworkStats(mContext, template, startTime, endTime);
|
||||||
stats.startSummaryEnumeration(startTime, endTime);
|
stats.startSummaryEnumeration();
|
||||||
|
|
||||||
stats.close();
|
stats.close();
|
||||||
return stats.getSummaryAggregate();
|
return stats.getSummaryAggregate();
|
||||||
@@ -140,7 +140,7 @@ public class NetworkStatsManager {
|
|||||||
* Query network usage statistics summaries. Result filtered to include only uids belonging to
|
* Query network usage statistics summaries. Result filtered to include only uids belonging to
|
||||||
* calling user. Result is aggregated over time, hence all buckets will have the same start and
|
* calling user. Result is aggregated over time, hence all buckets will have the same start and
|
||||||
* end timestamps. Not aggregated over state or uid. This means buckets' start and end
|
* end timestamps. Not aggregated over state or uid. This means buckets' start and end
|
||||||
* timestamps are going to be the same as the 'startTime' and 'endTime' parameters, state and
|
* timestamps are going to be the same as the 'startTime' and 'endTime' parameters, state and
|
||||||
* uid are going to vary.
|
* uid are going to vary.
|
||||||
*
|
*
|
||||||
* @param networkType As defined in {@link ConnectivityManager}, e.g.
|
* @param networkType As defined in {@link ConnectivityManager}, e.g.
|
||||||
@@ -163,7 +163,7 @@ public class NetworkStatsManager {
|
|||||||
|
|
||||||
NetworkStats result;
|
NetworkStats result;
|
||||||
result = new NetworkStats(mContext, template, startTime, endTime);
|
result = new NetworkStats(mContext, template, startTime, endTime);
|
||||||
result.startSummaryEnumeration(startTime, endTime);
|
result.startSummaryEnumeration();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -173,6 +173,9 @@ public class NetworkStatsManager {
|
|||||||
* Result is aggregated over state but not aggregated over time. This means buckets' start and
|
* Result is aggregated over state but not aggregated over time. This means buckets' start and
|
||||||
* end timestamps are going to be between 'startTime' and 'endTime' parameters, state is going
|
* end timestamps are going to be between 'startTime' and 'endTime' parameters, state is going
|
||||||
* to be {@link NetworkStats.Bucket#STATE_ALL} and uid the same as the 'uid' parameter.
|
* to be {@link NetworkStats.Bucket#STATE_ALL} and uid the same as the 'uid' parameter.
|
||||||
|
* <p>Only includes buckets that atomically occur in the inclusive time range. Doesn't
|
||||||
|
* interpolate across partial buckets. Since bucket length is in the order of hours, this
|
||||||
|
* method cannot be used to measure data usage on a fine grained time scale.
|
||||||
*
|
*
|
||||||
* @param networkType As defined in {@link ConnectivityManager}, e.g.
|
* @param networkType As defined in {@link ConnectivityManager}, e.g.
|
||||||
* {@link ConnectivityManager#TYPE_MOBILE}, {@link ConnectivityManager#TYPE_WIFI}
|
* {@link ConnectivityManager#TYPE_MOBILE}, {@link ConnectivityManager#TYPE_WIFI}
|
||||||
@@ -205,6 +208,9 @@ public class NetworkStatsManager {
|
|||||||
* calling user. Result is aggregated over state but not aggregated over time or uid. This means
|
* calling user. Result is aggregated over state but not aggregated over time or uid. This means
|
||||||
* buckets' start and end timestamps are going to be between 'startTime' and 'endTime'
|
* buckets' start and end timestamps are going to be between 'startTime' and 'endTime'
|
||||||
* parameters, state is going to be {@link NetworkStats.Bucket#STATE_ALL} and uid will vary.
|
* parameters, state is going to be {@link NetworkStats.Bucket#STATE_ALL} and uid will vary.
|
||||||
|
* <p>Only includes buckets that atomically occur in the inclusive time range. Doesn't
|
||||||
|
* interpolate across partial buckets. Since bucket length is in the order of hours, this
|
||||||
|
* method cannot be used to measure data usage on a fine grained time scale.
|
||||||
*
|
*
|
||||||
* @param networkType As defined in {@link ConnectivityManager}, e.g.
|
* @param networkType As defined in {@link ConnectivityManager}, e.g.
|
||||||
* {@link ConnectivityManager#TYPE_MOBILE}, {@link ConnectivityManager#TYPE_WIFI}
|
* {@link ConnectivityManager#TYPE_MOBILE}, {@link ConnectivityManager#TYPE_WIFI}
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ interface INetworkStatsSession {
|
|||||||
NetworkStats getSummaryForAllUid(in NetworkTemplate template, long start, long end, boolean includeTags);
|
NetworkStats getSummaryForAllUid(in NetworkTemplate template, long start, long end, boolean includeTags);
|
||||||
/** Return historical network layer stats for specific UID traffic that matches template. */
|
/** Return historical network layer stats for specific UID traffic that matches template. */
|
||||||
NetworkStatsHistory getHistoryForUid(in NetworkTemplate template, int uid, int set, int tag, int fields);
|
NetworkStatsHistory getHistoryForUid(in NetworkTemplate template, int uid, int set, int tag, int fields);
|
||||||
|
/** Return historical network layer stats for specific UID traffic that matches template. */
|
||||||
|
NetworkStatsHistory getHistoryIntervalForUid(in NetworkTemplate template, int uid, int set, int tag, int fields, long start, long end);
|
||||||
|
|
||||||
/** Return array of uids that have stats and are accessible to the calling user */
|
/** Return array of uids that have stats and are accessible to the calling user */
|
||||||
int[] getRelevantUids();
|
int[] getRelevantUids();
|
||||||
|
|||||||
@@ -436,13 +436,26 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public INetworkStatsSession openSession() {
|
public INetworkStatsSession openSession() {
|
||||||
return openSessionForUsageStats(null);
|
return createSession(null, /* poll on create */ false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public INetworkStatsSession openSessionForUsageStats(final String callingPackage) {
|
public INetworkStatsSession openSessionForUsageStats(final String callingPackage) {
|
||||||
|
return createSession(callingPackage, /* poll on create */ true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private INetworkStatsSession createSession(final String callingPackage, boolean pollOnCreate) {
|
||||||
assertBandwidthControlEnabled();
|
assertBandwidthControlEnabled();
|
||||||
|
|
||||||
|
if (pollOnCreate) {
|
||||||
|
final long ident = Binder.clearCallingIdentity();
|
||||||
|
try {
|
||||||
|
performPoll(FLAG_PERSIST_ALL);
|
||||||
|
} finally {
|
||||||
|
Binder.restoreCallingIdentity(ident);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// return an IBinder which holds strong references to any loaded stats
|
// return an IBinder which holds strong references to any loaded stats
|
||||||
// for its lifetime; when caller closes only weak references remain.
|
// for its lifetime; when caller closes only weak references remain.
|
||||||
|
|
||||||
@@ -525,6 +538,19 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NetworkStatsHistory getHistoryIntervalForUid(
|
||||||
|
NetworkTemplate template, int uid, int set, int tag, int fields,
|
||||||
|
long start, long end) {
|
||||||
|
enforcePermissionForManagedAdmin(mCallingPackage);
|
||||||
|
if (tag == TAG_NONE) {
|
||||||
|
return getUidComplete().getHistory(template, uid, set, tag, fields, start, end);
|
||||||
|
} else {
|
||||||
|
return getUidTagComplete().getHistory(template, uid, set, tag, fields,
|
||||||
|
start, end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
mUidComplete = null;
|
mUidComplete = null;
|
||||||
|
|||||||
Reference in New Issue
Block a user