From 357b5b365bede83d2e30f11a7d50ba2cb1c3a6ac Mon Sep 17 00:00:00 2001 From: Dmitri Plotnikov Date: Wed, 10 Jul 2024 11:08:57 -0700 Subject: Fix initial collection of WifiActivityEnergyInfo We should not assume that the initial WifiActivityEnergyInfo would be empty. The data in that object comes from the WiFi controller, which may have accumulated stats since the hardware reset. Bug: 351648321 Test: atest PowerStatsTests; atest PowerStatsTestsRavenwood Flag: com.android.server.power.optimization.streamlined_connectivity_battery_stats Change-Id: If6168457aa72874d61145bc8c39640488f11dfd3 --- .../power/stats/WifiPowerStatsCollector.java | 26 +++++++++++++--------- .../power/stats/WifiPowerStatsCollectorTest.java | 2 +- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/power/stats/WifiPowerStatsCollector.java b/services/core/java/com/android/server/power/stats/WifiPowerStatsCollector.java index 6d519ee200c2..90981ada7c31 100644 --- a/services/core/java/com/android/server/power/stats/WifiPowerStatsCollector.java +++ b/services/core/java/com/android/server/power/stats/WifiPowerStatsCollector.java @@ -86,8 +86,7 @@ public class WifiPowerStatsCollector extends PowerStatsCollector { private ConsumedEnergyRetriever mConsumedEnergyRetriever; private IntSupplier mVoltageSupplier; private int[] mEnergyConsumerIds = new int[0]; - private WifiActivityEnergyInfo mLastWifiActivityInfo = - new WifiActivityEnergyInfo(0, 0, 0, 0, 0, 0); + private WifiActivityEnergyInfo mLastWifiActivityInfo; private NetworkStats mLastNetworkStats; private long[] mLastConsumedEnergyUws; private int mLastVoltageMv; @@ -206,14 +205,21 @@ public class WifiPowerStatsCollector extends PowerStatsCollector { return null; } - long rxDuration = activityInfo.getControllerRxDurationMillis() - - mLastWifiActivityInfo.getControllerRxDurationMillis(); - long txDuration = activityInfo.getControllerTxDurationMillis() - - mLastWifiActivityInfo.getControllerTxDurationMillis(); - long scanDuration = activityInfo.getControllerScanDurationMillis() - - mLastWifiActivityInfo.getControllerScanDurationMillis(); - long idleDuration = activityInfo.getControllerIdleDurationMillis() - - mLastWifiActivityInfo.getControllerIdleDurationMillis(); + long rxDuration = 0; + long txDuration = 0; + long scanDuration = 0; + long idleDuration = 0; + + if (mLastWifiActivityInfo != null) { + rxDuration = activityInfo.getControllerRxDurationMillis() + - mLastWifiActivityInfo.getControllerRxDurationMillis(); + txDuration = activityInfo.getControllerTxDurationMillis() + - mLastWifiActivityInfo.getControllerTxDurationMillis(); + scanDuration = activityInfo.getControllerScanDurationMillis() + - mLastWifiActivityInfo.getControllerScanDurationMillis(); + idleDuration = activityInfo.getControllerIdleDurationMillis() + - mLastWifiActivityInfo.getControllerIdleDurationMillis(); + } mLayout.setDeviceRxTime(mDeviceStats, rxDuration); mLayout.setDeviceTxTime(mDeviceStats, txDuration); diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsCollectorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsCollectorTest.java index 362607b91763..b13fc530399b 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsCollectorTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsCollectorTest.java @@ -355,7 +355,7 @@ public class WifiPowerStatsCollectorTest { assertThat(stats.getNumBytesRx()).isEqualTo(13321); assertThat(stats.getNumPacketsTx()).isEqualTo(263); assertThat(stats.getNumBytesTx()).isEqualTo(7234); - assertThat(stats.getScanTimeMillis()).isEqualTo(2200); + assertThat(stats.getScanTimeMillis()).isEqualTo(200); assertThat(stats.getRxTimeMillis()).isEqualTo(6000); assertThat(stats.getTxTimeMillis()).isEqualTo(1000); assertThat(stats.getIdleTimeMillis()).isEqualTo(300); -- cgit v1.2.3-59-g8ed1b