Merge "NetworkStats: more robust subtraction for deltas" into oc-dr1-dev am: 5e24152e33

am: b9d28344e0

Change-Id: I67d5dc4b52b254748ff17fe1e16c2eeb1d03c30d
This commit is contained in:
Hugo Benichi
2017-08-08 16:10:52 +00:00
committed by android-build-merger

View File

@@ -672,36 +672,33 @@ public class NetworkStats implements Parcelable {
entry.tag = left.tag[i]; entry.tag = left.tag[i];
entry.metered = left.metered[i]; entry.metered = left.metered[i];
entry.roaming = left.roaming[i]; entry.roaming = left.roaming[i];
entry.rxBytes = left.rxBytes[i];
entry.rxPackets = left.rxPackets[i];
entry.txBytes = left.txBytes[i];
entry.txPackets = left.txPackets[i];
entry.operations = left.operations[i];
// find remote row that matches, and subtract // find remote row that matches, and subtract
final int j = right.findIndexHinted(entry.iface, entry.uid, entry.set, entry.tag, final int j = right.findIndexHinted(entry.iface, entry.uid, entry.set, entry.tag,
entry.metered, entry.roaming, i); entry.metered, entry.roaming, i);
if (j == -1) { if (j != -1) {
// newly appearing row, return entire value // Found matching row, subtract remote value.
entry.rxBytes = left.rxBytes[i]; entry.rxBytes -= right.rxBytes[j];
entry.rxPackets = left.rxPackets[i]; entry.rxPackets -= right.rxPackets[j];
entry.txBytes = left.txBytes[i]; entry.txBytes -= right.txBytes[j];
entry.txPackets = left.txPackets[i]; entry.txPackets -= right.txPackets[j];
entry.operations = left.operations[i]; entry.operations -= right.operations[j];
} else { }
// existing row, subtract remote value
entry.rxBytes = left.rxBytes[i] - right.rxBytes[j];
entry.rxPackets = left.rxPackets[i] - right.rxPackets[j];
entry.txBytes = left.txBytes[i] - right.txBytes[j];
entry.txPackets = left.txPackets[i] - right.txPackets[j];
entry.operations = left.operations[i] - right.operations[j];
if (entry.rxBytes < 0 || entry.rxPackets < 0 || entry.txBytes < 0 if (entry.isNegative()) {
|| entry.txPackets < 0 || entry.operations < 0) { if (observer != null) {
if (observer != null) { observer.foundNonMonotonic(left, i, right, j, cookie);
observer.foundNonMonotonic(left, i, right, j, cookie);
}
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);
} }
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);
} }
result.addValues(entry); result.addValues(entry);