diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2021-02-21 19:08:28 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-02-21 19:08:28 +0000 |
| commit | 863e3fee2b4a99fa3fd7579d5847e8acaa2288b0 (patch) | |
| tree | 38527930ba7e5a95f934705b77bd2120e3650bcd /core/java | |
| parent | 7444a36439b0da7c002e32e70dedeed5e1be1b64 (diff) | |
| parent | 8c2e375c1f626ceeefc885093757c2e770afd745 (diff) | |
Merge "Measured energy for Ambient Display in BatteryUsageStats" into sc-dev
Diffstat (limited to 'core/java')
4 files changed, 30 insertions, 20 deletions
diff --git a/core/java/android/os/BatteryUsageStatsQuery.java b/core/java/android/os/BatteryUsageStatsQuery.java index 5b5fe1d15a82..17cb735eea49 100644 --- a/core/java/android/os/BatteryUsageStatsQuery.java +++ b/core/java/android/os/BatteryUsageStatsQuery.java @@ -79,6 +79,14 @@ public final class BatteryUsageStatsQuery implements Parcelable { return mUserIds; } + /** + * Returns true if the power calculations must be based on the PowerProfile constants, + * even if measured energy data is available. + */ + public boolean shouldForceUsePowerProfileModel() { + return (mFlags & FLAG_BATTERY_USAGE_STATS_POWER_PROFILE_MODEL) != 0; + } + private BatteryUsageStatsQuery(Parcel in) { mFlags = in.readInt(); mUserIds = new int[in.readInt()]; diff --git a/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java b/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java index 13130902feb8..e153eb2f0933 100644 --- a/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java +++ b/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java @@ -46,14 +46,12 @@ public class AmbientDisplayPowerCalculator extends PowerCalculator { long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) { final long durationMs = calculateDuration(batteryStats, rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED); - final double powerMah = mPowerEstimator.calculatePower(durationMs); - if (powerMah > 0) { - builder.getOrCreateSystemBatteryConsumerBuilder( - SystemBatteryConsumer.DRAIN_TYPE_AMBIENT_DISPLAY) - .setConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE, powerMah) - .setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_USAGE, durationMs); - } - // TODO(b/178140704): Attribute *measured* total usage for BatteryUsageStats. + final double powerMah = getMeasuredOrEstimatedPower(batteryStats.getScreenDozeEnergy(), + mPowerEstimator, durationMs, query.shouldForceUsePowerProfileModel()); + builder.getOrCreateSystemBatteryConsumerBuilder( + SystemBatteryConsumer.DRAIN_TYPE_AMBIENT_DISPLAY) + .setConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE, powerMah) + .setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_USAGE, durationMs); } /** @@ -66,8 +64,8 @@ public class AmbientDisplayPowerCalculator extends PowerCalculator { public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats, long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) { final long durationMs = calculateDuration(batteryStats, rawRealtimeUs, statsType); - final double powerMah = getMeasuredOrEstimatedPower( - batteryStats.getScreenDozeEnergy(), durationMs); + final double powerMah = getMeasuredOrEstimatedPower(batteryStats.getScreenDozeEnergy(), + mPowerEstimator, durationMs, false); if (powerMah > 0) { BatterySipper bs = new BatterySipper(BatterySipper.DrainType.AMBIENT_DISPLAY, null, 0); bs.usagePowerMah = powerMah; @@ -81,11 +79,4 @@ public class AmbientDisplayPowerCalculator extends PowerCalculator { return batteryStats.getScreenDozeTime(rawRealtimeUs, statsType) / 1000; } - private double getMeasuredOrEstimatedPower(long measuredEnergyUJ, long durationMs) { - if (measuredEnergyUJ != BatteryStats.ENERGY_DATA_UNAVAILABLE) { - return uJtoMah(measuredEnergyUJ); - } else { - return mPowerEstimator.calculatePower(durationMs); - } - } } diff --git a/core/java/com/android/internal/os/PowerCalculator.java b/core/java/com/android/internal/os/PowerCalculator.java index 7c45cc09e18c..fe4fb7afa1f5 100644 --- a/core/java/com/android/internal/os/PowerCalculator.java +++ b/core/java/com/android/internal/os/PowerCalculator.java @@ -113,6 +113,19 @@ public abstract class PowerCalculator { } /** + * Returns either the measured energy converted to mAh or a usage-based estimate. + */ + protected static double getMeasuredOrEstimatedPower(long measuredEnergyUj, + UsageBasedPowerEstimator powerEstimator, long durationMs, + boolean forceUsePowerProfileModel) { + if (measuredEnergyUj != BatteryStats.ENERGY_DATA_UNAVAILABLE + && !forceUsePowerProfileModel) { + return uJtoMah(measuredEnergyUj); + } + return powerEstimator.calculatePower(durationMs); + } + + /** * Converts charge in mAh to string. */ public static String formatCharge(double power) { diff --git a/core/java/com/android/internal/os/ScreenPowerCalculator.java b/core/java/com/android/internal/os/ScreenPowerCalculator.java index c1dd7ce662f7..5dca8d5e70fa 100644 --- a/core/java/com/android/internal/os/ScreenPowerCalculator.java +++ b/core/java/com/android/internal/os/ScreenPowerCalculator.java @@ -61,12 +61,10 @@ public class ScreenPowerCalculator extends PowerCalculator { public void calculate(BatteryUsageStats.Builder builder, BatteryStats batteryStats, long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) { final PowerAndDuration totalPowerAndDuration = new PowerAndDuration(); - final boolean forceUsePowerProfileModel = (query.getFlags() - & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_POWER_PROFILE_MODEL) != 0; final boolean useEnergyData = calculateTotalDurationAndPower(totalPowerAndDuration, batteryStats, rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED, - forceUsePowerProfileModel); + query.shouldForceUsePowerProfileModel()); builder.getOrCreateSystemBatteryConsumerBuilder(SystemBatteryConsumer.DRAIN_TYPE_SCREEN) .setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_USAGE, |
