Loading core/java/com/android/internal/os/BatteryStatsImpl.java +5 −1 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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); } Loading core/java/com/android/internal/power/MeasuredEnergyStats.java +7 −1 Original line number Diff line number Diff line Loading @@ -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); } Loading core/tests/coretests/src/com/android/internal/power/MeasuredEnergyStatsTest.java +4 −4 Original line number Diff line number Diff line Loading @@ -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 Loading services/core/java/com/android/server/am/BatteryExternalStatsWorker.java +8 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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(); } Loading Loading @@ -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); } Loading Loading @@ -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(); } Loading services/core/java/com/android/server/am/BatteryStatsService.java +17 −8 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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() final BatteryUsageStatsQuery queryBeforeReset = new BatteryUsageStatsQuery.Builder() .includeProcessStateData() .aggregateSnapshots(sessionStart, sessionEnd) .build(); bus = getBatteryUsageStats(List.of(query)).get(0); bus = getBatteryUsageStats(List.of(queryBeforeReset)).get(0); mBatteryUsageStatsStore .setLastBatteryUsageStatsBeforeResetAtomPullTimestamp(sessionEnd); break; Loading Loading
core/java/com/android/internal/os/BatteryStatsImpl.java +5 −1 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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); } Loading
core/java/com/android/internal/power/MeasuredEnergyStats.java +7 −1 Original line number Diff line number Diff line Loading @@ -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); } Loading
core/tests/coretests/src/com/android/internal/power/MeasuredEnergyStatsTest.java +4 −4 Original line number Diff line number Diff line Loading @@ -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 Loading
services/core/java/com/android/server/am/BatteryExternalStatsWorker.java +8 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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(); } Loading Loading @@ -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); } Loading Loading @@ -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(); } Loading
services/core/java/com/android/server/am/BatteryStatsService.java +17 −8 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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() final BatteryUsageStatsQuery queryBeforeReset = new BatteryUsageStatsQuery.Builder() .includeProcessStateData() .aggregateSnapshots(sessionStart, sessionEnd) .build(); bus = getBatteryUsageStats(List.of(query)).get(0); bus = getBatteryUsageStats(List.of(queryBeforeReset)).get(0); mBatteryUsageStatsStore .setLastBatteryUsageStatsBeforeResetAtomPullTimestamp(sessionEnd); break; Loading