From 887cffea244c88ec06d9dbec1792f05eea87a7c6 Mon Sep 17 00:00:00 2001 From: Zoltan Szatmary-Ban Date: Thu, 13 Aug 2015 16:53:10 +0100 Subject: Remove uids with empty history from NetworkStats uid enumeration Bug: 23018174 Change-Id: I1a482280599e0f5da18a208e727653d4bd4107ec --- core/java/android/app/usage/NetworkStats.java | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'core') diff --git a/core/java/android/app/usage/NetworkStats.java b/core/java/android/app/usage/NetworkStats.java index 9d5eabb..ef08eb9 100644 --- a/core/java/android/app/usage/NetworkStats.java +++ b/core/java/android/app/usage/NetworkStats.java @@ -24,6 +24,7 @@ import android.net.NetworkTemplate; import android.net.TrafficStats; import android.os.RemoteException; import android.os.ServiceManager; +import android.util.IntArray; import android.util.Log; import dalvik.system.CloseGuard; @@ -353,7 +354,25 @@ public final class NetworkStats implements AutoCloseable { * @throws RemoteException */ void startUserUidEnumeration() throws RemoteException { - setUidEnumeration(mSession.getRelevantUids()); + // TODO: getRelevantUids should be sensitive to time interval. When that's done, + // the filtering logic below can be removed. + int[] uids = mSession.getRelevantUids(); + // Filtering of uids with empty history. + IntArray filteredUids = new IntArray(uids.length); + for (int uid : uids) { + try { + NetworkStatsHistory history = mSession.getHistoryIntervalForUid(mTemplate, uid, + android.net.NetworkStats.SET_ALL, android.net.NetworkStats.TAG_NONE, + NetworkStatsHistory.FIELD_ALL, mStartTimeStamp, mEndTimeStamp); + if (history != null && history.size() > 0) { + filteredUids.add(uid); + } + } catch (RemoteException e) { + Log.w(TAG, "Error while getting history of uid " + uid, e); + } + } + mUids = filteredUids.toArray(); + mUidOrUidIndex = -1; stepHistory(); } @@ -468,11 +487,6 @@ public final class NetworkStats implements AutoCloseable { mUidOrUidIndex = uid; } - private void setUidEnumeration(int[] uids) { - mUids = uids; - mUidOrUidIndex = -1; - } - private void stepUid() { if (mUids != null) { ++mUidOrUidIndex; -- cgit v1.1