Loading core/java/android/net/NetworkStats.java +2 −0 Original line number Diff line number Diff line Loading @@ -1100,6 +1100,8 @@ public class NetworkStats implements Parcelable { public interface NonMonotonicObserver<C> { public void foundNonMonotonic( NetworkStats left, int leftIndex, NetworkStats right, int rightIndex, C cookie); public void foundNonMonotonic( NetworkStats stats, int statsIndex, C cookie); } /** Loading services/core/java/com/android/server/net/NetworkStatsRecorder.java +14 −0 Original line number Diff line number Diff line Loading @@ -241,6 +241,20 @@ public class NetworkStatsRecorder { NetworkStats.Entry entry = null; for (int i = 0; i < delta.size(); i++) { entry = delta.getValues(i, entry); // As a last-ditch sanity check, report any negative values and // clamp them so recording below doesn't croak. if (entry.isNegative()) { if (mObserver != null) { mObserver.foundNonMonotonic(delta, i, mCookie); } entry.rxBytes = Math.max(entry.rxBytes, 0); entry.rxPackets = Math.max(entry.rxPackets, 0); entry.txBytes = Math.max(entry.txBytes, 0); entry.txPackets = Math.max(entry.txPackets, 0); entry.operations = Math.max(entry.operations, 0); } final NetworkIdentitySet ident = ifaceIdent.get(entry.iface); if (ident == null) { unknownIfaces.add(entry.iface); Loading services/core/java/com/android/server/net/NetworkStatsService.java +16 −4 Original line number Diff line number Diff line Loading @@ -1716,7 +1716,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { @Override public void foundNonMonotonic(NetworkStats left, int leftIndex, NetworkStats right, int rightIndex, String cookie) { Log.w(TAG, "found non-monotonic values; saving to dropbox"); Log.w(TAG, "Found non-monotonic values; saving to dropbox"); // record error for debugging final StringBuilder builder = new StringBuilder(); Loading @@ -1725,9 +1725,21 @@ public class NetworkStatsService extends INetworkStatsService.Stub { builder.append("left=").append(left).append('\n'); builder.append("right=").append(right).append('\n'); final DropBoxManager dropBox = (DropBoxManager) mContext.getSystemService( Context.DROPBOX_SERVICE); dropBox.addText(TAG_NETSTATS_ERROR, builder.toString()); mContext.getSystemService(DropBoxManager.class).addText(TAG_NETSTATS_ERROR, builder.toString()); } @Override public void foundNonMonotonic( NetworkStats stats, int statsIndex, String cookie) { Log.w(TAG, "Found non-monotonic values; saving to dropbox"); final StringBuilder builder = new StringBuilder(); builder.append("Found non-monotonic " + cookie + " values at [" + statsIndex + "]\n"); builder.append("stats=").append(stats).append('\n'); mContext.getSystemService(DropBoxManager.class).addText(TAG_NETSTATS_ERROR, builder.toString()); } } Loading Loading
core/java/android/net/NetworkStats.java +2 −0 Original line number Diff line number Diff line Loading @@ -1100,6 +1100,8 @@ public class NetworkStats implements Parcelable { public interface NonMonotonicObserver<C> { public void foundNonMonotonic( NetworkStats left, int leftIndex, NetworkStats right, int rightIndex, C cookie); public void foundNonMonotonic( NetworkStats stats, int statsIndex, C cookie); } /** Loading
services/core/java/com/android/server/net/NetworkStatsRecorder.java +14 −0 Original line number Diff line number Diff line Loading @@ -241,6 +241,20 @@ public class NetworkStatsRecorder { NetworkStats.Entry entry = null; for (int i = 0; i < delta.size(); i++) { entry = delta.getValues(i, entry); // As a last-ditch sanity check, report any negative values and // clamp them so recording below doesn't croak. if (entry.isNegative()) { if (mObserver != null) { mObserver.foundNonMonotonic(delta, i, mCookie); } entry.rxBytes = Math.max(entry.rxBytes, 0); entry.rxPackets = Math.max(entry.rxPackets, 0); entry.txBytes = Math.max(entry.txBytes, 0); entry.txPackets = Math.max(entry.txPackets, 0); entry.operations = Math.max(entry.operations, 0); } final NetworkIdentitySet ident = ifaceIdent.get(entry.iface); if (ident == null) { unknownIfaces.add(entry.iface); Loading
services/core/java/com/android/server/net/NetworkStatsService.java +16 −4 Original line number Diff line number Diff line Loading @@ -1716,7 +1716,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { @Override public void foundNonMonotonic(NetworkStats left, int leftIndex, NetworkStats right, int rightIndex, String cookie) { Log.w(TAG, "found non-monotonic values; saving to dropbox"); Log.w(TAG, "Found non-monotonic values; saving to dropbox"); // record error for debugging final StringBuilder builder = new StringBuilder(); Loading @@ -1725,9 +1725,21 @@ public class NetworkStatsService extends INetworkStatsService.Stub { builder.append("left=").append(left).append('\n'); builder.append("right=").append(right).append('\n'); final DropBoxManager dropBox = (DropBoxManager) mContext.getSystemService( Context.DROPBOX_SERVICE); dropBox.addText(TAG_NETSTATS_ERROR, builder.toString()); mContext.getSystemService(DropBoxManager.class).addText(TAG_NETSTATS_ERROR, builder.toString()); } @Override public void foundNonMonotonic( NetworkStats stats, int statsIndex, String cookie) { Log.w(TAG, "Found non-monotonic values; saving to dropbox"); final StringBuilder builder = new StringBuilder(); builder.append("Found non-monotonic " + cookie + " values at [" + statsIndex + "]\n"); builder.append("stats=").append(stats).append('\n'); mContext.getSystemService(DropBoxManager.class).addText(TAG_NETSTATS_ERROR, builder.toString()); } } Loading