Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be1e405c authored by Hugo Benichi's avatar Hugo Benichi Committed by Gerrit Code Review
Browse files

Merge "NetworkStats: more robust subtraction for deltas"

parents 6c7c5520 faf8348a
Loading
Loading
Loading
Loading
+22 −25
Original line number Original line Diff line number Diff line
@@ -677,27 +677,25 @@ 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];

            // find remote row that matches, and subtract
            final int j = right.findIndexHinted(entry.iface, entry.uid, entry.set, entry.tag,
                    entry.metered, entry.roaming, i);
            if (j == -1) {
                // newly appearing row, return entire value
            entry.rxBytes = left.rxBytes[i];
            entry.rxBytes = left.rxBytes[i];
            entry.rxPackets = left.rxPackets[i];
            entry.rxPackets = left.rxPackets[i];
            entry.txBytes = left.txBytes[i];
            entry.txBytes = left.txBytes[i];
            entry.txPackets = left.txPackets[i];
            entry.txPackets = left.txPackets[i];
            entry.operations = left.operations[i];
            entry.operations = left.operations[i];
            } else {

                // existing row, subtract remote value
            // find remote row that matches, and subtract
                entry.rxBytes = left.rxBytes[i] - right.rxBytes[j];
            final int j = right.findIndexHinted(entry.iface, entry.uid, entry.set, entry.tag,
                entry.rxPackets = left.rxPackets[i] - right.rxPackets[j];
                    entry.metered, entry.roaming, i);
                entry.txBytes = left.txBytes[i] - right.txBytes[j];
            if (j != -1) {
                entry.txPackets = left.txPackets[i] - right.txPackets[j];
                // Found matching row, subtract remote value.
                entry.operations = left.operations[i] - right.operations[j];
                entry.rxBytes -= right.rxBytes[j];

                entry.rxPackets -= right.rxPackets[j];
                if (entry.rxBytes < 0 || entry.rxPackets < 0 || entry.txBytes < 0
                entry.txBytes -= right.txBytes[j];
                        || entry.txPackets < 0 || entry.operations < 0) {
                entry.txPackets -= right.txPackets[j];
                entry.operations -= right.operations[j];
            }

            if (entry.isNegative()) {
                if (observer != null) {
                if (observer != null) {
                    observer.foundNonMonotonic(left, i, right, j, cookie);
                    observer.foundNonMonotonic(left, i, right, j, cookie);
                }
                }
@@ -707,7 +705,6 @@ public class NetworkStats implements Parcelable {
                entry.txPackets = Math.max(entry.txPackets, 0);
                entry.txPackets = Math.max(entry.txPackets, 0);
                entry.operations = Math.max(entry.operations, 0);
                entry.operations = Math.max(entry.operations, 0);
            }
            }
            }


            result.addValues(entry);
            result.addValues(entry);
        }
        }