summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-08-23 09:10:42 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-08-23 09:10:42 +0000
commitf0cda79ad67db38bc017546b1ce2c08b58fbbf2c (patch)
treef5e47f5b37061f761496d5dafc17e2eec12542e2
parenta509d52d68f51470d1af3a5cf7b19e44333d4245 (diff)
parent6e70fdcb9fb97d0caabaf6e5420eee5cebc9ccff (diff)
Merge "Fix WifiAcitvityEnergyInfo handling in BatteryStats" into main
-rw-r--r--services/core/java/com/android/server/power/stats/BatteryExternalStatsWorker.java15
-rw-r--r--services/core/java/com/android/server/power/stats/BatteryStatsImpl.java3
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/BatteryExternalStatsWorkerTest.java28
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;