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

Commit 6e70fdcb authored by Michael Wachenschwanz's avatar Michael Wachenschwanz
Browse files

Fix WifiAcitvityEnergyInfo handling in BatteryStats

Flag: EXEMPT bugfix
Test: atest BatteryExternalStatsWorkerTest
Bug: 342992319
Change-Id: Id91d80fdca11dbba68fb05ac51e04b236561a076
parent 74c3669c
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -149,8 +149,7 @@ public class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStat
    // WiFi keeps an accumulated total of stats. Keep the last WiFi stats so we can compute a delta.
    // (This is unlike Bluetooth, where BatteryStatsImpl is left responsible for taking the delta.)
    @GuardedBy("mWorkerLock")
    private WifiActivityEnergyInfo mLastWifiInfo =
            new WifiActivityEnergyInfo(0, 0, 0, 0, 0, 0);
    private WifiActivityEnergyInfo mLastWifiInfo = null;

    /**
     * Maps an {@link EnergyConsumerType} to it's corresponding {@link EnergyConsumer#id}s,
@@ -827,8 +826,18 @@ public class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStat
        return null;
    }

    /**
     * Return a delta WifiActivityEnergyInfo from the last WifiActivityEnergyInfo passed to the
     * method.
     */
    @VisibleForTesting
    @GuardedBy("mWorkerLock")
    private WifiActivityEnergyInfo extractDeltaLocked(WifiActivityEnergyInfo latest) {
    public WifiActivityEnergyInfo extractDeltaLocked(WifiActivityEnergyInfo latest) {
        if (mLastWifiInfo == null) {
            // This is the first time WifiActivityEnergyInfo has been collected since system boot.
            // Use this first WifiActivityEnergyInfo as the starting point for all accumulations.
            mLastWifiInfo = latest;
        }
        final long timePeriodMs = latest.getTimeSinceBootMillis()
                - mLastWifiInfo.getTimeSinceBootMillis();
        final long lastScanMs = mLastWifiInfo.getControllerScanDurationMillis();
+2 −1
Original line number Diff line number Diff line
@@ -15487,7 +15487,8 @@ public class BatteryStatsImpl extends BatteryStats {
        final long txTimeMs = counter.getTxTimeCounters()[0].getCountLocked(which);
        final long totalControllerActivityTimeMs =
                computeBatteryRealtime(mClock.elapsedRealtime() * 1000, which) / 1000;
        final long sleepTimeMs = totalControllerActivityTimeMs - (idleTimeMs + rxTimeMs + txTimeMs);
        final long sleepTimeMs = Math.max(0,
                totalControllerActivityTimeMs - (idleTimeMs + rxTimeMs + txTimeMs));
        final long energyConsumedMaMs = counter.getPowerCounter().getCountLocked(which);
        final long monitoredRailChargeConsumedMaMs =
                counter.getMonitoredRailChargeConsumedMaMs().getCountLocked(which);
+28 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import android.hardware.power.stats.PowerEntity;
import android.hardware.power.stats.StateResidencyResult;
import android.os.Handler;
import android.os.Looper;
import android.os.connectivity.WifiActivityEnergyInfo;
import android.platform.test.ravenwood.RavenwoodRule;
import android.power.PowerStatsInternal;
import android.util.IntArray;
@@ -87,6 +88,33 @@ public class BatteryExternalStatsWorkerTest {
                new BatteryExternalStatsWorker(new TestInjector(context), batteryStats);
    }

    @Test
    public void testUpdateWifiState() {
        WifiActivityEnergyInfo firstInfo = new WifiActivityEnergyInfo(1111,
                WifiActivityEnergyInfo.STACK_STATE_STATE_ACTIVE, 11, 22, 33, 44);

        WifiActivityEnergyInfo delta = mBatteryExternalStatsWorker.extractDeltaLocked(firstInfo);

        assertEquals(1111, delta.getTimeSinceBootMillis());
        assertEquals(WifiActivityEnergyInfo.STACK_STATE_STATE_ACTIVE, delta.getStackState());
        assertEquals(0, delta.getControllerTxDurationMillis());
        assertEquals(0, delta.getControllerRxDurationMillis());
        assertEquals(0, delta.getControllerScanDurationMillis());
        assertEquals(0, delta.getControllerIdleDurationMillis());

        WifiActivityEnergyInfo secondInfo = new WifiActivityEnergyInfo(91111,
                WifiActivityEnergyInfo.STACK_STATE_STATE_IDLE, 811, 722, 633, 544);

        delta = mBatteryExternalStatsWorker.extractDeltaLocked(secondInfo);

        assertEquals(91111, delta.getTimeSinceBootMillis());
        assertEquals(WifiActivityEnergyInfo.STACK_STATE_STATE_IDLE, delta.getStackState());
        assertEquals(800, delta.getControllerTxDurationMillis());
        assertEquals(700, delta.getControllerRxDurationMillis());
        assertEquals(600, delta.getControllerScanDurationMillis());
        assertEquals(500, delta.getControllerIdleDurationMillis());
    }

    @Test
    public void testTargetedEnergyConsumerQuerying() {
        final int numCpuClusters = 4;