Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3497fb9b authored by Dmitri Plotnikov's avatar Dmitri Plotnikov Committed by Automerger Merge Worker
Browse files

Merge "Add SystemBatteryConsumer.getPowerConsumedByApps()" into sc-dev am: eb2a57b8

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13944376

Change-Id: Ibed8bbf53944d2ef88f4cd2224cb4680d1e91494
parents 06cff513 eb2a57b8
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ 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;
@@ -31,6 +32,7 @@ import java.util.List;
 * {@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)
@@ -72,6 +74,8 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable
    @DrainType
    private final int mDrainType;

    private final double mPowerConsumedByAppsMah;

    @DrainType
    public int getDrainType() {
        return mDrainType;
@@ -80,11 +84,23 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable
    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;
    }

    /**
@@ -94,6 +110,7 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
        dest.writeInt(mDrainType);
        dest.writeDouble(mPowerConsumedByAppsMah);
    }

    public static final Creator<SystemBatteryConsumer> CREATOR =
@@ -120,6 +137,7 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable
    public static final class Builder extends BaseBuilder<Builder> {
        @DrainType
        private final int mDrainType;
        private double mPowerConsumedByAppsMah;
        private List<UidBatteryConsumer.Builder> mUidBatteryConsumers;

        Builder(int customPowerComponentCount, int customTimeComponentCount,
@@ -128,6 +146,15 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable
            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
+4 −4
Original line number Diff line number Diff line
@@ -84,16 +84,16 @@ public class BluetoothPowerCalculator extends PowerCalculator {

        // Subtract what the apps used, but clamp to 0.
        final long systemComponentDurationMs = Math.max(0, systemDurationMs - total.durationMs);
        final double systemComponentPowerMah = Math.max(0, systemPowerMah - total.powerMah);
        if (DEBUG && systemComponentPowerMah != 0) {
        if (DEBUG) {
            Log.d(TAG, "Bluetooth active: time=" + (systemComponentDurationMs)
                    + " power=" + formatCharge(systemComponentPowerMah));
                    + " power=" + formatCharge(systemPowerMah));
        }
        systemBatteryConsumerBuilder
                .setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_BLUETOOTH,
                        systemComponentDurationMs)
                .setConsumedPower(BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
                        systemComponentPowerMah);
                        Math.max(systemPowerMah, total.powerMah))
                .setPowerConsumedByApps(total.powerMah);
    }

    private void calculateApp(UidBatteryConsumer.Builder app, PowerAndDuration total,
+10 −6
Original line number Diff line number Diff line
@@ -42,8 +42,9 @@ public class MobileRadioPowerCalculator extends PowerCalculator {

    private static class PowerAndDuration {
        public long durationMs;
        public double powerMah;
        public double remainingPowerMah;
        public long totalAppDurationMs;
        public double totalAppPowerMah;
        public long signalDurationMs;
        public long noCoverageDurationMs;
    }
@@ -103,12 +104,14 @@ public class MobileRadioPowerCalculator extends PowerCalculator {
        calculateRemaining(total, batteryStats, rawRealtimeUs,
                query.shouldForceUsePowerProfileModel());

        if (total.powerMah != 0) {
        if (total.remainingPowerMah != 0 || total.totalAppPowerMah != 0) {
            builder.getOrCreateSystemBatteryConsumerBuilder(
                    SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO)
                    .setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_MOBILE_RADIO,
                            total.durationMs)
                    .setConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO, total.powerMah);
                    .setConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
                            total.remainingPowerMah + total.totalAppPowerMah)
                    .setPowerConsumedByApps(total.totalAppPowerMah);
        }
    }

@@ -120,6 +123,7 @@ public class MobileRadioPowerCalculator extends PowerCalculator {

        final double powerMah = calculatePower(u, powerPerPacketMah, radioActiveDurationMs,
                shouldForceUsePowerProfileModel);
        total.totalAppPowerMah += powerMah;

        app.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_MOBILE_RADIO,
                radioActiveDurationMs)
@@ -142,14 +146,14 @@ public class MobileRadioPowerCalculator extends PowerCalculator {

        BatterySipper radio = new BatterySipper(BatterySipper.DrainType.CELL, null, 0);
        calculateRemaining(total, batteryStats, rawRealtimeUs, false);
        if (total.powerMah != 0) {
        if (total.remainingPowerMah != 0) {
            if (total.signalDurationMs != 0) {
                radio.noCoveragePercent =
                        total.noCoverageDurationMs * 100.0 / total.signalDurationMs;
            }
            radio.mobileActive = total.durationMs;
            radio.mobileActiveCount = batteryStats.getMobileRadioActiveUnknownCount(statsType);
            radio.mobileRadioPowerMah = total.powerMah;
            radio.mobileRadioPowerMah = total.remainingPowerMah;
            radio.sumPower();
        }
        if (radio.totalPowerMah > 0) {
@@ -265,7 +269,7 @@ public class MobileRadioPowerCalculator extends PowerCalculator {
            }
        }
        total.durationMs = radioActiveTimeMs;
        total.powerMah = powerMah;
        total.remainingPowerMah = powerMah;
        total.signalDurationMs = signalTimeMs;
    }

+10 −5
Original line number Diff line number Diff line
@@ -66,11 +66,7 @@ public class ScreenPowerCalculator extends PowerCalculator {
                batteryStats, rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED,
                query.shouldForceUsePowerProfileModel());

        builder.getOrCreateSystemBatteryConsumerBuilder(SystemBatteryConsumer.DRAIN_TYPE_SCREEN)
                .setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_USAGE,
                        totalPowerAndDuration.durationMs)
                .setConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE,
                        totalPowerAndDuration.powerMah);
        double totalAppPower = 0;

        // Now deal with each app's UidBatteryConsumer. The results are stored in the
        // BatteryConsumer.POWER_COMPONENT_SCREEN power component, which is considered smeared,
@@ -87,11 +83,20 @@ public class ScreenPowerCalculator extends PowerCalculator {
                                appPowerAndDuration.durationMs)
                        .setConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN,
                                appPowerAndDuration.powerMah);
                totalAppPower += appPowerAndDuration.powerMah;
            }
        } else {
            smearScreenBatteryDrain(uidBatteryConsumerBuilders, totalPowerAndDuration,
                    rawRealtimeUs);
            totalAppPower = totalPowerAndDuration.powerMah;
        }

        builder.getOrCreateSystemBatteryConsumerBuilder(SystemBatteryConsumer.DRAIN_TYPE_SCREEN)
                .setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_USAGE,
                        totalPowerAndDuration.durationMs)
                .setConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE,
                        Math.max(totalPowerAndDuration.powerMah, totalAppPower))
                .setPowerConsumedByApps(totalAppPower);
    }

    /**
+2 −1
Original line number Diff line number Diff line
@@ -121,7 +121,8 @@ public class WifiPowerCalculator extends PowerCalculator {
                .setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_WIFI,
                        powerDurationAndTraffic.durationMs)
                .setConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI,
                        powerDurationAndTraffic.powerMah);
                        totalAppPowerMah + powerDurationAndTraffic.powerMah)
                .setPowerConsumedByApps(totalAppPowerMah);
    }

    /**
Loading