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
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 6d519ee..90981ada 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 @@
     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 @@
             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 362607b..b13fc53 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 @@
         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);