diff --git a/core/java/android/os/AggregateBatteryConsumer.java b/core/java/android/os/AggregateBatteryConsumer.java index bcf41cce7e7ce..449e3aeb6be61 100644 --- a/core/java/android/os/AggregateBatteryConsumer.java +++ b/core/java/android/os/AggregateBatteryConsumer.java @@ -25,17 +25,22 @@ import android.annotation.NonNull; */ public final class AggregateBatteryConsumer extends BatteryConsumer implements Parcelable { + private final double mConsumedPowerMah; + public AggregateBatteryConsumer(@NonNull Builder builder) { super(builder.mPowerComponentsBuilder.build()); + mConsumedPowerMah = builder.mConsumedPowerMah; } private AggregateBatteryConsumer(@NonNull Parcel source) { super(new PowerComponents(source)); + mConsumedPowerMah = source.readDouble(); } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { super.writeToParcel(dest, flags); + dest.writeDouble(mConsumedPowerMah); } @Override @@ -55,14 +60,29 @@ public final class AggregateBatteryConsumer extends BatteryConsumer implements P } }; + @Override + public double getConsumedPower() { + return mConsumedPowerMah; + } + /** * Builder for DeviceBatteryConsumer. */ public static final class Builder extends BaseBuilder { + private double mConsumedPowerMah; + public Builder(@NonNull String[] customPowerComponentNames, boolean includePowerModels) { super(customPowerComponentNames, includePowerModels); } + /** + * Sets the total power included in this aggregate. + */ + public Builder setConsumedPower(double consumedPowerMah) { + mConsumedPowerMah = consumedPowerMah; + return this; + } + /** * Creates a read-only object out of the Builder values. */ diff --git a/core/java/android/os/BatteryUsageStats.java b/core/java/android/os/BatteryUsageStats.java index e3af4834c3414..6bc861f87e48d 100644 --- a/core/java/android/os/BatteryUsageStats.java +++ b/core/java/android/os/BatteryUsageStats.java @@ -71,7 +71,6 @@ public final class BatteryUsageStats implements Parcelable { public static final int AGGREGATE_BATTERY_CONSUMER_SCOPE_COUNT = 2; - private final double mConsumedPower; private final int mDischargePercentage; private final long mStatsStartTimestampMs; private final double mDischargedPowerLowerBound; @@ -80,7 +79,6 @@ public final class BatteryUsageStats implements Parcelable { private final long mChargeTimeRemainingMs; private final String[] mCustomPowerComponentNames; private final List mUidBatteryConsumers; - private final List mSystemBatteryConsumers; private final List mUserBatteryConsumers; private final AggregateBatteryConsumer[] mAggregateBatteryConsumers; private final Parcel mHistoryBuffer; @@ -97,14 +95,7 @@ public final class BatteryUsageStats implements Parcelable { mChargeTimeRemainingMs = builder.mChargeTimeRemainingMs; mCustomPowerComponentNames = builder.mCustomPowerComponentNames; - mAggregateBatteryConsumers = - new AggregateBatteryConsumer[AGGREGATE_BATTERY_CONSUMER_SCOPE_COUNT]; - for (int i = 0; i < AGGREGATE_BATTERY_CONSUMER_SCOPE_COUNT; i++) { - mAggregateBatteryConsumers[i] = builder.mAggregateBatteryConsumersBuilders[i].build(); - } - - double totalPower = 0; - + double totalPowerMah = 0; final int uidBatteryConsumerCount = builder.mUidBatteryConsumerBuilders.size(); mUidBatteryConsumers = new ArrayList<>(uidBatteryConsumerCount); for (int i = 0; i < uidBatteryConsumerCount; i++) { @@ -112,30 +103,28 @@ public final class BatteryUsageStats implements Parcelable { builder.mUidBatteryConsumerBuilders.valueAt(i); if (!uidBatteryConsumerBuilder.isExcludedFromBatteryUsageStats()) { final UidBatteryConsumer consumer = uidBatteryConsumerBuilder.build(); - totalPower += consumer.getConsumedPower(); + totalPowerMah += consumer.getConsumedPower(); mUidBatteryConsumers.add(consumer); } } - final int systemBatteryConsumerCount = builder.mSystemBatteryConsumerBuilders.size(); - mSystemBatteryConsumers = new ArrayList<>(systemBatteryConsumerCount); - for (int i = 0; i < systemBatteryConsumerCount; i++) { - final SystemBatteryConsumer consumer = - builder.mSystemBatteryConsumerBuilders.valueAt(i).build(); - totalPower += consumer.getConsumedPower() - consumer.getPowerConsumedByApps(); - mSystemBatteryConsumers.add(consumer); - } - final int userBatteryConsumerCount = builder.mUserBatteryConsumerBuilders.size(); mUserBatteryConsumers = new ArrayList<>(userBatteryConsumerCount); for (int i = 0; i < userBatteryConsumerCount; i++) { final UserBatteryConsumer consumer = builder.mUserBatteryConsumerBuilders.valueAt(i).build(); - totalPower += consumer.getConsumedPower(); + totalPowerMah += consumer.getConsumedPower(); mUserBatteryConsumers.add(consumer); } - mConsumedPower = totalPower; + builder.getAggregateBatteryConsumerBuilder(AGGREGATE_BATTERY_CONSUMER_SCOPE_ALL_APPS) + .setConsumedPower(totalPowerMah); + + mAggregateBatteryConsumers = + new AggregateBatteryConsumer[AGGREGATE_BATTERY_CONSUMER_SCOPE_COUNT]; + for (int i = 0; i < AGGREGATE_BATTERY_CONSUMER_SCOPE_COUNT; i++) { + mAggregateBatteryConsumers[i] = builder.mAggregateBatteryConsumersBuilders[i].build(); + } } /** @@ -146,6 +135,15 @@ public final class BatteryUsageStats implements Parcelable { return mStatsStartTimestampMs; } + /** + * Total amount of battery charge drained since BatteryStats reset (e.g. due to being fully + * charged), in mAh + */ + public double getConsumedPower() { + return mAggregateBatteryConsumers[AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE] + .getConsumedPower(); + } + /** * Portion of battery charge drained since BatteryStats reset (e.g. due to being fully * charged), as percentage of the full charge in the range [0:100] @@ -181,14 +179,6 @@ public final class BatteryUsageStats implements Parcelable { return mChargeTimeRemainingMs; } - /** - * Total amount of battery charge drained since BatteryStats reset (e.g. due to being fully - * charged), in mAh - */ - public double getConsumedPower() { - return mConsumedPower; - } - /** * Returns a battery consumer for the specified battery consumer type. */ @@ -202,11 +192,6 @@ public final class BatteryUsageStats implements Parcelable { return mUidBatteryConsumers; } - @NonNull - public List getSystemBatteryConsumers() { - return mSystemBatteryConsumers; - } - @NonNull public List getUserBatteryConsumers() { return mUserBatteryConsumers; @@ -232,7 +217,6 @@ public final class BatteryUsageStats implements Parcelable { private BatteryUsageStats(@NonNull Parcel source) { mStatsStartTimestampMs = source.readLong(); - mConsumedPower = source.readDouble(); mDischargePercentage = source.readInt(); mDischargedPowerLowerBound = source.readDouble(); mDischargedPowerUpperBound = source.readDouble(); @@ -254,14 +238,6 @@ public final class BatteryUsageStats implements Parcelable { consumer.setCustomPowerComponentNames(mCustomPowerComponentNames); mUidBatteryConsumers.add(consumer); } - int sysCount = source.readInt(); - mSystemBatteryConsumers = new ArrayList<>(sysCount); - for (int i = 0; i < sysCount; i++) { - final SystemBatteryConsumer consumer = - SystemBatteryConsumer.CREATOR.createFromParcel(source); - consumer.setCustomPowerComponentNames(mCustomPowerComponentNames); - mSystemBatteryConsumers.add(consumer); - } int userCount = source.readInt(); mUserBatteryConsumers = new ArrayList<>(userCount); for (int i = 0; i < userCount; i++) { @@ -298,7 +274,6 @@ public final class BatteryUsageStats implements Parcelable { @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeLong(mStatsStartTimestampMs); - dest.writeDouble(mConsumedPower); dest.writeInt(mDischargePercentage); dest.writeDouble(mDischargedPowerLowerBound); dest.writeDouble(mDischargedPowerUpperBound); @@ -312,10 +287,6 @@ public final class BatteryUsageStats implements Parcelable { for (int i = mUidBatteryConsumers.size() - 1; i >= 0; i--) { mUidBatteryConsumers.get(i).writeToParcel(dest, flags); } - dest.writeInt(mSystemBatteryConsumers.size()); - for (int i = mSystemBatteryConsumers.size() - 1; i >= 0; i--) { - mSystemBatteryConsumers.get(i).writeToParcel(dest, flags); - } dest.writeInt(mUserBatteryConsumers.size()); for (int i = mUserBatteryConsumers.size() - 1; i >= 0; i--) { mUserBatteryConsumers.get(i).writeToParcel(dest, flags); @@ -367,8 +338,6 @@ public final class BatteryUsageStats implements Parcelable { new AggregateBatteryConsumer.Builder[AGGREGATE_BATTERY_CONSUMER_SCOPE_COUNT]; private final SparseArray mUidBatteryConsumerBuilders = new SparseArray<>(); - private final SparseArray mSystemBatteryConsumerBuilders = - new SparseArray<>(); private final SparseArray mUserBatteryConsumerBuilders = new SparseArray<>(); private Parcel mHistoryBuffer; @@ -482,22 +451,6 @@ public final class BatteryUsageStats implements Parcelable { return builder; } - /** - * Creates or returns a SystemBatteryConsumer, which represents battery attribution - * data for a specific drain type. - */ - @NonNull - public SystemBatteryConsumer.Builder getOrCreateSystemBatteryConsumerBuilder( - @SystemBatteryConsumer.DrainType int drainType) { - SystemBatteryConsumer.Builder builder = mSystemBatteryConsumerBuilders.get(drainType); - if (builder == null) { - builder = new SystemBatteryConsumer.Builder(mCustomPowerComponentNames, - mIncludePowerModels, drainType); - mSystemBatteryConsumerBuilders.put(drainType, builder); - } - return builder; - } - /** * Creates or returns a UserBatteryConsumer, which represents battery attribution * data for an individual {@link UserHandle}. diff --git a/core/java/android/os/SystemBatteryConsumer.java b/core/java/android/os/SystemBatteryConsumer.java deleted file mode 100644 index 7618339260bdd..0000000000000 --- a/core/java/android/os/SystemBatteryConsumer.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.os; - -import android.annotation.IntDef; -import android.annotation.NonNull; -import android.util.Slog; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.util.ArrayList; -import java.util.List; - - -/** - * Contains power consumption data attributed to a system-wide drain type. - * - * {@hide} - */ -public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable { - private static final String TAG = "SystemBatteryConsumer"; - - // **************** - // This list must be kept current with atoms.proto (frameworks/base/cmds/statsd/src/atoms.proto) - // so the constant values must never change. - // **************** - @IntDef(prefix = {"DRAIN_TYPE_"}, value = { - DRAIN_TYPE_AMBIENT_DISPLAY, - // Reserved: APP - DRAIN_TYPE_BLUETOOTH, - DRAIN_TYPE_CAMERA, - DRAIN_TYPE_MOBILE_RADIO, - DRAIN_TYPE_FLASHLIGHT, - DRAIN_TYPE_IDLE, - DRAIN_TYPE_MEMORY, - // Reserved: OVERCOUNTED, - DRAIN_TYPE_PHONE, - DRAIN_TYPE_SCREEN, - // Reserved: UNACCOUNTED, - // Reserved: USER, - DRAIN_TYPE_WIFI, - DRAIN_TYPE_CUSTOM, - }) - @Retention(RetentionPolicy.SOURCE) - public static @interface DrainType { - } - - public static final int DRAIN_TYPE_AMBIENT_DISPLAY = 0; - public static final int DRAIN_TYPE_BLUETOOTH = 2; - public static final int DRAIN_TYPE_CAMERA = 3; - public static final int DRAIN_TYPE_MOBILE_RADIO = 4; - public static final int DRAIN_TYPE_FLASHLIGHT = 5; - public static final int DRAIN_TYPE_IDLE = 6; - public static final int DRAIN_TYPE_MEMORY = 7; - public static final int DRAIN_TYPE_PHONE = 9; - public static final int DRAIN_TYPE_SCREEN = 10; - public static final int DRAIN_TYPE_WIFI = 13; - public static final int DRAIN_TYPE_CUSTOM = 14; - - @DrainType - private final int mDrainType; - - private final double mPowerConsumedByAppsMah; - - @DrainType - public int getDrainType() { - return mDrainType; - } - - private SystemBatteryConsumer(@NonNull SystemBatteryConsumer.Builder builder) { - super(builder.mPowerComponentsBuilder.build()); - mDrainType = builder.mDrainType; - mPowerConsumedByAppsMah = builder.mPowerConsumedByAppsMah; - if (mPowerConsumedByAppsMah > getConsumedPower()) { - Slog.wtf(TAG, - "Power attributed to apps exceeds total: drain type = " + mDrainType - + " total consumed power = " + getConsumedPower() - + " power consumed by apps = " + mPowerConsumedByAppsMah); - } - } - - private SystemBatteryConsumer(Parcel in) { - super(new PowerComponents(in)); - mDrainType = in.readInt(); - mPowerConsumedByAppsMah = in.readDouble(); - } - - public double getPowerConsumedByApps() { - return mPowerConsumedByAppsMah; - } - - /** - * Returns the amount of time this consumer was operating. - */ - public long getUsageDurationMillis() { - return mPowerComponents.getMaxComponentUsageDurationMillis(); - } - - /** - * Writes the contents into a Parcel. - */ - @Override - public void writeToParcel(@NonNull Parcel dest, int flags) { - super.writeToParcel(dest, flags); - dest.writeInt(mDrainType); - dest.writeDouble(mPowerConsumedByAppsMah); - } - - public static final Creator CREATOR = - new Creator() { - @Override - public SystemBatteryConsumer createFromParcel(Parcel in) { - return new SystemBatteryConsumer(in); - } - - @Override - public SystemBatteryConsumer[] newArray(int size) { - return new SystemBatteryConsumer[size]; - } - }; - - @Override - public int describeContents() { - return 0; - } - - /** - * Builder for SystemBatteryConsumer. - */ - public static final class Builder extends BaseBuilder { - @DrainType - private final int mDrainType; - private double mPowerConsumedByAppsMah; - private List mUidBatteryConsumers; - - Builder(@NonNull String[] customPowerComponentNames, - boolean includePowerModels, @DrainType int drainType) { - super(customPowerComponentNames, includePowerModels); - mDrainType = drainType; - } - - /** - * Sets the amount of power used by this system component that is attributed to apps. - * It should not exceed the total consumed power. - */ - public Builder setPowerConsumedByApps(double powerConsumedByAppsMah) { - mPowerConsumedByAppsMah = powerConsumedByAppsMah; - return this; - } - - /** - * Add a UidBatteryConsumer to this SystemBatteryConsumer. For example, - * the UidBatteryConsumer with the UID == {@link Process#BLUETOOTH_UID} should - * be added to the SystemBatteryConsumer with the drain type == {@link - * #DRAIN_TYPE_BLUETOOTH}. - *

- * Calculated power and duration components of the added battery consumers - * are aggregated at the time the SystemBatteryConsumer is built by the {@link #build()} - * method. - *

- */ - public void addUidBatteryConsumer(UidBatteryConsumer.Builder uidBatteryConsumerBuilder) { - if (mUidBatteryConsumers == null) { - mUidBatteryConsumers = new ArrayList<>(); - } - mUidBatteryConsumers.add(uidBatteryConsumerBuilder); - } - - /** - * Creates a read-only object out of the Builder values. - */ - @NonNull - public SystemBatteryConsumer build() { - if (mUidBatteryConsumers != null) { - for (int i = mUidBatteryConsumers.size() - 1; i >= 0; i--) { - UidBatteryConsumer.Builder uidBatteryConsumer = mUidBatteryConsumers.get(i); - mPowerComponentsBuilder.addPowerAndDuration( - uidBatteryConsumer.mPowerComponentsBuilder); - } - } - return new SystemBatteryConsumer(this); - } - } -} diff --git a/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java b/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java index 100bf34203e76..0307268a28b5a 100644 --- a/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java +++ b/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java @@ -20,7 +20,6 @@ import android.os.BatteryConsumer; import android.os.BatteryStats; import android.os.BatteryUsageStats; import android.os.BatteryUsageStatsQuery; -import android.os.SystemBatteryConsumer; import android.os.UserHandle; import android.util.SparseArray; @@ -55,11 +54,6 @@ public class AmbientDisplayPowerCalculator extends PowerCalculator { .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY, durationMs) .setConsumedPower(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY, powerMah, powerModel); - - builder.getOrCreateSystemBatteryConsumerBuilder( - SystemBatteryConsumer.DRAIN_TYPE_AMBIENT_DISPLAY) - .setConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN, powerMah, powerModel) - .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_SCREEN, durationMs); } /** diff --git a/core/java/com/android/internal/os/BatteryChargeCalculator.java b/core/java/com/android/internal/os/BatteryChargeCalculator.java index dc72f32673900..df7f508e0da07 100644 --- a/core/java/com/android/internal/os/BatteryChargeCalculator.java +++ b/core/java/com/android/internal/os/BatteryChargeCalculator.java @@ -37,11 +37,14 @@ public class BatteryChargeCalculator extends PowerCalculator { @Override public void calculate(BatteryUsageStats.Builder builder, BatteryStats batteryStats, long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) { + final double dischargedPowerLowerBoundMah = + batteryStats.getLowDischargeAmountSinceCharge() * mBatteryCapacity / 100; + final double dischargedPowerUpperBoundMah = + batteryStats.getHighDischargeAmountSinceCharge() * mBatteryCapacity / 100; builder.setDischargePercentage( batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)) - .setDischargedPowerRange( - batteryStats.getLowDischargeAmountSinceCharge() * mBatteryCapacity / 100, - batteryStats.getHighDischargeAmountSinceCharge() * mBatteryCapacity / 100); + .setDischargedPowerRange(dischargedPowerLowerBoundMah, + dischargedPowerUpperBoundMah); final long batteryTimeRemainingMs = batteryStats.computeBatteryTimeRemaining(rawRealtimeUs); if (batteryTimeRemainingMs != -1) { @@ -52,6 +55,11 @@ public class BatteryChargeCalculator extends PowerCalculator { if (chargeTimeRemainingMs != -1) { builder.setChargeTimeRemainingMs(chargeTimeRemainingMs / 1000); } + + builder.getAggregateBatteryConsumerBuilder( + BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE) + .setConsumedPower( + (dischargedPowerLowerBoundMah + dischargedPowerUpperBoundMah) / 2); } @Override diff --git a/core/java/com/android/internal/os/BluetoothPowerCalculator.java b/core/java/com/android/internal/os/BluetoothPowerCalculator.java index 36f871b286556..6e99bbbf2331e 100644 --- a/core/java/com/android/internal/os/BluetoothPowerCalculator.java +++ b/core/java/com/android/internal/os/BluetoothPowerCalculator.java @@ -21,7 +21,6 @@ import android.os.BatteryStats.ControllerActivityCounter; import android.os.BatteryUsageStats; import android.os.BatteryUsageStatsQuery; import android.os.Process; -import android.os.SystemBatteryConsumer; import android.os.UidBatteryConsumer; import android.os.UserHandle; import android.util.Log; @@ -58,19 +57,11 @@ public class BluetoothPowerCalculator extends PowerCalculator { final PowerAndDuration total = new PowerAndDuration(); - SystemBatteryConsumer.Builder systemBatteryConsumerBuilder = - builder.getOrCreateSystemBatteryConsumerBuilder( - SystemBatteryConsumer.DRAIN_TYPE_BLUETOOTH); - final SparseArray uidBatteryConsumerBuilders = builder.getUidBatteryConsumerBuilders(); for (int i = uidBatteryConsumerBuilders.size() - 1; i >= 0; i--) { final UidBatteryConsumer.Builder app = uidBatteryConsumerBuilders.valueAt(i); calculateApp(app, total, query); - if (app.getUid() == Process.BLUETOOTH_UID) { - app.excludeFromBatteryUsageStats(); - systemBatteryConsumerBuilder.addUidBatteryConsumer(app); - } } final long measuredChargeUC = batteryStats.getBluetoothMeasuredBatteryConsumptionUC(); @@ -87,12 +78,6 @@ public class BluetoothPowerCalculator extends PowerCalculator { Log.d(TAG, "Bluetooth active: time=" + (systemComponentDurationMs) + " power=" + formatCharge(systemPowerMah)); } - systemBatteryConsumerBuilder - .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_BLUETOOTH, - systemComponentDurationMs) - .setConsumedPower(BatteryConsumer.POWER_COMPONENT_BLUETOOTH, - Math.max(systemPowerMah, total.powerMah), powerModel) - .setPowerConsumedByApps(total.powerMah); builder.getAggregateBatteryConsumerBuilder( BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE) diff --git a/core/java/com/android/internal/os/CustomMeasuredPowerCalculator.java b/core/java/com/android/internal/os/CustomMeasuredPowerCalculator.java index 9af11fe7614a6..9b51a8ef64107 100644 --- a/core/java/com/android/internal/os/CustomMeasuredPowerCalculator.java +++ b/core/java/com/android/internal/os/CustomMeasuredPowerCalculator.java @@ -20,7 +20,6 @@ import android.os.BatteryConsumer; import android.os.BatteryStats; import android.os.BatteryUsageStats; import android.os.BatteryUsageStatsQuery; -import android.os.SystemBatteryConsumer; import android.os.UidBatteryConsumer; import android.util.SparseArray; @@ -47,15 +46,6 @@ public class CustomMeasuredPowerCalculator extends PowerCalculator { final double[] customMeasuredPowerMah = calculateMeasuredEnergiesMah( batteryStats.getCustomConsumerMeasuredBatteryConsumptionUC()); if (customMeasuredPowerMah != null) { - final SystemBatteryConsumer.Builder systemBatteryConsumerBuilder = - builder.getOrCreateSystemBatteryConsumerBuilder( - SystemBatteryConsumer.DRAIN_TYPE_CUSTOM); - for (int i = 0; i < customMeasuredPowerMah.length; i++) { - systemBatteryConsumerBuilder.setConsumedPowerForCustomComponent( - BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + i, - customMeasuredPowerMah[i]); - } - final AggregateBatteryConsumer.Builder deviceBatteryConsumerBuilder = builder.getAggregateBatteryConsumerBuilder( BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE); diff --git a/core/java/com/android/internal/os/IdlePowerCalculator.java b/core/java/com/android/internal/os/IdlePowerCalculator.java index cf68ab9a2066d..d33a88deb9d7c 100644 --- a/core/java/com/android/internal/os/IdlePowerCalculator.java +++ b/core/java/com/android/internal/os/IdlePowerCalculator.java @@ -20,7 +20,6 @@ import android.os.BatteryConsumer; import android.os.BatteryStats; import android.os.BatteryUsageStats; import android.os.BatteryUsageStatsQuery; -import android.os.SystemBatteryConsumer; import android.os.UserHandle; import android.util.Log; import android.util.SparseArray; @@ -53,9 +52,6 @@ public class IdlePowerCalculator extends PowerCalculator { calculatePowerAndDuration(batteryStats, rawRealtimeUs, rawUptimeUs, BatteryStats.STATS_SINCE_CHARGED); if (mPowerMah != 0) { - builder.getOrCreateSystemBatteryConsumerBuilder(SystemBatteryConsumer.DRAIN_TYPE_IDLE) - .setConsumedPower(BatteryConsumer.POWER_COMPONENT_IDLE, mPowerMah) - .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_IDLE, mDurationMs); builder.getAggregateBatteryConsumerBuilder( BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE) .setConsumedPower(BatteryConsumer.POWER_COMPONENT_IDLE, mPowerMah) diff --git a/core/java/com/android/internal/os/MemoryPowerCalculator.java b/core/java/com/android/internal/os/MemoryPowerCalculator.java index 950d1ecec3b3d..09fd85e42225b 100644 --- a/core/java/com/android/internal/os/MemoryPowerCalculator.java +++ b/core/java/com/android/internal/os/MemoryPowerCalculator.java @@ -4,7 +4,6 @@ import android.os.BatteryConsumer; import android.os.BatteryStats; import android.os.BatteryUsageStats; import android.os.BatteryUsageStatsQuery; -import android.os.SystemBatteryConsumer; import android.os.UserHandle; import android.util.LongSparseArray; import android.util.SparseArray; @@ -31,9 +30,6 @@ public class MemoryPowerCalculator extends PowerCalculator { BatteryStats.STATS_SINCE_CHARGED); final double powerMah = calculatePower(batteryStats, rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED); - builder.getOrCreateSystemBatteryConsumerBuilder(SystemBatteryConsumer.DRAIN_TYPE_MEMORY) - .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_MEMORY, durationMs) - .setConsumedPower(BatteryConsumer.POWER_COMPONENT_MEMORY, powerMah); builder.getAggregateBatteryConsumerBuilder( BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE) .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_MEMORY, durationMs) diff --git a/core/java/com/android/internal/os/MobileRadioPowerCalculator.java b/core/java/com/android/internal/os/MobileRadioPowerCalculator.java index a1bab6eb21f69..eb5993dc2d61b 100644 --- a/core/java/com/android/internal/os/MobileRadioPowerCalculator.java +++ b/core/java/com/android/internal/os/MobileRadioPowerCalculator.java @@ -19,7 +19,6 @@ import android.os.BatteryConsumer; import android.os.BatteryStats; import android.os.BatteryUsageStats; import android.os.BatteryUsageStatsQuery; -import android.os.SystemBatteryConsumer; import android.os.UidBatteryConsumer; import android.os.UserHandle; import android.telephony.CellSignalStrength; @@ -105,15 +104,6 @@ public class MobileRadioPowerCalculator extends PowerCalculator { calculateRemaining(total, powerModel, batteryStats, rawRealtimeUs, consumptionUC); if (total.remainingPowerMah != 0 || total.totalAppPowerMah != 0) { - builder.getOrCreateSystemBatteryConsumerBuilder( - SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO) - .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO, - total.durationMs) - .setConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO, - total.remainingPowerMah + total.totalAppPowerMah, - powerModel) - .setPowerConsumedByApps(total.totalAppPowerMah); - builder.getAggregateBatteryConsumerBuilder( BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE) .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO, diff --git a/core/java/com/android/internal/os/PhonePowerCalculator.java b/core/java/com/android/internal/os/PhonePowerCalculator.java index f8997cbbd9c94..8dd463c0d5e1c 100644 --- a/core/java/com/android/internal/os/PhonePowerCalculator.java +++ b/core/java/com/android/internal/os/PhonePowerCalculator.java @@ -20,7 +20,6 @@ import android.os.BatteryConsumer; import android.os.BatteryStats; import android.os.BatteryUsageStats; import android.os.BatteryUsageStatsQuery; -import android.os.SystemBatteryConsumer; import android.os.UserHandle; import android.util.SparseArray; @@ -44,9 +43,6 @@ public class PhonePowerCalculator extends PowerCalculator { BatteryStats.STATS_SINCE_CHARGED) / 1000; final double phoneOnPower = mPowerEstimator.calculatePower(phoneOnTimeMs); if (phoneOnPower != 0) { - builder.getOrCreateSystemBatteryConsumerBuilder(SystemBatteryConsumer.DRAIN_TYPE_PHONE) - .setConsumedPower(BatteryConsumer.POWER_COMPONENT_PHONE, phoneOnPower) - .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_PHONE, phoneOnTimeMs); builder.getAggregateBatteryConsumerBuilder( BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE) .setConsumedPower(BatteryConsumer.POWER_COMPONENT_PHONE, phoneOnPower) diff --git a/core/java/com/android/internal/os/ScreenPowerCalculator.java b/core/java/com/android/internal/os/ScreenPowerCalculator.java index 44bed2a54a102..1b3bc234fc0fa 100644 --- a/core/java/com/android/internal/os/ScreenPowerCalculator.java +++ b/core/java/com/android/internal/os/ScreenPowerCalculator.java @@ -20,7 +20,6 @@ import android.os.BatteryConsumer; import android.os.BatteryStats; import android.os.BatteryUsageStats; import android.os.BatteryUsageStatsQuery; -import android.os.SystemBatteryConsumer; import android.os.UidBatteryConsumer; import android.os.UserHandle; import android.text.format.DateUtils; @@ -109,13 +108,6 @@ public class ScreenPowerCalculator extends PowerCalculator { BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_ALL_APPS) .setConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN, totalAppPower, powerModel) .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_SCREEN, totalAppDuration); - - builder.getOrCreateSystemBatteryConsumerBuilder(SystemBatteryConsumer.DRAIN_TYPE_SCREEN) - .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_SCREEN, - totalPowerAndDuration.durationMs) - .setConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN, - Math.max(totalPowerAndDuration.powerMah, totalAppPower), powerModel) - .setPowerConsumedByApps(totalAppPower); } /** diff --git a/core/java/com/android/internal/os/WifiPowerCalculator.java b/core/java/com/android/internal/os/WifiPowerCalculator.java index 2dfc4ee69e14b..776a70545df49 100644 --- a/core/java/com/android/internal/os/WifiPowerCalculator.java +++ b/core/java/com/android/internal/os/WifiPowerCalculator.java @@ -20,7 +20,6 @@ import android.os.BatteryStats; import android.os.BatteryUsageStats; import android.os.BatteryUsageStatsQuery; import android.os.Process; -import android.os.SystemBatteryConsumer; import android.os.UidBatteryConsumer; import android.os.UserHandle; import android.util.Log; @@ -79,10 +78,6 @@ public class WifiPowerCalculator extends PowerCalculator { public void calculate(BatteryUsageStats.Builder builder, BatteryStats batteryStats, long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) { - final SystemBatteryConsumer.Builder systemBatteryConsumerBuilder = - builder.getOrCreateSystemBatteryConsumerBuilder( - SystemBatteryConsumer.DRAIN_TYPE_WIFI); - long totalAppDurationMs = 0; double totalAppPowerMah = 0; final PowerDurationAndTraffic powerDurationAndTraffic = new PowerDurationAndTraffic(); @@ -104,11 +99,6 @@ public class WifiPowerCalculator extends PowerCalculator { powerDurationAndTraffic.durationMs); app.setConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI, powerDurationAndTraffic.powerMah, powerModel); - - if (app.getUid() == Process.WIFI_UID) { - systemBatteryConsumerBuilder.addUidBatteryConsumer(app); - app.excludeFromBatteryUsageStats(); - } } final long consumptionUC = batteryStats.getWifiMeasuredBatteryConsumptionUC(); @@ -117,13 +107,6 @@ public class WifiPowerCalculator extends PowerCalculator { BatteryStats.STATS_SINCE_CHARGED, batteryStats.hasWifiActivityReporting(), totalAppDurationMs, totalAppPowerMah, consumptionUC); - systemBatteryConsumerBuilder - .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_WIFI, - powerDurationAndTraffic.durationMs) - .setConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI, - totalAppPowerMah + powerDurationAndTraffic.powerMah, powerModel) - .setPowerConsumedByApps(totalAppPowerMah); - builder.getAggregateBatteryConsumerBuilder( BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE) .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_WIFI, diff --git a/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerData.java b/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerData.java index da6dc76a68d24..24b164bcb8c0c 100644 --- a/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerData.java +++ b/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerData.java @@ -19,7 +19,6 @@ package com.android.frameworks.core.batterystatsviewer; import android.content.Context; import android.os.BatteryConsumer; import android.os.BatteryUsageStats; -import android.os.SystemBatteryConsumer; import android.os.UidBatteryConsumer; import android.os.UserHandle; import android.util.DebugUtils; @@ -133,11 +132,6 @@ public class BatteryConsumerData { } } - for (BatteryConsumer consumer : batteryUsageStats.getSystemBatteryConsumers()) { - if (batteryConsumerId(consumer).equals(batteryConsumerId)) { - return consumer; - } - } return null; } @@ -157,11 +151,25 @@ public class BatteryConsumerData { private void computeTotalPower(BatteryUsageStats batteryUsageStats, double[] powerByComponentMah) { - for (BatteryConsumer consumer : batteryUsageStats.getUidBatteryConsumers()) { - for (int component = 0; component < BatteryConsumer.POWER_COMPONENT_COUNT; - component++) { - powerByComponentMah[component] += consumer.getConsumedPower(component); - } + final BatteryConsumer consumer = + batteryUsageStats.getAggregateBatteryConsumer( + BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE); + for (int component = 0; component < BatteryConsumer.POWER_COMPONENT_COUNT; component++) { + powerByComponentMah[component] += consumer.getConsumedPower(component); + } + } + + private void computeTotalPowerForCustomComponent( + BatteryUsageStats batteryUsageStats, double[] powerByComponentMah) { + final BatteryConsumer consumer = + batteryUsageStats.getAggregateBatteryConsumer( + BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE); + final int customComponentCount = consumer.getCustomPowerComponentCount(); + for (int component = 0; + component < Math.min(customComponentCount, powerByComponentMah.length); + component++) { + powerByComponentMah[component] += consumer.getConsumedPowerForCustomComponent( + BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + component); } } @@ -175,19 +183,6 @@ public class BatteryConsumerData { } } - private void computeTotalPowerForCustomComponent( - BatteryUsageStats batteryUsageStats, double[] powerByComponentMah) { - for (BatteryConsumer consumer : batteryUsageStats.getUidBatteryConsumers()) { - final int customComponentCount = consumer.getCustomPowerComponentCount(); - for (int component = 0; - component < Math.min(customComponentCount, powerByComponentMah.length); - component++) { - powerByComponentMah[component] += consumer.getConsumedPowerForCustomComponent( - BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + component); - } - } - } - private void addEntry(String title, EntryType entryType, double amount, double totalAmount, boolean isSystemBatteryConsumer) { Entry entry = new Entry(); @@ -212,8 +207,6 @@ public class BatteryConsumerData { return "APP|" + UserHandle.getUserId(((UidBatteryConsumer) consumer).getUid()) + "|" + ((UidBatteryConsumer) consumer).getUid(); - } else if (consumer instanceof SystemBatteryConsumer) { - return ((SystemBatteryConsumer) consumer).getDrainType() + "|0|0"; } else { return ""; } diff --git a/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerInfoHelper.java b/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerInfoHelper.java index c37b48bb5e6ae..f2d6bca28136c 100644 --- a/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerInfoHelper.java +++ b/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerInfoHelper.java @@ -23,7 +23,6 @@ import android.content.pm.PackageManager; import android.os.BatteryConsumer; import android.os.BatteryUsageStats; import android.os.Process; -import android.os.SystemBatteryConsumer; import android.os.UidBatteryConsumer; import android.util.DebugUtils; @@ -113,20 +112,6 @@ class BatteryConsumerInfoHelper { // Won't happen } } - } else if (batteryConsumer instanceof SystemBatteryConsumer) { - final SystemBatteryConsumer systemBatteryConsumer = - (SystemBatteryConsumer) batteryConsumer; - final int drainType = systemBatteryConsumer.getDrainType(); - String name = DebugUtils.constantToString(SystemBatteryConsumer.class, "DRAIN_TYPE_", - drainType); - info.label = name.charAt(0) + name.substring(1).toLowerCase().replace('_', ' '); - info.isSystemBatteryConsumer = true; - try { - info.iconInfo = - packageManager.getApplicationInfo(SYSTEM_SERVER_PACKAGE_NAME, 0); - } catch (PackageManager.NameNotFoundException nameNotFoundException) { - // Won't happen - } } else { for (int scope = 0; scope < BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_COUNT; diff --git a/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerPickerActivity.java b/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerPickerActivity.java index 63a15d6c63b47..9e63a350df41a 100644 --- a/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerPickerActivity.java +++ b/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerPickerActivity.java @@ -18,68 +18,60 @@ package com.android.frameworks.core.batterystatsviewer; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.BatteryStatsManager; +import android.os.BatteryUsageStats; import android.os.Bundle; +import android.os.UidBatteryConsumer; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; +import androidx.activity.ComponentActivity; import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import androidx.fragment.app.FragmentStatePagerAdapter; -import androidx.viewpager.widget.ViewPager; +import androidx.loader.app.LoaderManager; +import androidx.loader.content.Loader; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; -import com.google.android.material.tabs.TabLayout; +import com.android.settingslib.utils.AsyncLoaderCompat; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; /** * Picker, showing a sorted lists of applications and other types of entities consuming power. * Opens BatteryStatsViewerActivity upon item selection. */ -public class BatteryConsumerPickerActivity extends FragmentActivity { +public class BatteryConsumerPickerActivity extends ComponentActivity { private static final String PREF_SELECTED_BATTERY_CONSUMER = "batteryConsumerId"; + private static final int BATTERY_STATS_REFRESH_RATE_MILLIS = 60 * 1000; + private BatteryConsumerListAdapter mBatteryConsumerListAdapter; + private RecyclerView mAppList; + private View mLoadingView; + private final Runnable mBatteryStatsRefresh = this::loadBatteryStats; + + private interface OnBatteryConsumerSelectedListener { + void onBatteryConsumerSelected(String batteryConsumerId); + } @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); - setContentView(R.layout.battery_consumer_picker_activity_layout); + setContentView(R.layout.battery_consumer_picker_layout); + mLoadingView = findViewById(R.id.loading_view); - ViewPager viewPager = findViewById(R.id.pager); + mAppList = findViewById(R.id.list_view); + mAppList.setLayoutManager(new LinearLayoutManager(this)); + mBatteryConsumerListAdapter = + new BatteryConsumerListAdapter((this::setSelectedBatteryConsumer)); + mAppList.setAdapter(mBatteryConsumerListAdapter); - FragmentStatePagerAdapter adapter = new FragmentStatePagerAdapter( - getSupportFragmentManager()) { - - @Override - public int getCount() { - return 2; - } - - @NonNull - @Override - public Fragment getItem(int position) { - switch (position) { - case 0: - return new BatteryConsumerPickerFragment( - BatteryConsumerPickerFragment.PICKER_TYPE_APP); - case 1: - default: - return new BatteryConsumerPickerFragment( - BatteryConsumerPickerFragment.PICKER_TYPE_DRAIN); - } - } - - @Override - public CharSequence getPageTitle(int position) { - switch (position) { - case 0: - return "Apps"; - case 1: - return "Drains"; - } - return null; - } - }; - - viewPager.setAdapter(adapter); - TabLayout tabLayout = findViewById(R.id.tab_layout); - tabLayout.setupWithViewPager(viewPager); if (icicle == null) { final String batteryConsumerId = getPreferences(Context.MODE_PRIVATE) .getString(PREF_SELECTED_BATTERY_CONSUMER, null); @@ -101,4 +93,183 @@ public class BatteryConsumerPickerActivity extends FragmentActivity { .putExtra(BatteryStatsViewerActivity.EXTRA_BATTERY_CONSUMER, batteryConsumerId); startActivity(intent); } + + @Override + protected void onResume() { + super.onResume(); + loadBatteryStats(); + } + + @Override + protected void onPause() { + super.onPause(); + getMainThreadHandler().removeCallbacks(mBatteryStatsRefresh); + } + + private void loadBatteryStats() { + LoaderManager.getInstance(this).restartLoader(0, null, + new BatteryConsumerListLoaderCallbacks()); + getMainThreadHandler().postDelayed(mBatteryStatsRefresh, BATTERY_STATS_REFRESH_RATE_MILLIS); + } + + private static class BatteryConsumerListLoader extends + AsyncLoaderCompat> { + private final BatteryStatsManager mBatteryStatsManager; + private final PackageManager mPackageManager; + + BatteryConsumerListLoader(Context context) { + super(context); + mBatteryStatsManager = context.getSystemService(BatteryStatsManager.class); + mPackageManager = context.getPackageManager(); + } + + @Override + public List loadInBackground() { + final BatteryUsageStats batteryUsageStats = mBatteryStatsManager.getBatteryUsageStats(); + List batteryConsumerList = + new ArrayList<>(); + + for (int scope = 0; + scope < BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_COUNT; + scope++) { + batteryConsumerList.add( + BatteryConsumerInfoHelper.makeBatteryConsumerInfo( + batteryUsageStats.getAggregateBatteryConsumer(scope), + BatteryConsumerData.batteryConsumerId(scope), + mPackageManager)); + } + + for (UidBatteryConsumer consumer : batteryUsageStats.getUidBatteryConsumers()) { + batteryConsumerList.add( + BatteryConsumerInfoHelper.makeBatteryConsumerInfo(consumer, + BatteryConsumerData.batteryConsumerId(consumer), + mPackageManager)); + } + + batteryConsumerList.sort( + Comparator.comparing( + (BatteryConsumerInfoHelper.BatteryConsumerInfo a) -> a.powerMah) + .reversed()); + + return batteryConsumerList; + } + + @Override + protected void onDiscardResult(List result) { + } + } + + private class BatteryConsumerListLoaderCallbacks implements + LoaderManager.LoaderCallbacks> { + + @NonNull + @Override + public Loader> onCreateLoader(int id, + Bundle args) { + return new BatteryConsumerListLoader(BatteryConsumerPickerActivity.this); + } + + @Override + public void onLoadFinished( + @NonNull Loader> loader, + List batteryConsumerList) { + mBatteryConsumerListAdapter.setBatteryConsumerList(batteryConsumerList); + mAppList.setVisibility(View.VISIBLE); + mLoadingView.setVisibility(View.GONE); + } + + @Override + public void onLoaderReset( + @NonNull Loader> loader) { + } + } + + public class BatteryConsumerListAdapter + extends RecyclerView.Adapter { + private final OnBatteryConsumerSelectedListener mListener; + private List mBatteryConsumerList; + + public BatteryConsumerListAdapter(OnBatteryConsumerSelectedListener listener) { + mListener = listener; + } + + void setBatteryConsumerList( + List batteryConsumerList) { + mBatteryConsumerList = batteryConsumerList; + notifyDataSetChanged(); + } + + @Override + public int getItemCount() { + return mBatteryConsumerList.size(); + } + + @NonNull + @Override + public BatteryConsumerViewHolder onCreateViewHolder( + @NonNull ViewGroup viewGroup, + int position) { + LayoutInflater layoutInflater = LayoutInflater.from(viewGroup.getContext()); + View view = layoutInflater.inflate(R.layout.battery_consumer_info_layout, viewGroup, + false); + return new BatteryConsumerViewHolder(view, mListener); + } + + @Override + public void onBindViewHolder(@NonNull BatteryConsumerViewHolder viewHolder, int position) { + BatteryConsumerInfoHelper.BatteryConsumerInfo item = mBatteryConsumerList.get(position); + viewHolder.id = item.id; + viewHolder.titleView.setText(item.label); + if (item.details != null) { + viewHolder.detailsView.setText(item.details); + viewHolder.detailsView.setVisibility(View.VISIBLE); + } else { + viewHolder.detailsView.setVisibility(View.GONE); + } + viewHolder.powerView.setText( + String.format(Locale.getDefault(), "%.1f mAh", item.powerMah)); + if (item.iconInfo != null) { + viewHolder.iconView.setImageDrawable( + item.iconInfo.loadIcon(getPackageManager())); + } else { + viewHolder.iconView.setImageResource(R.drawable.gm_device_24); + } + if (item.packages != null) { + viewHolder.packagesView.setText(item.packages); + viewHolder.packagesView.setVisibility(View.VISIBLE); + } else { + viewHolder.packagesView.setVisibility(View.GONE); + } + } + } + + // View Holder used when displaying apps + public static class BatteryConsumerViewHolder extends RecyclerView.ViewHolder + implements View.OnClickListener { + private final OnBatteryConsumerSelectedListener mListener; + + public String id; + public TextView titleView; + public TextView detailsView; + public ImageView iconView; + public TextView packagesView; + public TextView powerView; + + BatteryConsumerViewHolder(View view, OnBatteryConsumerSelectedListener listener) { + super(view); + mListener = listener; + view.setOnClickListener(this); + titleView = view.findViewById(android.R.id.title); + detailsView = view.findViewById(R.id.details); + iconView = view.findViewById(android.R.id.icon); + packagesView = view.findViewById(R.id.packages); + powerView = view.findViewById(R.id.power_mah); + powerView.setVisibility(View.VISIBLE); + } + + @Override + public void onClick(View v) { + mListener.onBatteryConsumerSelected(id); + } + } } diff --git a/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerPickerFragment.java b/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerPickerFragment.java deleted file mode 100644 index daa6dae37f509..0000000000000 --- a/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerPickerFragment.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.frameworks.core.batterystatsviewer; - -import android.content.Context; -import android.content.pm.PackageManager; -import android.os.BatteryStatsManager; -import android.os.BatteryUsageStats; -import android.os.Bundle; -import android.os.SystemBatteryConsumer; -import android.os.UidBatteryConsumer; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.loader.app.LoaderManager; -import androidx.loader.content.Loader; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.android.frameworks.core.batterystatsviewer.BatteryConsumerInfoHelper.BatteryConsumerInfo; -import com.android.settingslib.utils.AsyncLoaderCompat; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Locale; - -/** - * Picker, showing a sorted lists of applications or other types of entities consuming power. - * Returns the selected entity ID or null. - */ -public class BatteryConsumerPickerFragment extends Fragment { - private static final String TAG = "AppPicker"; - - public static final String PICKER_TYPE = "pickertype"; - - public static final int PICKER_TYPE_APP = 0; - public static final int PICKER_TYPE_DRAIN = 1; - - private BatteryConsumerListAdapter mBatteryConsumerListAdapter; - private RecyclerView mAppList; - private View mLoadingView; - - private interface OnBatteryConsumerSelectedListener { - void onBatteryConsumerSelected(String batteryConsumerId); - } - - public BatteryConsumerPickerFragment(int pickerType) { - Bundle args = new Bundle(); - args.putInt(PICKER_TYPE, pickerType); - setArguments(args); - } - - public BatteryConsumerPickerFragment() { - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.battery_consumer_picker_layout, container, false); - mLoadingView = view.findViewById(R.id.loading_view); - - mAppList = view.findViewById(R.id.list_view); - mAppList.setLayoutManager(new LinearLayoutManager(getContext())); - mBatteryConsumerListAdapter = new BatteryConsumerListAdapter( - BatteryConsumerPickerFragment.this::setSelectedBatteryConsumer); - mAppList.setAdapter(mBatteryConsumerListAdapter); - - LoaderManager.getInstance(this).initLoader(0, getArguments(), - new BatteryConsumerListLoaderCallbacks()); - return view; - } - - public void setSelectedBatteryConsumer(String id) { - ((BatteryConsumerPickerActivity) getActivity()).setSelectedBatteryConsumer(id); - } - - private static class BatteryConsumerListLoader extends - AsyncLoaderCompat> { - private final int mPickerType; - private final BatteryStatsManager mBatteryStatsManager; - private final PackageManager mPackageManager; - - BatteryConsumerListLoader(Context context, int pickerType) { - super(context); - mBatteryStatsManager = context.getSystemService(BatteryStatsManager.class); - mPickerType = pickerType; - mPackageManager = context.getPackageManager(); - } - - @Override - public List loadInBackground() { - final BatteryUsageStats batteryUsageStats = mBatteryStatsManager.getBatteryUsageStats(); - List batteryConsumerList = new ArrayList<>(); - - for (int scope = 0; - scope < BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_COUNT; - scope++) { - batteryConsumerList.add( - BatteryConsumerInfoHelper.makeBatteryConsumerInfo( - batteryUsageStats.getAggregateBatteryConsumer(scope), - BatteryConsumerData.batteryConsumerId(scope), - mPackageManager)); - } - - switch (mPickerType) { - case PICKER_TYPE_APP: - for (UidBatteryConsumer consumer : batteryUsageStats.getUidBatteryConsumers()) { - batteryConsumerList.add( - BatteryConsumerInfoHelper.makeBatteryConsumerInfo(consumer, - BatteryConsumerData.batteryConsumerId(consumer), - mPackageManager)); - } - break; - case PICKER_TYPE_DRAIN: - default: - for (SystemBatteryConsumer consumer : - batteryUsageStats.getSystemBatteryConsumers()) { - batteryConsumerList.add( - BatteryConsumerInfoHelper.makeBatteryConsumerInfo(consumer, - BatteryConsumerData.batteryConsumerId(consumer), - mPackageManager)); - } - break; - } - - batteryConsumerList.sort( - Comparator.comparing((BatteryConsumerInfo a) -> a.powerMah).reversed()); - return batteryConsumerList; - } - - @Override - protected void onDiscardResult(List result) { - } - } - - private class BatteryConsumerListLoaderCallbacks implements - LoaderManager.LoaderCallbacks> { - - @NonNull - @Override - public Loader> onCreateLoader(int id, Bundle args) { - return new BatteryConsumerListLoader(getContext(), args.getInt(PICKER_TYPE)); - } - - @Override - public void onLoadFinished(@NonNull Loader> loader, - List batteryConsumerList) { - mBatteryConsumerListAdapter.setBatteryConsumerList(batteryConsumerList); - mAppList.setVisibility(View.VISIBLE); - mLoadingView.setVisibility(View.GONE); - } - - @Override - public void onLoaderReset( - @NonNull Loader> loader) { - } - } - - public class BatteryConsumerListAdapter extends - RecyclerView.Adapter { - private final OnBatteryConsumerSelectedListener mListener; - private List mBatteryConsumerList; - - public BatteryConsumerListAdapter(OnBatteryConsumerSelectedListener listener) { - mListener = listener; - } - - void setBatteryConsumerList(List batteryConsumerList) { - mBatteryConsumerList = batteryConsumerList; - notifyDataSetChanged(); - } - - @Override - public int getItemCount() { - return mBatteryConsumerList.size(); - } - - @NonNull - @Override - public BatteryConsumerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, - int position) { - LayoutInflater layoutInflater = LayoutInflater.from(viewGroup.getContext()); - View view = layoutInflater.inflate(R.layout.battery_consumer_info_layout, viewGroup, - false); - return new BatteryConsumerViewHolder(view, mListener); - } - - @Override - public void onBindViewHolder(@NonNull BatteryConsumerViewHolder viewHolder, int position) { - BatteryConsumerInfo item = mBatteryConsumerList.get(position); - viewHolder.id = item.id; - viewHolder.titleView.setText(item.label); - if (item.details != null) { - viewHolder.detailsView.setText(item.details); - viewHolder.detailsView.setVisibility(View.VISIBLE); - } else { - viewHolder.detailsView.setVisibility(View.GONE); - } - viewHolder.powerView.setText( - String.format(Locale.getDefault(), "%.1f mAh", item.powerMah)); - if (item.iconInfo != null) { - viewHolder.iconView.setImageDrawable( - item.iconInfo.loadIcon(getContext().getPackageManager())); - } else { - viewHolder.iconView.setImageResource(R.drawable.gm_device_24); - } - if (item.packages != null) { - viewHolder.packagesView.setText(item.packages); - viewHolder.packagesView.setVisibility(View.VISIBLE); - } else { - viewHolder.packagesView.setVisibility(View.GONE); - } - } - } - - // View Holder used when displaying apps - public static class BatteryConsumerViewHolder extends RecyclerView.ViewHolder - implements View.OnClickListener { - private final OnBatteryConsumerSelectedListener mListener; - - public String id; - public TextView titleView; - public TextView detailsView; - public ImageView iconView; - public TextView packagesView; - public TextView powerView; - - BatteryConsumerViewHolder(View view, OnBatteryConsumerSelectedListener listener) { - super(view); - mListener = listener; - view.setOnClickListener(this); - titleView = view.findViewById(android.R.id.title); - detailsView = view.findViewById(R.id.details); - iconView = view.findViewById(android.R.id.icon); - packagesView = view.findViewById(R.id.packages); - powerView = view.findViewById(R.id.power_mah); - powerView.setVisibility(View.VISIBLE); - } - - @Override - public void onClick(View v) { - mListener.onBatteryConsumerSelected(id); - } - } -} diff --git a/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryStatsViewerActivity.java b/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryStatsViewerActivity.java index f84e97a14297e..bb75be4f5ba8a 100644 --- a/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryStatsViewerActivity.java +++ b/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryStatsViewerActivity.java @@ -51,7 +51,7 @@ public class BatteryStatsViewerActivity extends ComponentActivity { private static final int LOADER_BATTERY_USAGE_STATS = 1; private BatteryStatsDataAdapter mBatteryStatsDataAdapter; - private final Runnable mBatteryStatsRefresh = this::periodicBatteryStatsRefresh; + private final Runnable mBatteryStatsRefresh = this::loadBatteryStats; private String mBatteryConsumerId; private TextView mTitleView; private TextView mDetailsView; @@ -85,13 +85,15 @@ public class BatteryStatsViewerActivity extends ComponentActivity { mLoadingView = findViewById(R.id.loading_view); mEmptyView = findViewById(R.id.empty_view); - loadBatteryStats(); + LoaderManager loaderManager = LoaderManager.getInstance(this); + loaderManager.restartLoader(LOADER_BATTERY_USAGE_STATS, null, + new BatteryUsageStatsLoaderCallbacks()); } @Override protected void onResume() { super.onResume(); - periodicBatteryStatsRefresh(); + loadBatteryStats(); } @Override @@ -100,15 +102,11 @@ public class BatteryStatsViewerActivity extends ComponentActivity { getMainThreadHandler().removeCallbacks(mBatteryStatsRefresh); } - private void periodicBatteryStatsRefresh() { - loadBatteryStats(); - getMainThreadHandler().postDelayed(mBatteryStatsRefresh, BATTERY_STATS_REFRESH_RATE_MILLIS); - } - private void loadBatteryStats() { LoaderManager loaderManager = LoaderManager.getInstance(this); loaderManager.restartLoader(LOADER_BATTERY_USAGE_STATS, null, new BatteryUsageStatsLoaderCallbacks()); + getMainThreadHandler().postDelayed(mBatteryStatsRefresh, BATTERY_STATS_REFRESH_RATE_MILLIS); } private static class BatteryUsageStatsLoader extends diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryChargeCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryChargeCalculatorTest.java index cf126c62dac77..6427b5b40321f 100644 --- a/core/tests/coretests/src/com/android/internal/os/BatteryChargeCalculatorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BatteryChargeCalculatorTest.java @@ -60,6 +60,8 @@ public class BatteryChargeCalculatorTest { BatteryUsageStats batteryUsageStats = mStatsRule.apply(calculator); + assertThat(batteryUsageStats.getConsumedPower()) + .isWithin(PRECISION).of(380.0); assertThat(batteryUsageStats.getDischargePercentage()).isEqualTo(10); assertThat(batteryUsageStats.getDischargedPowerRange().getLower()) .isWithin(PRECISION).of(360.0); diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java index 4533fcb39cfe4..1a6408ff7eb3f 100644 --- a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java +++ b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java @@ -27,7 +27,6 @@ import android.os.BatteryConsumer; import android.os.BatteryStats; import android.os.BatteryUsageStats; import android.os.BatteryUsageStatsQuery; -import android.os.SystemBatteryConsumer; import android.os.UidBatteryConsumer; import android.os.UserBatteryConsumer; import android.util.SparseArray; @@ -206,16 +205,6 @@ public class BatteryUsageStatsRule implements TestRule { return null; } - public SystemBatteryConsumer getSystemBatteryConsumer( - @SystemBatteryConsumer.DrainType int drainType) { - for (SystemBatteryConsumer sbc : mBatteryUsageStats.getSystemBatteryConsumers()) { - if (sbc.getDrainType() == drainType) { - return sbc; - } - } - return null; - } - public UserBatteryConsumer getUserBatteryConsumer(int userId) { for (UserBatteryConsumer ubc : mBatteryUsageStats.getUserBatteryConsumers()) { if (ubc.getUserId() == userId) { diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java index ad9906b918d7a..127cea84ba8ca 100644 --- a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java @@ -23,7 +23,6 @@ import static org.junit.Assert.fail; import android.os.BatteryConsumer; import android.os.BatteryUsageStats; import android.os.Parcel; -import android.os.SystemBatteryConsumer; import android.os.UidBatteryConsumer; import androidx.test.filters.SmallTest; @@ -71,7 +70,6 @@ public class BatteryUsageStatsTest { .setDischargePercentage(20) .setDischargedPowerRange(1000, 2000) .setStatsStartTimestamp(1000); - builder.getOrCreateUidBatteryConsumerBuilder(batteryStatsUid) .setPackageWithHighestDrain("foo") .setTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND, 1000) @@ -87,17 +85,6 @@ public class BatteryUsageStatsTest { .setUsageDurationForCustomComponentMillis( BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID, 800); - builder.getOrCreateSystemBatteryConsumerBuilder(SystemBatteryConsumer.DRAIN_TYPE_CAMERA) - .setConsumedPower( - BatteryConsumer.POWER_COMPONENT_CPU, 10100) - .setConsumedPowerForCustomComponent( - BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID, 10200) - .setUsageDurationMillis( - BatteryConsumer.POWER_COMPONENT_CPU, 10300) - .setUsageDurationForCustomComponentMillis( - BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID, 10400) - .setPowerConsumedByApps(20000); - builder.getAggregateBatteryConsumerBuilder( BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_ALL_APPS) .setConsumedPower( @@ -111,6 +98,7 @@ public class BatteryUsageStatsTest { builder.getAggregateBatteryConsumerBuilder( BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE) + .setConsumedPower(30000) .setConsumedPower( BatteryConsumer.POWER_COMPONENT_CPU, 20100) .setConsumedPowerForCustomComponent( @@ -124,10 +112,7 @@ public class BatteryUsageStatsTest { } public void validateBatteryUsageStats(BatteryUsageStats batteryUsageStats) { - // Camera: (10100 + 10200) - 20000 (consumed by apps) = 300 - // App: 300 + 400 + 500 = 1200 - // Total: 1500 - assertThat(batteryUsageStats.getConsumedPower()).isEqualTo(1500); + assertThat(batteryUsageStats.getConsumedPower()).isEqualTo(30000); assertThat(batteryUsageStats.getDischargePercentage()).isEqualTo(20); assertThat(batteryUsageStats.getDischargedPowerRange().getLower()).isEqualTo(1000); assertThat(batteryUsageStats.getDischargedPowerRange().getUpper()).isEqualTo(2000); @@ -161,30 +146,6 @@ public class BatteryUsageStatsTest { } } - final List systemBatteryConsumers = - batteryUsageStats.getSystemBatteryConsumers(); - for (SystemBatteryConsumer systemBatteryConsumer : systemBatteryConsumers) { - if (systemBatteryConsumer.getDrainType() == SystemBatteryConsumer.DRAIN_TYPE_CAMERA) { - assertThat(systemBatteryConsumer.getConsumedPower( - BatteryConsumer.POWER_COMPONENT_CPU)).isEqualTo(10100); - assertThat(systemBatteryConsumer.getConsumedPowerForCustomComponent( - BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID)).isEqualTo(10200); - assertThat(systemBatteryConsumer.getUsageDurationMillis( - BatteryConsumer.POWER_COMPONENT_CPU)).isEqualTo(10300); - assertThat(systemBatteryConsumer.getUsageDurationForCustomComponentMillis( - BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID)).isEqualTo(10400); - assertThat(systemBatteryConsumer.getConsumedPower()).isEqualTo(20300); - assertThat(systemBatteryConsumer.getPowerConsumedByApps()).isEqualTo(20000); - assertThat(systemBatteryConsumer.getUsageDurationMillis()) - .isEqualTo(10400); // max - assertThat(systemBatteryConsumer.getCustomPowerComponentCount()).isEqualTo(1); - assertThat(systemBatteryConsumer.getCustomPowerComponentName( - BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID)).isEqualTo("FOO"); - } else { - fail("Unexpected drain type " + systemBatteryConsumer.getDrainType()); - } - } - final BatteryConsumer appsBatteryConsumer = batteryUsageStats.getAggregateBatteryConsumer( BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_ALL_APPS); assertThat(appsBatteryConsumer.getConsumedPower( diff --git a/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java index a0de6d3c4573a..2de621c8fa6f5 100644 --- a/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java @@ -64,7 +64,9 @@ public class BluetoothPowerCalculatorTest { mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator); - assertThat(mStatsRule.getUidBatteryConsumer(Process.BLUETOOTH_UID)).isNull(); + assertBluetoothPowerAndDuration( + mStatsRule.getUidBatteryConsumer(Process.BLUETOOTH_UID), + 0.11388, 6000, BatteryConsumer.POWER_MODEL_POWER_PROFILE); assertBluetoothPowerAndDuration( mStatsRule.getUidBatteryConsumer(APP_UID), 0.24722, 15000, BatteryConsumer.POWER_MODEL_POWER_PROFILE); @@ -95,7 +97,9 @@ public class BluetoothPowerCalculatorTest { mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator); - assertThat(mStatsRule.getUidBatteryConsumer(Process.BLUETOOTH_UID)).isNull(); + assertBluetoothPowerAndDuration( + mStatsRule.getUidBatteryConsumer(Process.BLUETOOTH_UID), + 0.1, 6000, BatteryConsumer.POWER_MODEL_POWER_PROFILE); assertBluetoothPowerAndDuration( mStatsRule.getUidBatteryConsumer(APP_UID), 0.2, 15000, BatteryConsumer.POWER_MODEL_POWER_PROFILE); @@ -123,7 +127,9 @@ public class BluetoothPowerCalculatorTest { mStatsRule.apply(new BatteryUsageStatsQuery.Builder().includePowerModels().build(), calculator); - assertThat(mStatsRule.getUidBatteryConsumer(Process.BLUETOOTH_UID)).isNull(); + assertBluetoothPowerAndDuration( + mStatsRule.getUidBatteryConsumer(Process.BLUETOOTH_UID), + 0.10378, 3583, BatteryConsumer.POWER_MODEL_MEASURED_ENERGY); assertBluetoothPowerAndDuration( mStatsRule.getUidBatteryConsumer(APP_UID), 0.22950, 8416, BatteryConsumer.POWER_MODEL_MEASURED_ENERGY); diff --git a/core/tests/coretests/src/com/android/internal/os/CustomMeasuredPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/CustomMeasuredPowerCalculatorTest.java index 3fb274323720c..f8c2bc6c3d80a 100644 --- a/core/tests/coretests/src/com/android/internal/os/CustomMeasuredPowerCalculatorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/CustomMeasuredPowerCalculatorTest.java @@ -20,7 +20,6 @@ import static com.google.common.truth.Truth.assertThat; import android.os.BatteryConsumer; import android.os.Process; -import android.os.SystemBatteryConsumer; import android.os.UidBatteryConsumer; import android.util.SparseLongArray; @@ -68,15 +67,6 @@ public class CustomMeasuredPowerCalculatorTest { BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 1)) .isWithin(PRECISION).of(33.33333); - SystemBatteryConsumer systemConsumer = mStatsRule.getSystemBatteryConsumer( - SystemBatteryConsumer.DRAIN_TYPE_CUSTOM); - assertThat(systemConsumer.getConsumedPowerForCustomComponent( - BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID)) - .isWithin(PRECISION).of(27.77777); - assertThat(systemConsumer.getConsumedPowerForCustomComponent( - BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 1)) - .isWithin(PRECISION).of(55.55555); - final BatteryConsumer deviceBatteryConsumer = mStatsRule.getDeviceBatteryConsumer(); assertThat(deviceBatteryConsumer.getConsumedPowerForCustomComponent( BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID)) diff --git a/core/tests/coretests/src/com/android/internal/os/IdlePowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/IdlePowerCalculatorTest.java index 159d53a4cf5bc..67b1e516d7046 100644 --- a/core/tests/coretests/src/com/android/internal/os/IdlePowerCalculatorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/IdlePowerCalculatorTest.java @@ -19,7 +19,6 @@ package com.android.internal.os; import static com.google.common.truth.Truth.assertThat; import android.os.BatteryConsumer; -import android.os.SystemBatteryConsumer; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; @@ -46,13 +45,6 @@ public class IdlePowerCalculatorTest { mStatsRule.apply(calculator); - SystemBatteryConsumer consumer = - mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_IDLE); - assertThat(consumer.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_IDLE)) - .isEqualTo(3000); - assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_IDLE)) - .isWithin(PRECISION).of(0.7); - BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer(); assertThat(deviceConsumer.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_IDLE)) .isEqualTo(3000); diff --git a/core/tests/coretests/src/com/android/internal/os/MemoryPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/MemoryPowerCalculatorTest.java index 94e760a4e2e23..4868d6a872283 100644 --- a/core/tests/coretests/src/com/android/internal/os/MemoryPowerCalculatorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/MemoryPowerCalculatorTest.java @@ -19,7 +19,6 @@ package com.android.internal.os; import static com.google.common.truth.Truth.assertThat; import android.os.BatteryConsumer; -import android.os.SystemBatteryConsumer; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; @@ -53,8 +52,7 @@ public class MemoryPowerCalculatorTest { mStatsRule.apply(calculator); - SystemBatteryConsumer consumer = - mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_MEMORY); + BatteryConsumer consumer = mStatsRule.getDeviceBatteryConsumer(); assertThat(consumer.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_MEMORY)) .isEqualTo(3000); assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MEMORY)) diff --git a/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java index 4f5417fe7955f..48a1da15d574e 100644 --- a/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java @@ -27,7 +27,6 @@ import android.net.NetworkCapabilities; import android.net.NetworkStats; import android.os.BatteryConsumer; import android.os.Process; -import android.os.SystemBatteryConsumer; import android.os.UidBatteryConsumer; import android.telephony.DataConnectionRealTimeInfo; import android.telephony.ModemActivityInfo; @@ -100,17 +99,6 @@ public class MobileRadioPowerCalculatorTest { mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator); - SystemBatteryConsumer consumer = - mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO); - assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)) - .isWithin(PRECISION).of(2.2444); - assertThat(consumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)) - .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE); - assertThat(consumer.getConsumedPower()) - .isWithin(PRECISION).of(2.2444); - assertThat(consumer.getPowerConsumedByApps()) - .isWithin(PRECISION).of(0.8); - UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID); assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)) .isWithin(PRECISION).of(0.8); @@ -171,17 +159,6 @@ public class MobileRadioPowerCalculatorTest { mStatsRule.apply(calculator); - SystemBatteryConsumer consumer = - mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO); - - // 100000000 uAs * (1 mA / 1000 uA) * (1 h / 3600 s) + 1.53934 (apps)= 4.31711 mAh - assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)) - .isWithin(PRECISION).of(4.31711); - assertThat(consumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)) - .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY); - assertThat(consumer.getPowerConsumedByApps()) - .isWithin(PRECISION).of(1.53934); - UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID); assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)) .isWithin(PRECISION).of(1.53934); diff --git a/core/tests/coretests/src/com/android/internal/os/ScreenPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/ScreenPowerCalculatorTest.java index 144da38e4cb3b..4c29c204618af 100644 --- a/core/tests/coretests/src/com/android/internal/os/ScreenPowerCalculatorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/ScreenPowerCalculatorTest.java @@ -21,7 +21,6 @@ import static com.google.common.truth.Truth.assertThat; import android.app.ActivityManager; import android.os.BatteryConsumer; import android.os.Process; -import android.os.SystemBatteryConsumer; import android.os.UidBatteryConsumer; import android.view.Display; @@ -82,21 +81,6 @@ public class ScreenPowerCalculatorTest { mStatsRule.apply(calculator); - SystemBatteryConsumer consumer = - mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_SCREEN); - assertThat(consumer.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_SCREEN)) - .isEqualTo(80 * MINUTE_IN_MS); - - // 600000000 uAs * (1 mA / 1000 uA) * (1 h / 3600 s) = 166.66666 mAh - assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN)) - .isWithin(PRECISION).of(166.66666); - assertThat(consumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_SCREEN)) - .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY); - assertThat(consumer.getConsumedPower()) - .isWithin(PRECISION).of(166.66666); - assertThat(consumer.getPowerConsumedByApps()) - .isWithin(PRECISION).of(166.66666); - UidBatteryConsumer uid1 = mStatsRule.getUidBatteryConsumer(APP_UID1); assertThat(uid1.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_SCREEN)) .isEqualTo(20 * MINUTE_IN_MS); @@ -130,8 +114,6 @@ public class ScreenPowerCalculatorTest { .isWithin(PRECISION).of(166.66666); assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_SCREEN)) .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY); - assertThat(deviceConsumer.getConsumedPower()) - .isWithin(PRECISION).of(166.66666); BatteryConsumer appsConsumer = mStatsRule.getAppsBatteryConsumer(); assertThat(appsConsumer.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_SCREEN)) @@ -141,8 +123,6 @@ public class ScreenPowerCalculatorTest { .isWithin(PRECISION).of(166.66666); assertThat(appsConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_SCREEN)) .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY); - assertThat(appsConsumer.getConsumedPower()) - .isWithin(PRECISION).of(166.66666); } @Test @@ -174,19 +154,6 @@ public class ScreenPowerCalculatorTest { mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator); - SystemBatteryConsumer consumer = - mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_SCREEN); - assertThat(consumer.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_SCREEN)) - .isEqualTo(80 * MINUTE_IN_MS); - assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN)) - .isWithin(PRECISION).of(92.0); - assertThat(consumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_SCREEN)) - .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE); - assertThat(consumer.getConsumedPower()) - .isWithin(PRECISION).of(92.0); - assertThat(consumer.getPowerConsumedByApps()) - .isWithin(PRECISION).of(92.0); - UidBatteryConsumer uid1 = mStatsRule.getUidBatteryConsumer(APP_UID1); assertThat(uid1.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_SCREEN)) .isEqualTo(20 * MINUTE_IN_MS); diff --git a/core/tests/coretests/src/com/android/internal/os/WifiPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/WifiPowerCalculatorTest.java index f8655c5b89d27..fc44ddc216b41 100644 --- a/core/tests/coretests/src/com/android/internal/os/WifiPowerCalculatorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/WifiPowerCalculatorTest.java @@ -25,7 +25,6 @@ import android.net.NetworkCapabilities; import android.net.NetworkStats; import android.os.BatteryConsumer; import android.os.Process; -import android.os.SystemBatteryConsumer; import android.os.UidBatteryConsumer; import android.os.WorkSource; import android.os.connectivity.WifiActivityEnergyInfo; @@ -94,17 +93,6 @@ public class WifiPowerCalculatorTest { assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI)) .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE); - SystemBatteryConsumer systemConsumer = - mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_WIFI); - assertThat(systemConsumer.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isEqualTo(5577); - assertThat(systemConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isWithin(PRECISION).of(1.11153); - assertThat(systemConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE); - assertThat(systemConsumer.getPowerConsumedByApps()) - .isWithin(PRECISION).of(0.466333); - BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer(); assertThat(deviceConsumer.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_WIFI)) .isEqualTo(4002); @@ -139,18 +127,6 @@ public class WifiPowerCalculatorTest { assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI)) .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY); - SystemBatteryConsumer systemConsumer = - mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_WIFI); - assertThat(systemConsumer.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isEqualTo(5577); - /* Same ratio as in testPowerControllerBasedModel_nonMeasured but scaled by 1_000_000uC. */ - assertThat(systemConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isWithin(PRECISION).of(1.11153 / (0.2214666 + 0.645200) * 1_000_000 / 3600000); - assertThat(systemConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY); - assertThat(systemConsumer.getPowerConsumedByApps()) - .isWithin(PRECISION).of(0.14946); - BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer(); assertThat(deviceConsumer.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_WIFI)) .isEqualTo(4002); @@ -196,17 +172,6 @@ public class WifiPowerCalculatorTest { .isWithin(PRECISION).of(0.8231573); assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI)) .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE); - - SystemBatteryConsumer systemConsumer = - mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_WIFI); - assertThat(systemConsumer.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isEqualTo(2222); - assertThat(systemConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isWithin(PRECISION).of(2.575000); - assertThat(systemConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE); - assertThat(systemConsumer.getPowerConsumedByApps()) - .isWithin(PRECISION).of(1.69907); } @Test @@ -228,17 +193,5 @@ public class WifiPowerCalculatorTest { .isWithin(PRECISION).of(0.8231573 / (0.8231573 + 0.8759216) * 1_000_000 / 3600000); assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI)) .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY); - - SystemBatteryConsumer systemConsumer = - mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_WIFI); - assertThat(systemConsumer.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isEqualTo(2222); - /* Same ratio as in testTimerBasedModel_nonMeasured but scaled by 1_000_000uC. */ - assertThat(systemConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isWithin(PRECISION).of(2.575000 / (0.8231573 + 0.8759216) * 1_000_000 / 3600000); - assertThat(systemConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI)) - .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY); - assertThat(systemConsumer.getPowerConsumedByApps()) - .isWithin(PRECISION).of(0.277777); } }