summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2021-02-21 19:08:28 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-02-21 19:08:28 +0000
commit863e3fee2b4a99fa3fd7579d5847e8acaa2288b0 (patch)
tree38527930ba7e5a95f934705b77bd2120e3650bcd /core/java
parent7444a36439b0da7c002e32e70dedeed5e1be1b64 (diff)
parent8c2e375c1f626ceeefc885093757c2e770afd745 (diff)
Merge "Measured energy for Ambient Display in BatteryUsageStats" into sc-dev
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/os/BatteryUsageStatsQuery.java8
-rw-r--r--core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java25
-rw-r--r--core/java/com/android/internal/os/PowerCalculator.java13
-rw-r--r--core/java/com/android/internal/os/ScreenPowerCalculator.java4
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,