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

Commit 07bc3d6d authored by Dmitri Plotnikov's avatar Dmitri Plotnikov Committed by Android (Google) Code Review
Browse files

Merge "Add BatteryConsumer.getCustomPowerComponentName() and...

Merge "Add BatteryConsumer.getCustomPowerComponentName() and getCustomPowerComponentCount()" into sc-dev
parents a6d96b39 3885aa96
Loading
Loading
Loading
Loading
+21 −3
Original line number Diff line number Diff line
@@ -149,6 +149,7 @@ public abstract class BatteryConsumer {
    public static final int POWER_MODEL_MEASURED_ENERGY = 1;

    private final PowerComponents mPowerComponents;
    private String[] mCustomPowerComponentNames;

    protected BatteryConsumer(@NonNull PowerComponents powerComponents) {
        mPowerComponents = powerComponents;
@@ -192,6 +193,23 @@ public abstract class BatteryConsumer {
        return mPowerComponents.getConsumedPowerForCustomComponent(componentId);
    }

    public int getCustomPowerComponentCount() {
        return mPowerComponents.getCustomPowerComponentCount();
    }

    void setCustomPowerComponentNames(String[] customPowerComponentNames) {
        mPowerComponents.setCustomPowerComponentNames(customPowerComponentNames);
    }

    /**
     * Returns the name of the specified power component.
     *
     * @param componentId The ID of the custom power component.
     */
    public String getCustomPowerComponentName(int componentId) {
        return mPowerComponents.getCustomPowerComponentName(componentId);
    }

    /**
     * Returns the amount of time since BatteryStats reset used by the specified component, e.g.
     * CPU, WiFi etc.
@@ -222,9 +240,9 @@ public abstract class BatteryConsumer {
    protected abstract static class BaseBuilder<T extends BaseBuilder<?>> {
        final PowerComponents.Builder mPowerComponentsBuilder;

        public BaseBuilder(int customPowerComponentCount, int customTimeComponentCount,
                boolean includePowerModels) {
            mPowerComponentsBuilder = new PowerComponents.Builder(customPowerComponentCount,
        public BaseBuilder(@NonNull String[] customPowerComponentNames,
                int customTimeComponentCount, boolean includePowerModels) {
            mPowerComponentsBuilder = new PowerComponents.Builder(customPowerComponentNames,
                    customTimeComponentCount, includePowerModels);
        }

+54 −20
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.internal.os.BatteryStatsHistory;
import com.android.internal.os.BatteryStatsHistoryIterator;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
@@ -39,9 +40,10 @@ public final class BatteryUsageStats implements Parcelable {
    private final double mDischargedPowerUpperBound;
    private final long mBatteryTimeRemainingMs;
    private final long mChargeTimeRemainingMs;
    private final ArrayList<UidBatteryConsumer> mUidBatteryConsumers;
    private final ArrayList<SystemBatteryConsumer> mSystemBatteryConsumers;
    private final ArrayList<UserBatteryConsumer> mUserBatteryConsumers;
    private final String[] mCustomPowerComponentNames;
    private final List<UidBatteryConsumer> mUidBatteryConsumers;
    private final List<SystemBatteryConsumer> mSystemBatteryConsumers;
    private final List<UserBatteryConsumer> mUserBatteryConsumers;
    private final Parcel mHistoryBuffer;
    private final List<BatteryStats.HistoryTag> mHistoryTagPool;

@@ -54,6 +56,7 @@ public final class BatteryUsageStats implements Parcelable {
        mHistoryTagPool = builder.mHistoryTagPool;
        mBatteryTimeRemainingMs = builder.mBatteryTimeRemainingMs;
        mChargeTimeRemainingMs = builder.mChargeTimeRemainingMs;
        mCustomPowerComponentNames = builder.mCustomPowerComponentNames;

        double totalPower = 0;

@@ -182,12 +185,31 @@ public final class BatteryUsageStats implements Parcelable {
        mDischargedPowerUpperBound = source.readDouble();
        mBatteryTimeRemainingMs = source.readLong();
        mChargeTimeRemainingMs = source.readLong();
        mUidBatteryConsumers = new ArrayList<>();
        source.readParcelableList(mUidBatteryConsumers, getClass().getClassLoader());
        mSystemBatteryConsumers = new ArrayList<>();
        source.readParcelableList(mSystemBatteryConsumers, getClass().getClassLoader());
        mUserBatteryConsumers = new ArrayList<>();
        source.readParcelableList(mUserBatteryConsumers, getClass().getClassLoader());
        mCustomPowerComponentNames = source.readStringArray();
        int uidCount = source.readInt();
        mUidBatteryConsumers = new ArrayList<>(uidCount);
        for (int i = 0; i < uidCount; i++) {
            final UidBatteryConsumer consumer =
                    UidBatteryConsumer.CREATOR.createFromParcel(source);
            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++) {
            final UserBatteryConsumer consumer =
                    UserBatteryConsumer.CREATOR.createFromParcel(source);
            consumer.setCustomPowerComponentNames(mCustomPowerComponentNames);
            mUserBatteryConsumers.add(consumer);
        }
        if (source.readBoolean()) {
            mHistoryBuffer = Parcel.obtain();
            mHistoryBuffer.setDataSize(0);
@@ -211,6 +233,8 @@ public final class BatteryUsageStats implements Parcelable {
            mHistoryBuffer = null;
            mHistoryTagPool = null;
        }
        System.out.println("From Parcel = " + Arrays.toString(
                mCustomPowerComponentNames));
    }

    @Override
@@ -222,9 +246,19 @@ public final class BatteryUsageStats implements Parcelable {
        dest.writeDouble(mDischargedPowerUpperBound);
        dest.writeLong(mBatteryTimeRemainingMs);
        dest.writeLong(mChargeTimeRemainingMs);
        dest.writeParcelableList(mUidBatteryConsumers, flags);
        dest.writeParcelableList(mSystemBatteryConsumers, flags);
        dest.writeParcelableList(mUserBatteryConsumers, flags);
        dest.writeStringArray(mCustomPowerComponentNames);
        dest.writeInt(mUidBatteryConsumers.size());
        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);
        }
        if (mHistoryBuffer != null) {
            dest.writeBoolean(true);

@@ -259,7 +293,7 @@ public final class BatteryUsageStats implements Parcelable {
     * Builder for BatteryUsageStats.
     */
    public static final class Builder {
        private final int mCustomPowerComponentCount;
        private final String[] mCustomPowerComponentNames;
        private final int mCustomTimeComponentCount;
        private final boolean mIncludePowerModels;
        private long mStatsStartTimestampMs;
@@ -277,13 +311,13 @@ public final class BatteryUsageStats implements Parcelable {
        private Parcel mHistoryBuffer;
        private List<BatteryStats.HistoryTag> mHistoryTagPool;

        public Builder(int customPowerComponentCount, int customTimeComponentCount) {
            this(customPowerComponentCount, customTimeComponentCount, false);
        public Builder(String[] customPowerComponentNames, int customTimeComponentCount) {
            this(customPowerComponentNames, customTimeComponentCount, false);
        }

        public Builder(int customPowerComponentCount, int customTimeComponentCount,
        public Builder(String[] customPowerComponentNames, int customTimeComponentCount,
                boolean includePowerModels) {
            mCustomPowerComponentCount = customPowerComponentCount;
            mCustomPowerComponentNames = customPowerComponentNames;
            mCustomTimeComponentCount = customTimeComponentCount;
            mIncludePowerModels = includePowerModels;
        }
@@ -366,7 +400,7 @@ public final class BatteryUsageStats implements Parcelable {
            int uid = batteryStatsUid.getUid();
            UidBatteryConsumer.Builder builder = mUidBatteryConsumerBuilders.get(uid);
            if (builder == null) {
                builder = new UidBatteryConsumer.Builder(mCustomPowerComponentCount,
                builder = new UidBatteryConsumer.Builder(mCustomPowerComponentNames,
                        mCustomTimeComponentCount, mIncludePowerModels, batteryStatsUid);
                mUidBatteryConsumerBuilders.put(uid, builder);
            }
@@ -382,7 +416,7 @@ public final class BatteryUsageStats implements Parcelable {
                @SystemBatteryConsumer.DrainType int drainType) {
            SystemBatteryConsumer.Builder builder = mSystemBatteryConsumerBuilders.get(drainType);
            if (builder == null) {
                builder = new SystemBatteryConsumer.Builder(mCustomPowerComponentCount,
                builder = new SystemBatteryConsumer.Builder(mCustomPowerComponentNames,
                        mCustomTimeComponentCount, mIncludePowerModels, drainType);
                mSystemBatteryConsumerBuilders.put(drainType, builder);
            }
@@ -397,7 +431,7 @@ public final class BatteryUsageStats implements Parcelable {
        public UserBatteryConsumer.Builder getOrCreateUserBatteryConsumerBuilder(int userId) {
            UserBatteryConsumer.Builder builder = mUserBatteryConsumerBuilders.get(userId);
            if (builder == null) {
                builder = new UserBatteryConsumer.Builder(mCustomPowerComponentCount,
                builder = new UserBatteryConsumer.Builder(mCustomPowerComponentNames,
                        mCustomTimeComponentCount, mIncludePowerModels, userId);
                mUserBatteryConsumerBuilders.put(userId, builder);
            }
+33 −6
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ import android.annotation.NonNull;
class PowerComponents {
    private static final int CUSTOM_POWER_COMPONENT_OFFSET = BatteryConsumer.POWER_COMPONENT_COUNT
            - BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID;
    public static final int CUSTOM_TIME_COMPONENT_OFFSET = BatteryConsumer.TIME_COMPONENT_COUNT
    private static final int CUSTOM_TIME_COMPONENT_OFFSET = BatteryConsumer.TIME_COMPONENT_COUNT
            - BatteryConsumer.FIRST_CUSTOM_TIME_COMPONENT_ID;

    private final double mTotalConsumedPowerMah;
@@ -34,9 +34,12 @@ class PowerComponents {
    private final long[] mTimeComponentsMs;
    private final int mCustomPowerComponentCount;
    private final byte[] mPowerModels;
    // Not written to Parcel and must be explicitly restored during the parent object's unparceling
    private String[] mCustomPowerComponentNames;

    PowerComponents(@NonNull Builder builder) {
        mCustomPowerComponentCount = builder.mCustomPowerComponentCount;
        mCustomPowerComponentNames = builder.mCustomPowerComponentNames;
        mCustomPowerComponentCount = mCustomPowerComponentNames.length;
        mPowerComponentsMah = builder.mPowerComponentsMah;
        mTimeComponentsMs = builder.mTimeComponentsMs;
        mTotalConsumedPowerMah = builder.getTotalPower();
@@ -117,6 +120,26 @@ class PowerComponents {
        }
    }

    void setCustomPowerComponentNames(String[] customPowerComponentNames) {
        mCustomPowerComponentNames = customPowerComponentNames;
    }

    public String getCustomPowerComponentName(int componentId) {
        if (componentId >= BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID
                && componentId < BatteryConsumer.LAST_CUSTOM_POWER_COMPONENT_ID) {
            try {
                return mCustomPowerComponentNames[componentId
                        - BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID];
            } catch (ArrayIndexOutOfBoundsException e) {
                throw new IllegalArgumentException(
                        "Unsupported custom power component ID: " + componentId);
            }
        } else {
            throw new IllegalArgumentException(
                    "Unsupported custom power component ID: " + componentId);
        }
    }

    @BatteryConsumer.PowerModel
    int getPowerModel(@BatteryConsumer.PowerComponent int component) {
        if (mPowerModels == null) {
@@ -164,20 +187,24 @@ class PowerComponents {
        }
    }

    public int getCustomPowerComponentCount() {
        return mCustomPowerComponentCount;
    }

    /**
     * Builder for PowerComponents.
     */
    static final class Builder {
        private final double[] mPowerComponentsMah;
        private final int mCustomPowerComponentCount;
        private final String[] mCustomPowerComponentNames;
        private final long[] mTimeComponentsMs;
        private final byte[] mPowerModels;

        Builder(int customPowerComponentCount, int customTimeComponentCount,
        Builder(@NonNull String[] customPowerComponentNames, int customTimeComponentCount,
                boolean includePowerModels) {
            mCustomPowerComponentCount = customPowerComponentCount;
            mCustomPowerComponentNames = customPowerComponentNames;
            int powerComponentCount =
                    BatteryConsumer.POWER_COMPONENT_COUNT + customPowerComponentCount;
                    BatteryConsumer.POWER_COMPONENT_COUNT + mCustomPowerComponentNames.length;
            mPowerComponentsMah = new double[powerComponentCount];
            mTimeComponentsMs =
                    new long[BatteryConsumer.TIME_COMPONENT_COUNT + customTimeComponentCount];
+2 −2
Original line number Diff line number Diff line
@@ -140,9 +140,9 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable
        private double mPowerConsumedByAppsMah;
        private List<UidBatteryConsumer.Builder> mUidBatteryConsumers;

        Builder(int customPowerComponentCount, int customTimeComponentCount,
        Builder(@NonNull String[] customPowerComponentNames, int customTimeComponentCount,
                boolean includePowerModels, @DrainType int drainType) {
            super(customPowerComponentCount, customTimeComponentCount, includePowerModels);
            super(customPowerComponentNames, customTimeComponentCount, includePowerModels);
            mDrainType = drainType;
        }

+2 −2
Original line number Diff line number Diff line
@@ -139,9 +139,9 @@ public final class UidBatteryConsumer extends BatteryConsumer implements Parcela
        public long mTimeInBackgroundMs;
        private boolean mExcludeFromBatteryUsageStats;

        public Builder(int customPowerComponentCount, int customTimeComponentCount,
        public Builder(@NonNull String[] customPowerComponentNames, int customTimeComponentCount,
                boolean includePowerModels, @NonNull BatteryStats.Uid batteryStatsUid) {
            super(customPowerComponentCount, customTimeComponentCount, includePowerModels);
            super(customPowerComponentNames, customTimeComponentCount, includePowerModels);
            mBatteryStatsUid = batteryStatsUid;
            mUid = batteryStatsUid.getUid();
        }
Loading