diff options
| author | 2024-08-23 09:10:42 +0000 | |
|---|---|---|
| committer | 2024-08-23 09:10:42 +0000 | |
| commit | f0cda79ad67db38bc017546b1ce2c08b58fbbf2c (patch) | |
| tree | f5e47f5b37061f761496d5dafc17e2eec12542e2 | |
| parent | a509d52d68f51470d1af3a5cf7b19e44333d4245 (diff) | |
| parent | 6e70fdcb9fb97d0caabaf6e5420eee5cebc9ccff (diff) | |
Merge "Fix WifiAcitvityEnergyInfo handling in BatteryStats" into main
3 files changed, 42 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/power/stats/BatteryExternalStatsWorker.java b/services/core/java/com/android/server/power/stats/BatteryExternalStatsWorker.java index 2f1641980784..46e779fb0c45 100644 --- a/services/core/java/com/android/server/power/stats/BatteryExternalStatsWorker.java +++ b/services/core/java/com/android/server/power/stats/BatteryExternalStatsWorker.java @@ -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(); diff --git a/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java b/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java index 1d3de574991e..d04b73347c80 100644 --- a/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java +++ b/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java @@ -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); diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryExternalStatsWorkerTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryExternalStatsWorkerTest.java index bbab0eef49cb..7b635d4198c3 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryExternalStatsWorkerTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryExternalStatsWorkerTest.java @@ -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; @@ -88,6 +89,33 @@ public class BatteryExternalStatsWorkerTest { } @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; final int numDisplays = 5; |