From 2cb00ccc8f1c8e0640df009888804a5710364cea Mon Sep 17 00:00:00 2001 From: Dmitri Plotnikov Date: Tue, 14 Dec 2021 17:56:52 -0800 Subject: [PATCH] Fix MeasuredEnergyStats.reset() for per-process-state counters Bug: 191921016 Test: atest FrameworksCoreTests:MeasuredEnergyStatsTest Change-Id: I8a05503a31d07535d5d14907c8b145dd3dc20491 --- .../internal/power/MeasuredEnergyStats.java | 4 ++++ .../power/MeasuredEnergyStatsTest.java | 19 ++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/core/java/com/android/internal/power/MeasuredEnergyStats.java b/core/java/com/android/internal/power/MeasuredEnergyStats.java index 4dc9aa5228d69..a52ae107d9833 100644 --- a/core/java/com/android/internal/power/MeasuredEnergyStats.java +++ b/core/java/com/android/internal/power/MeasuredEnergyStats.java @@ -589,6 +589,10 @@ public class MeasuredEnergyStats { final int numIndices = mConfig.getNumberOfBuckets(); for (int index = 0; index < numIndices; index++) { setValueIfSupported(index, 0L); + if (mAccumulatedMultiStateChargeMicroCoulomb != null + && mAccumulatedMultiStateChargeMicroCoulomb[index] != null) { + mAccumulatedMultiStateChargeMicroCoulomb[index].reset(); + } } } diff --git a/core/tests/coretests/src/com/android/internal/power/MeasuredEnergyStatsTest.java b/core/tests/coretests/src/com/android/internal/power/MeasuredEnergyStatsTest.java index dc5bc9708f6ac..dbb2cf15dd8e7 100644 --- a/core/tests/coretests/src/com/android/internal/power/MeasuredEnergyStatsTest.java +++ b/core/tests/coretests/src/com/android/internal/power/MeasuredEnergyStatsTest.java @@ -465,16 +465,23 @@ public class MeasuredEnergyStatsTest { supportedStandardBuckets[POWER_BUCKET_SCREEN_DOZE] = false; supportedStandardBuckets[POWER_BUCKET_SCREEN_OTHER] = true; + final int[] supportedMultiStateBuckets = new int[]{POWER_BUCKET_SCREEN_ON}; final MeasuredEnergyStats.Config config = new MeasuredEnergyStats.Config(supportedStandardBuckets, customBucketNames, - new int[0], new String[]{"s"}); + supportedMultiStateBuckets, new String[]{"s1", "s2"}); final MeasuredEnergyStats stats = new MeasuredEnergyStats(config); - stats.updateStandardBucket(POWER_BUCKET_SCREEN_ON, 10); - stats.updateStandardBucket(POWER_BUCKET_SCREEN_ON, 5); + stats.setState(1, 0); + stats.updateStandardBucket(POWER_BUCKET_SCREEN_ON, 10, 1000); + stats.updateStandardBucket(POWER_BUCKET_SCREEN_ON, 5, 2000); stats.updateStandardBucket(POWER_BUCKET_SCREEN_OTHER, 40); stats.updateCustomBucket(0, 50); stats.updateCustomBucket(1, 60); + assertThat(stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_ON, 0)) + .isEqualTo(0); + assertThat(stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_ON, 1)) + .isEqualTo(15); + MeasuredEnergyStats.resetIfNotNull(stats); // All charges should be reset to 0 for (int i = 0; i < NUMBER_STANDARD_POWER_BUCKETS; i++) { @@ -485,7 +492,13 @@ public class MeasuredEnergyStatsTest { assertFalse(stats.isStandardBucketSupported(i)); assertEquals(POWER_DATA_UNAVAILABLE, stats.getAccumulatedStandardBucketCharge(i)); } + } + assertThat(stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_ON, 0)) + .isEqualTo(0); + assertThat(stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_ON, 1)) + .isEqualTo(0); + for (int i = 0; i < customBucketNames.length; i++) { assertEquals(0, stats.getAccumulatedCustomBucketCharge(i)); }