diff options
5 files changed, 41 insertions, 18 deletions
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index c0fec62bdd94..5ba45c9b8bc3 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -607,11 +607,15 @@ public class BatteryStatsImpl extends BatteryStats { int UPDATE_BT = 0x08; int UPDATE_RPM = 0x10; int UPDATE_DISPLAY = 0x20; + int RESET = 0x40; + int UPDATE_ALL = UPDATE_CPU | UPDATE_WIFI | UPDATE_RADIO | UPDATE_BT | UPDATE_RPM | UPDATE_DISPLAY; int UPDATE_ON_PROC_STATE_CHANGE = UPDATE_WIFI | UPDATE_RADIO | UPDATE_BT; + int UPDATE_ON_RESET = UPDATE_ALL | RESET; + @IntDef(flag = true, prefix = "UPDATE_", value = { UPDATE_CPU, UPDATE_WIFI, @@ -12909,7 +12913,7 @@ public class BatteryStatsImpl extends BatteryStats { // Flush external data, gathering snapshots, but don't process it since it is pre-reset data mIgnoreNextExternalStats = true; - mExternalSync.scheduleSync("reset", ExternalStatsSync.UPDATE_ALL); + mExternalSync.scheduleSync("reset", ExternalStatsSync.UPDATE_ON_RESET); mHandler.sendEmptyMessage(MSG_REPORT_RESET_STATS); } diff --git a/core/java/com/android/internal/power/MeasuredEnergyStats.java b/core/java/com/android/internal/power/MeasuredEnergyStats.java index a52ae107d983..7262e846d9b0 100644 --- a/core/java/com/android/internal/power/MeasuredEnergyStats.java +++ b/core/java/com/android/internal/power/MeasuredEnergyStats.java @@ -438,10 +438,16 @@ public class MeasuredEnergyStats { mState = state; mStateChangeTimestampMs = timestampMs; if (mAccumulatedMultiStateChargeMicroCoulomb == null) { - return; + mAccumulatedMultiStateChargeMicroCoulomb = + new LongMultiStateCounter[mAccumulatedChargeMicroCoulomb.length]; } for (int i = 0; i < mAccumulatedMultiStateChargeMicroCoulomb.length; i++) { LongMultiStateCounter counter = mAccumulatedMultiStateChargeMicroCoulomb[i]; + if (counter == null && mConfig.isSupportedMultiStateBucket(i)) { + counter = new LongMultiStateCounter(mConfig.mStateNames.length); + counter.updateValue(0, timestampMs); + mAccumulatedMultiStateChargeMicroCoulomb[i] = counter; + } if (counter != null) { counter.setState(state, timestampMs); } 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 dbb2cf15dd8e..88349b38040c 100644 --- a/core/tests/coretests/src/com/android/internal/power/MeasuredEnergyStatsTest.java +++ b/core/tests/coretests/src/com/android/internal/power/MeasuredEnergyStatsTest.java @@ -383,10 +383,10 @@ public class MeasuredEnergyStatsTest { assertEquals(13, stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_ON, 0)); // 6 * (6000-4000)/(6000-2000) assertEquals(3, stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_ON, 1)); - - // POWER_BUCKET_SCREEN_OTHER was only present along with state=1 - assertEquals(0, stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_OTHER, 0)); - assertEquals(40, stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_OTHER, 1)); + // 40 * (4000-1000)/(5000-1000) + assertEquals(30, stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_OTHER, 0)); + // 40 * (5000-4000)/(5000-1000) + assertEquals(10, stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_OTHER, 1)); } @Test diff --git a/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java b/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java index 8561b61c2172..1131fa8a32b8 100644 --- a/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java +++ b/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java @@ -451,7 +451,7 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync { mUidsToRemove.clear(); mCurrentFuture = null; mUseLatestStates = true; - if (updateFlags == UPDATE_ALL) { + if ((updateFlags & UPDATE_ALL) == UPDATE_ALL) { cancelSyncDueToBatteryLevelChangeLocked(); } if ((updateFlags & UPDATE_CPU) != 0) { @@ -496,7 +496,11 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync { Slog.wtf(TAG, "Error updating external stats: ", e); } - if ((updateFlags & UPDATE_ALL) == UPDATE_ALL) { + if ((updateFlags & RESET) != 0) { + synchronized (BatteryExternalStatsWorker.this) { + mLastCollectionTimeStamp = 0; + } + } else if ((updateFlags & UPDATE_ALL) == UPDATE_ALL) { synchronized (BatteryExternalStatsWorker.this) { mLastCollectionTimeStamp = SystemClock.elapsedRealtime(); } @@ -658,7 +662,7 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync { mStats.updateCpuTimeLocked(onBattery, onBatteryScreenOff, cpuClusterChargeUC); } - if (updateFlags == UPDATE_ALL) { + if ((updateFlags & UPDATE_ALL) == UPDATE_ALL) { mStats.updateKernelWakelocksLocked(elapsedRealtimeUs); mStats.updateKernelMemoryBandwidthLocked(elapsedRealtimeUs); } @@ -731,7 +735,7 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync { uptime, networkStatsManager); } - if (updateFlags == UPDATE_ALL) { + if ((updateFlags & UPDATE_ALL) == UPDATE_ALL) { // This helps mStats deal with ignoring data from prior to resets. mStats.informThatAllExternalStatsAreFlushed(); } diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 5da461d8e392..2f7249ea5d84 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -797,12 +797,19 @@ public final class BatteryStatsService extends IBatteryStats.Stub final BatteryUsageStats bus; switch (atomTag) { case FrameworkStatsLog.BATTERY_USAGE_STATS_SINCE_RESET: - bus = getBatteryUsageStats(List.of(BatteryUsageStatsQuery.DEFAULT)).get(0); + final BatteryUsageStatsQuery querySinceReset = + new BatteryUsageStatsQuery.Builder() + .includeProcessStateData() + .build(); + bus = getBatteryUsageStats(List.of(querySinceReset)).get(0); break; case FrameworkStatsLog.BATTERY_USAGE_STATS_SINCE_RESET_USING_POWER_PROFILE_MODEL: - final BatteryUsageStatsQuery powerProfileQuery = - new BatteryUsageStatsQuery.Builder().powerProfileModeledOnly().build(); - bus = getBatteryUsageStats(List.of(powerProfileQuery)).get(0); + final BatteryUsageStatsQuery queryPowerProfile = + new BatteryUsageStatsQuery.Builder() + .includeProcessStateData() + .powerProfileModeledOnly() + .build(); + bus = getBatteryUsageStats(List.of(queryPowerProfile)).get(0); break; case FrameworkStatsLog.BATTERY_USAGE_STATS_BEFORE_RESET: if (!BATTERY_USAGE_STORE_ENABLED) { @@ -812,10 +819,12 @@ public final class BatteryStatsService extends IBatteryStats.Stub final long sessionStart = mBatteryUsageStatsStore .getLastBatteryUsageStatsBeforeResetAtomPullTimestamp(); final long sessionEnd = mStats.getStartClockTime(); - final BatteryUsageStatsQuery query = new BatteryUsageStatsQuery.Builder() - .aggregateSnapshots(sessionStart, sessionEnd) - .build(); - bus = getBatteryUsageStats(List.of(query)).get(0); + final BatteryUsageStatsQuery queryBeforeReset = + new BatteryUsageStatsQuery.Builder() + .includeProcessStateData() + .aggregateSnapshots(sessionStart, sessionEnd) + .build(); + bus = getBatteryUsageStats(List.of(queryBeforeReset)).get(0); mBatteryUsageStatsStore .setLastBatteryUsageStatsBeforeResetAtomPullTimestamp(sessionEnd); break; |