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

Commit 9bf5b2f1 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov
Browse files

Attribution of modem power per process state

Bug: 191921016
Test: atest FrameworksCoreTests:BatteryStatsTests

Change-Id: I43bde25785e246340dffe87a15fa960771fa1ec5
parent 5ffeb521
Loading
Loading
Loading
Loading
+15 −11
Original line number Diff line number Diff line
@@ -161,6 +161,7 @@ public abstract class BatteryConsumer {
     */
    @IntDef(prefix = {"PROCESS_STATE_"}, value = {
            PROCESS_STATE_ANY,
            PROCESS_STATE_UNSPECIFIED,
            PROCESS_STATE_FOREGROUND,
            PROCESS_STATE_BACKGROUND,
            PROCESS_STATE_FOREGROUND_SERVICE,
@@ -169,7 +170,8 @@ public abstract class BatteryConsumer {
    public @interface ProcessState {
    }

    public static final int PROCESS_STATE_ANY = 0;
    public static final int PROCESS_STATE_UNSPECIFIED = 0;
    public static final int PROCESS_STATE_ANY = PROCESS_STATE_UNSPECIFIED;
    public static final int PROCESS_STATE_FOREGROUND = 1;
    public static final int PROCESS_STATE_BACKGROUND = 2;
    public static final int PROCESS_STATE_FOREGROUND_SERVICE = 3;
@@ -180,7 +182,7 @@ public abstract class BatteryConsumer {

    static {
        // Assign individually to avoid future mismatch
        sProcessStateNames[PROCESS_STATE_ANY] = "any";
        sProcessStateNames[PROCESS_STATE_UNSPECIFIED] = "unspecified";
        sProcessStateNames[PROCESS_STATE_FOREGROUND] = "fg";
        sProcessStateNames[PROCESS_STATE_BACKGROUND] = "bg";
        sProcessStateNames[PROCESS_STATE_FOREGROUND_SERVICE] = "fgs";
@@ -188,6 +190,7 @@ public abstract class BatteryConsumer {

    private static final int[] SUPPORTED_POWER_COMPONENTS_PER_PROCESS_STATE = {
            POWER_COMPONENT_CPU,
            POWER_COMPONENT_MOBILE_RADIO,
    };

    static final int COLUMN_INDEX_BATTERY_CONSUMER_TYPE = 0;
@@ -213,7 +216,7 @@ public abstract class BatteryConsumer {
                sb.append("powerComponent=").append(sPowerComponentNames[powerComponent]);
                dimensionSpecified = true;
            }
            if (processState != PROCESS_STATE_ANY) {
            if (processState != PROCESS_STATE_UNSPECIFIED) {
                if (dimensionSpecified) {
                    sb.append(", ");
                }
@@ -283,7 +286,7 @@ public abstract class BatteryConsumer {
            if (mShortString == null) {
                StringBuilder sb = new StringBuilder();
                sb.append(powerComponentIdToString(powerComponent));
                if (processState != PROCESS_STATE_ANY) {
                if (processState != PROCESS_STATE_UNSPECIFIED) {
                    sb.append(':');
                    sb.append(processStateToString(processState));
                }
@@ -333,7 +336,7 @@ public abstract class BatteryConsumer {
     * for all values of other dimensions such as process state.
     */
    public Key getKey(@PowerComponent int componentId) {
        return mData.getKey(componentId, PROCESS_STATE_ANY);
        return mData.getKey(componentId, PROCESS_STATE_UNSPECIFIED);
    }

    /**
@@ -352,7 +355,7 @@ public abstract class BatteryConsumer {
     */
    public double getConsumedPower(@PowerComponent int componentId) {
        return mPowerComponents.getConsumedPower(
                mData.getKeyOrThrow(componentId, PROCESS_STATE_ANY));
                mData.getKeyOrThrow(componentId, PROCESS_STATE_UNSPECIFIED));
    }

    /**
@@ -374,7 +377,7 @@ public abstract class BatteryConsumer {
     */
    public @PowerModel int getPowerModel(@BatteryConsumer.PowerComponent int componentId) {
        return mPowerComponents.getPowerModel(
                mData.getKeyOrThrow(componentId, PROCESS_STATE_ANY));
                mData.getKeyOrThrow(componentId, PROCESS_STATE_UNSPECIFIED));
    }

    /**
@@ -706,7 +709,7 @@ public abstract class BatteryConsumer {
                    if (isSupported) {
                        for (int processState = 0; processState < PROCESS_STATE_COUNT;
                                processState++) {
                            if (processState == PROCESS_STATE_ANY) {
                            if (processState == PROCESS_STATE_UNSPECIFIED) {
                                continue;
                            }

@@ -789,7 +792,7 @@ public abstract class BatteryConsumer {
        @NonNull
        public T setConsumedPower(@PowerComponent int componentId, double componentPower,
                @PowerModel int powerModel) {
            mPowerComponentsBuilder.setConsumedPower(getKey(componentId, PROCESS_STATE_ANY),
            mPowerComponentsBuilder.setConsumedPower(getKey(componentId, PROCESS_STATE_UNSPECIFIED),
                    componentPower, powerModel);
            return (T) this;
        }
@@ -825,7 +828,8 @@ public abstract class BatteryConsumer {
        @NonNull
        public T setUsageDurationMillis(@UidBatteryConsumer.PowerComponent int componentId,
                long componentUsageTimeMillis) {
            mPowerComponentsBuilder.setUsageDurationMillis(getKey(componentId, PROCESS_STATE_ANY),
            mPowerComponentsBuilder
                    .setUsageDurationMillis(getKey(componentId, PROCESS_STATE_UNSPECIFIED),
                            componentUsageTimeMillis);
            return (T) this;
        }
+18 −1
Original line number Diff line number Diff line
@@ -669,7 +669,7 @@ public abstract class BatteryStats implements Parcelable {
            case BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE:
                return BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE;
            default:
                return BatteryConsumer.PROCESS_STATE_ANY;
                return BatteryConsumer.PROCESS_STATE_UNSPECIFIED;
        }
    }

@@ -963,6 +963,13 @@ public abstract class BatteryStats implements Parcelable {
        public abstract long getNetworkActivityPackets(int type, int which);
        @UnsupportedAppUsage
        public abstract long getMobileRadioActiveTime(int which);

        /**
         * Returns the amount of time (in microseconds) this UID was in the specified processState.
         */
        public abstract long getMobileRadioActiveTimeInProcessState(
                @BatteryConsumer.ProcessState int processState);

        public abstract int getMobileRadioActiveCount(int which);

        /**
@@ -1060,6 +1067,16 @@ public abstract class BatteryStats implements Parcelable {
         */
        public abstract long getMobileRadioMeasuredBatteryConsumptionUC();

        /**
         * Returns the battery consumption (in microcoulombs) of the uid's radio usage when in the
         * specified process state.
         * Will return {@link #POWER_DATA_UNAVAILABLE} if data is unavailable.
         *
         * {@hide}
         */
        public abstract long getMobileRadioMeasuredBatteryConsumptionUC(
                @BatteryConsumer.ProcessState int processState);

        /**
         * Returns the battery consumption (in microcoulombs) of the screen while on and uid active,
         * derived from on device power measurement data.
+1 −1
Original line number Diff line number Diff line
@@ -556,7 +556,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable {
                }

                String label = BatteryConsumer.powerComponentIdToString(componentId);
                if (key.processState != BatteryConsumer.PROCESS_STATE_ANY) {
                if (key.processState != BatteryConsumer.PROCESS_STATE_UNSPECIFIED) {
                    label = label
                            + "(" + BatteryConsumer.processStateToString(key.processState) + ")";
                }
+3 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.os;
import static android.os.BatteryConsumer.POWER_COMPONENT_ANY;
import static android.os.BatteryConsumer.POWER_COMPONENT_COUNT;
import static android.os.BatteryConsumer.PROCESS_STATE_ANY;
import static android.os.BatteryConsumer.PROCESS_STATE_UNSPECIFIED;
import static android.os.BatteryConsumer.convertMahToDeciCoulombs;

import android.annotation.NonNull;
@@ -339,7 +340,7 @@ class PowerComponents {

                serializer.startTag(null, BatteryUsageStats.XML_TAG_COMPONENT);
                serializer.attributeInt(null, BatteryUsageStats.XML_ATTR_ID, componentId);
                if (key.processState != PROCESS_STATE_ANY) {
                if (key.processState != PROCESS_STATE_UNSPECIFIED) {
                    serializer.attributeInt(null, BatteryUsageStats.XML_ATTR_PROCESS_STATE,
                            key.processState);
                }
@@ -398,7 +399,7 @@ class PowerComponents {
                switch (parser.getName()) {
                    case BatteryUsageStats.XML_TAG_COMPONENT: {
                        int componentId = -1;
                        int processState = PROCESS_STATE_ANY;
                        int processState = PROCESS_STATE_UNSPECIFIED;
                        double powerMah = 0;
                        long durationMs = 0;
                        int model = BatteryConsumer.POWER_MODEL_UNDEFINED;
+141 −48

File changed.

Preview size limit exceeded, changes collapsed.

Loading