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

Commit 73be9053 authored by Roshan Pius's avatar Roshan Pius Committed by android-build-merger
Browse files

Merge "Adjust wifi idle times to fit in system time period" into nyc-dev

am: e1f6975e

* commit 'e1f6975e':
  Adjust wifi idle times to fit in system time period

Change-Id: Id3dd41bab8096452d3f806304e2127cf1cc970c2
parents 8c9ffe1f e1f6975e
Loading
Loading
Loading
Loading
+47 −42
Original line number Original line Diff line number Diff line
@@ -1323,36 +1323,28 @@ public final class BatteryStatsService extends IBatteryStats.Stub
        delta.mTimestamp = latest.getTimeStamp();
        delta.mTimestamp = latest.getTimeStamp();
        delta.mStackState = latest.getStackState();
        delta.mStackState = latest.getStackState();


        // These times seem to be the most reliable.
        final long txTimeMs = latest.mControllerTxTimeMs - lastTxMs;
        delta.mControllerTxTimeMs = latest.mControllerTxTimeMs - lastTxMs;
        final long rxTimeMs = latest.mControllerRxTimeMs - lastRxMs;
        delta.mControllerRxTimeMs = latest.mControllerRxTimeMs - lastRxMs;
        final long idleTimeMs = latest.mControllerIdleTimeMs - lastIdleMs;


        // WiFi calculates the idle time as a difference from the on time and the various
        if (txTimeMs < 0 || rxTimeMs < 0) {
        // Rx + Tx times. There seems to be some missing time there because this sometimes
        // becomes negative. Just cap it at 0 and move on.
        // b/21613534
        delta.mControllerIdleTimeMs = Math.max(0, latest.mControllerIdleTimeMs - lastIdleMs);
        delta.mControllerEnergyUsed = Math.max(0, latest.mControllerEnergyUsed - lastEnergy);

        if (delta.mControllerTxTimeMs < 0 || delta.mControllerRxTimeMs < 0) {
            // The stats were reset by the WiFi system (which is why our delta is negative).
            // The stats were reset by the WiFi system (which is why our delta is negative).
            // Returns the unaltered stats.
            // Returns the unaltered stats.
            delta.mControllerEnergyUsed = latest.mControllerEnergyUsed;
            delta.mControllerEnergyUsed = latest.mControllerEnergyUsed;
            delta.mControllerRxTimeMs = latest.mControllerRxTimeMs;
            delta.mControllerRxTimeMs = latest.mControllerRxTimeMs;
            delta.mControllerTxTimeMs = latest.mControllerTxTimeMs;
            delta.mControllerTxTimeMs = latest.mControllerTxTimeMs;
            delta.mControllerIdleTimeMs = latest.mControllerIdleTimeMs;
            delta.mControllerIdleTimeMs = latest.mControllerIdleTimeMs;

            Slog.v(TAG, "WiFi energy data was reset, new WiFi energy data is " + delta);
            Slog.v(TAG, "WiFi energy data was reset, new WiFi energy data is " + delta);
        }
        } else {

            final long totalActiveTimeMs = txTimeMs + rxTimeMs;
        // There is some accuracy error in reports so allow some slop in the results.
            long maxExpectedIdleTimeMs;
        final long SAMPLE_ERROR_MILLIS = 750;
            // Active time can never be greater than the total time, the stats received seem
        final long totalTimeMs = delta.mControllerIdleTimeMs + delta.mControllerRxTimeMs +
            // to be corrupt.
                delta.mControllerTxTimeMs;
            if (totalActiveTimeMs > timePeriodMs) {
        if (totalTimeMs > timePeriodMs + SAMPLE_ERROR_MILLIS) {
                maxExpectedIdleTimeMs = timePeriodMs;
                StringBuilder sb = new StringBuilder();
                StringBuilder sb = new StringBuilder();
            sb.append("Total time ");
                sb.append("Total Active time ");
            TimeUtils.formatDuration(totalTimeMs, sb);
                TimeUtils.formatDuration(totalActiveTimeMs, sb);
                sb.append(" is longer than sample period ");
                sb.append(" is longer than sample period ");
                TimeUtils.formatDuration(timePeriodMs, sb);
                TimeUtils.formatDuration(timePeriodMs, sb);
                sb.append(".\n");
                sb.append(".\n");
@@ -1372,6 +1364,19 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                TimeUtils.formatDuration(latest.mControllerTxTimeMs, sb);
                TimeUtils.formatDuration(latest.mControllerTxTimeMs, sb);
                sb.append(" e=").append(latest.mControllerEnergyUsed);
                sb.append(" e=").append(latest.mControllerEnergyUsed);
                Slog.wtf(TAG, sb.toString());
                Slog.wtf(TAG, sb.toString());
            } else {
                maxExpectedIdleTimeMs = timePeriodMs - totalActiveTimeMs;
            }
            // These times seem to be the most reliable.
            delta.mControllerTxTimeMs = txTimeMs;
            delta.mControllerRxTimeMs = rxTimeMs;
            // WiFi calculates the idle time as a difference from the on time and the various
            // Rx + Tx times. There seems to be some missing time there because this sometimes
            // becomes negative. Just cap it at 0 and ensure that it is less than the expected idle
            // time from the difference in timestamps.
            // b/21613534
            delta.mControllerIdleTimeMs = Math.min(maxExpectedIdleTimeMs, Math.max(0, idleTimeMs));
            delta.mControllerEnergyUsed = Math.max(0, latest.mControllerEnergyUsed - lastEnergy);
        }
        }


        mLastInfo = latest;
        mLastInfo = latest;