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

Commit 97f62bf6 authored by Siddharth Ray's avatar Siddharth Ray
Browse files

Fix in Wifi activity updates

When Wifi firmware resets link layer stats, it sometimes returns a value
for On time which is much larger than the duration of the report.
On time = Idle time + Rx time + Tx time.
This change prevents those errors from affecting Wifi power metrics.

BUG:110325882
Test:
adb shell dumpsys batterystats
WiFi Scan time:  12s 302ms
WiFi Idle time:   5m 48s 634ms
WiFi Rx time:     24s 232ms
WiFi Tx time:     10s 510ms

Change-Id: I7b69fc728b275f89154dd0c1d7382576ebfadc29
parent 726df7ef
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -543,14 +543,25 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync {
        final long idleTimeMs = latest.mControllerIdleTimeMs - lastIdleMs;
        final long scanTimeMs = latest.mControllerScanTimeMs - lastScanMs;

        if (txTimeMs < 0 || rxTimeMs < 0 || scanTimeMs < 0) {
        if (txTimeMs < 0 || rxTimeMs < 0 || scanTimeMs < 0 || idleTimeMs < 0) {
            // The stats were reset by the WiFi system (which is why our delta is negative).
            // Returns the unaltered stats.
            // Returns the unaltered stats. The total on time should not exceed the time
            // duartion between reports.
            final long totalOnTimeMs = latest.mControllerTxTimeMs + latest.mControllerRxTimeMs
                        + latest.mControllerIdleTimeMs;
            if (totalOnTimeMs <= timePeriodMs + MAX_WIFI_STATS_SAMPLE_ERROR_MILLIS) {
                delta.mControllerEnergyUsed = latest.mControllerEnergyUsed;
                delta.mControllerRxTimeMs = latest.mControllerRxTimeMs;
                delta.mControllerTxTimeMs = latest.mControllerTxTimeMs;
                delta.mControllerIdleTimeMs = latest.mControllerIdleTimeMs;
                delta.mControllerScanTimeMs = latest.mControllerScanTimeMs;
            } else {
                delta.mControllerEnergyUsed = 0;
                delta.mControllerRxTimeMs = 0;
                delta.mControllerTxTimeMs = 0;
                delta.mControllerIdleTimeMs = 0;
                delta.mControllerScanTimeMs = 0;
            }
            Slog.v(TAG, "WiFi energy data was reset, new WiFi energy data is " + delta);
        } else {
            final long totalActiveTimeMs = txTimeMs + rxTimeMs;