diff options
author | Zoltan Szatmary-Ban <szatmz@google.com> | 2015-07-08 11:32:57 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-07-08 11:33:00 +0000 |
commit | 895927603606e58a46ecaee8f2244e1e2b6f2840 (patch) | |
tree | 55fe3c76d136b66bac4e55e795d4a725e2381968 | |
parent | bc2434404ef76d3230da376a10f22afa4085f8d6 (diff) | |
parent | 72027d2e424a94f002452d1e16310d00f3696d00 (diff) | |
download | frameworks_base-895927603606e58a46ecaee8f2244e1e2b6f2840.zip frameworks_base-895927603606e58a46ecaee8f2244e1e2b6f2840.tar.gz frameworks_base-895927603606e58a46ecaee8f2244e1e2b6f2840.tar.bz2 |
Merge "Expose time-interval detail query on INetworkStatsSession" into mnc-dev
4 files changed, 49 insertions, 18 deletions
diff --git a/core/java/android/app/usage/NetworkStats.java b/core/java/android/app/usage/NetworkStats.java index 1079f1a..9d5eabb 100644 --- a/core/java/android/app/usage/NetworkStats.java +++ b/core/java/android/app/usage/NetworkStats.java @@ -309,12 +309,10 @@ public final class NetworkStats implements AutoCloseable { /** * Collects device summary results into a Bucket. - * @param startTime - * @param endTime * @throws RemoteException */ - Bucket getDeviceSummaryForNetwork(long startTime, long endTime) throws RemoteException { - mSummary = mSession.getDeviceSummaryForNetwork(mTemplate, startTime, endTime); + Bucket getDeviceSummaryForNetwork() throws RemoteException { + mSummary = mSession.getDeviceSummaryForNetwork(mTemplate, mStartTimeStamp, mEndTimeStamp); // Setting enumeration index beyond end to avoid accidental enumeration over data that does // not belong to the calling user. @@ -325,12 +323,10 @@ public final class NetworkStats implements AutoCloseable { /** * Collects summary results and sets summary enumeration mode. - * @param startTime - * @param endTime * @throws RemoteException */ - void startSummaryEnumeration(long startTime, long endTime) throws RemoteException { - mSummary = mSession.getSummaryForAllUid(mTemplate, startTime, endTime, false); + void startSummaryEnumeration() throws RemoteException { + mSummary = mSession.getSummaryForAllUid(mTemplate, mStartTimeStamp, mEndTimeStamp, false); mEnumerationIndex = 0; } @@ -341,8 +337,9 @@ public final class NetworkStats implements AutoCloseable { void startHistoryEnumeration(int uid) { mHistory = null; try { - mHistory = mSession.getHistoryForUid(mTemplate, uid, android.net.NetworkStats.SET_ALL, - android.net.NetworkStats.TAG_NONE, NetworkStatsHistory.FIELD_ALL); + mHistory = mSession.getHistoryIntervalForUid(mTemplate, uid, + android.net.NetworkStats.SET_ALL, android.net.NetworkStats.TAG_NONE, + NetworkStatsHistory.FIELD_ALL, mStartTimeStamp, mEndTimeStamp); setSingleUid(uid); } catch (RemoteException e) { Log.w(TAG, e); @@ -368,9 +365,9 @@ public final class NetworkStats implements AutoCloseable { stepUid(); mHistory = null; try { - mHistory = mSession.getHistoryForUid(mTemplate, getUid(), + mHistory = mSession.getHistoryIntervalForUid(mTemplate, getUid(), android.net.NetworkStats.SET_ALL, android.net.NetworkStats.TAG_NONE, - NetworkStatsHistory.FIELD_ALL); + NetworkStatsHistory.FIELD_ALL, mStartTimeStamp, mEndTimeStamp); } catch (RemoteException e) { Log.w(TAG, e); // Leaving mHistory null diff --git a/core/java/android/app/usage/NetworkStatsManager.java b/core/java/android/app/usage/NetworkStatsManager.java index 2ae0181..2886cda 100644 --- a/core/java/android/app/usage/NetworkStatsManager.java +++ b/core/java/android/app/usage/NetworkStatsManager.java @@ -97,7 +97,7 @@ public class NetworkStatsManager { Bucket bucket = null; NetworkStats stats = new NetworkStats(mContext, template, startTime, endTime); - bucket = stats.getDeviceSummaryForNetwork(startTime, endTime); + bucket = stats.getDeviceSummaryForNetwork(); stats.close(); return bucket; @@ -106,7 +106,7 @@ public class NetworkStatsManager { /** * 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. - * 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 * {@link NetworkStats.Bucket#UID_ALL}. * @@ -130,7 +130,7 @@ public class NetworkStatsManager { NetworkStats stats; stats = new NetworkStats(mContext, template, startTime, endTime); - stats.startSummaryEnumeration(startTime, endTime); + stats.startSummaryEnumeration(); stats.close(); return stats.getSummaryAggregate(); @@ -140,7 +140,7 @@ public class NetworkStatsManager { * 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 * 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. * * @param networkType As defined in {@link ConnectivityManager}, e.g. @@ -163,7 +163,7 @@ public class NetworkStatsManager { NetworkStats result; result = new NetworkStats(mContext, template, startTime, endTime); - result.startSummaryEnumeration(startTime, endTime); + result.startSummaryEnumeration(); return result; } @@ -173,6 +173,9 @@ public class NetworkStatsManager { * 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 * 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. * {@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 * 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. + * <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. * {@link ConnectivityManager#TYPE_MOBILE}, {@link ConnectivityManager#TYPE_WIFI} diff --git a/core/java/android/net/INetworkStatsSession.aidl b/core/java/android/net/INetworkStatsSession.aidl index 7bcb043..5229a3b 100644 --- a/core/java/android/net/INetworkStatsSession.aidl +++ b/core/java/android/net/INetworkStatsSession.aidl @@ -35,6 +35,8 @@ interface INetworkStatsSession { NetworkStats getSummaryForAllUid(in NetworkTemplate template, long start, long end, boolean includeTags); /** 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); + /** 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 */ int[] getRelevantUids(); diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java index 0035d01..8449348 100644 --- a/services/core/java/com/android/server/net/NetworkStatsService.java +++ b/services/core/java/com/android/server/net/NetworkStatsService.java @@ -436,13 +436,26 @@ public class NetworkStatsService extends INetworkStatsService.Stub { @Override public INetworkStatsSession openSession() { - return openSessionForUsageStats(null); + return createSession(null, /* poll on create */ false); } @Override public INetworkStatsSession openSessionForUsageStats(final String callingPackage) { + return createSession(callingPackage, /* poll on create */ true); + } + + private INetworkStatsSession createSession(final String callingPackage, boolean pollOnCreate) { 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 // for its lifetime; when caller closes only weak references remain. @@ -526,6 +539,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 public void close() { mUidComplete = null; mUidTagComplete = null; |