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

Commit 61e1769c authored by Zaiyue Xue's avatar Zaiyue Xue Committed by Android (Google) Code Review
Browse files

Merge "Add a threshold to filter out small power usage in battery stats." into udc-qpr-dev

parents d9b817da 0549a3f2
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -116,8 +116,9 @@ public final class AggregateBatteryConsumer extends BatteryConsumer {
     * Builder for DeviceBatteryConsumer.
     * Builder for DeviceBatteryConsumer.
     */
     */
    public static final class Builder extends BaseBuilder<AggregateBatteryConsumer.Builder> {
    public static final class Builder extends BaseBuilder<AggregateBatteryConsumer.Builder> {
        public Builder(BatteryConsumer.BatteryConsumerData data, int scope) {
        public Builder(BatteryConsumer.BatteryConsumerData data, int scope,
            super(data, CONSUMER_TYPE_AGGREGATE);
                double minConsumedPowerThreshold) {
            super(data, CONSUMER_TYPE_AGGREGATE, minConsumedPowerThreshold);
            data.putInt(COLUMN_INDEX_SCOPE, scope);
            data.putInt(COLUMN_INDEX_SCOPE, scope);
        }
        }


+3 −2
Original line number Original line Diff line number Diff line
@@ -795,11 +795,12 @@ public abstract class BatteryConsumer {
        protected final BatteryConsumer.BatteryConsumerData mData;
        protected final BatteryConsumer.BatteryConsumerData mData;
        protected final PowerComponents.Builder mPowerComponentsBuilder;
        protected final PowerComponents.Builder mPowerComponentsBuilder;


        public BaseBuilder(BatteryConsumer.BatteryConsumerData data, int consumerType) {
        public BaseBuilder(BatteryConsumer.BatteryConsumerData data, int consumerType,
                double minConsumedPowerThreshold) {
            mData = data;
            mData = data;
            data.putLong(COLUMN_INDEX_BATTERY_CONSUMER_TYPE, consumerType);
            data.putLong(COLUMN_INDEX_BATTERY_CONSUMER_TYPE, consumerType);


            mPowerComponentsBuilder = new PowerComponents.Builder(data);
            mPowerComponentsBuilder = new PowerComponents.Builder(data, minConsumedPowerThreshold);
        }
        }


        @Nullable
        @Nullable
+11 −7
Original line number Original line Diff line number Diff line
@@ -707,7 +707,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable {
                        XML_ATTR_PREFIX_INCLUDES_PROC_STATE_DATA, false);
                        XML_ATTR_PREFIX_INCLUDES_PROC_STATE_DATA, false);


                builder = new Builder(customComponentNames.toArray(new String[0]), true,
                builder = new Builder(customComponentNames.toArray(new String[0]), true,
                        includesProcStateData);
                        includesProcStateData, 0);


                builder.setStatsStartTimestamp(
                builder.setStatsStartTimestamp(
                        parser.getAttributeLong(null, XML_ATTR_START_TIMESTAMP));
                        parser.getAttributeLong(null, XML_ATTR_START_TIMESTAMP));
@@ -782,6 +782,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable {
        private final String[] mCustomPowerComponentNames;
        private final String[] mCustomPowerComponentNames;
        private final boolean mIncludePowerModels;
        private final boolean mIncludePowerModels;
        private final boolean mIncludesProcessStateData;
        private final boolean mIncludesProcessStateData;
        private final double mMinConsumedPowerThreshold;
        private final BatteryConsumer.BatteryConsumerDataLayout mBatteryConsumerDataLayout;
        private final BatteryConsumer.BatteryConsumerDataLayout mBatteryConsumerDataLayout;
        private long mStatsStartTimestampMs;
        private long mStatsStartTimestampMs;
        private long mStatsEndTimestampMs;
        private long mStatsEndTimestampMs;
@@ -802,11 +803,11 @@ public final class BatteryUsageStats implements Parcelable, Closeable {
        private BatteryStatsHistory mBatteryStatsHistory;
        private BatteryStatsHistory mBatteryStatsHistory;


        public Builder(@NonNull String[] customPowerComponentNames) {
        public Builder(@NonNull String[] customPowerComponentNames) {
            this(customPowerComponentNames, false, false);
            this(customPowerComponentNames, false, false, 0);
        }
        }


        public Builder(@NonNull String[] customPowerComponentNames, boolean includePowerModels,
        public Builder(@NonNull String[] customPowerComponentNames, boolean includePowerModels,
                boolean includeProcessStateData) {
                boolean includeProcessStateData, double minConsumedPowerThreshold) {
            mBatteryConsumersCursorWindow =
            mBatteryConsumersCursorWindow =
                    new CursorWindow(null, BATTERY_CONSUMER_CURSOR_WINDOW_SIZE);
                    new CursorWindow(null, BATTERY_CONSUMER_CURSOR_WINDOW_SIZE);
            mBatteryConsumerDataLayout =
            mBatteryConsumerDataLayout =
@@ -817,12 +818,14 @@ public final class BatteryUsageStats implements Parcelable, Closeable {
            mCustomPowerComponentNames = customPowerComponentNames;
            mCustomPowerComponentNames = customPowerComponentNames;
            mIncludePowerModels = includePowerModels;
            mIncludePowerModels = includePowerModels;
            mIncludesProcessStateData = includeProcessStateData;
            mIncludesProcessStateData = includeProcessStateData;
            mMinConsumedPowerThreshold = minConsumedPowerThreshold;
            for (int scope = 0; scope < AGGREGATE_BATTERY_CONSUMER_SCOPE_COUNT; scope++) {
            for (int scope = 0; scope < AGGREGATE_BATTERY_CONSUMER_SCOPE_COUNT; scope++) {
                final BatteryConsumer.BatteryConsumerData data =
                final BatteryConsumer.BatteryConsumerData data =
                        BatteryConsumer.BatteryConsumerData.create(mBatteryConsumersCursorWindow,
                        BatteryConsumer.BatteryConsumerData.create(mBatteryConsumersCursorWindow,
                                mBatteryConsumerDataLayout);
                                mBatteryConsumerDataLayout);
                mAggregateBatteryConsumersBuilders[scope] =
                mAggregateBatteryConsumersBuilders[scope] =
                        new AggregateBatteryConsumer.Builder(data, scope);
                        new AggregateBatteryConsumer.Builder(
                                data, scope, mMinConsumedPowerThreshold);
            }
            }
        }
        }


@@ -961,7 +964,8 @@ public final class BatteryUsageStats implements Parcelable, Closeable {
                final BatteryConsumer.BatteryConsumerData data =
                final BatteryConsumer.BatteryConsumerData data =
                        BatteryConsumer.BatteryConsumerData.create(mBatteryConsumersCursorWindow,
                        BatteryConsumer.BatteryConsumerData.create(mBatteryConsumersCursorWindow,
                                mBatteryConsumerDataLayout);
                                mBatteryConsumerDataLayout);
                builder = new UidBatteryConsumer.Builder(data, batteryStatsUid);
                builder = new UidBatteryConsumer.Builder(data, batteryStatsUid,
                        mMinConsumedPowerThreshold);
                mUidBatteryConsumerBuilders.put(uid, builder);
                mUidBatteryConsumerBuilders.put(uid, builder);
            }
            }
            return builder;
            return builder;
@@ -979,7 +983,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable {
                final BatteryConsumer.BatteryConsumerData data =
                final BatteryConsumer.BatteryConsumerData data =
                        BatteryConsumer.BatteryConsumerData.create(mBatteryConsumersCursorWindow,
                        BatteryConsumer.BatteryConsumerData.create(mBatteryConsumersCursorWindow,
                                mBatteryConsumerDataLayout);
                                mBatteryConsumerDataLayout);
                builder = new UidBatteryConsumer.Builder(data, uid);
                builder = new UidBatteryConsumer.Builder(data, uid, mMinConsumedPowerThreshold);
                mUidBatteryConsumerBuilders.put(uid, builder);
                mUidBatteryConsumerBuilders.put(uid, builder);
            }
            }
            return builder;
            return builder;
@@ -996,7 +1000,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable {
                final BatteryConsumer.BatteryConsumerData data =
                final BatteryConsumer.BatteryConsumerData data =
                        BatteryConsumer.BatteryConsumerData.create(mBatteryConsumersCursorWindow,
                        BatteryConsumer.BatteryConsumerData.create(mBatteryConsumersCursorWindow,
                                mBatteryConsumerDataLayout);
                                mBatteryConsumerDataLayout);
                builder = new UserBatteryConsumer.Builder(data, userId);
                builder = new UserBatteryConsumer.Builder(data, userId, mMinConsumedPowerThreshold);
                mUserBatteryConsumerBuilders.put(userId, builder);
                mUserBatteryConsumerBuilders.put(userId, builder);
            }
            }
            return builder;
            return builder;
+22 −0
Original line number Original line Diff line number Diff line
@@ -80,6 +80,7 @@ public final class BatteryUsageStatsQuery implements Parcelable {
    private final long mMaxStatsAgeMs;
    private final long mMaxStatsAgeMs;
    private final long mFromTimestamp;
    private final long mFromTimestamp;
    private final long mToTimestamp;
    private final long mToTimestamp;
    private final double mMinConsumedPowerThreshold;
    private final @BatteryConsumer.PowerComponent int[] mPowerComponents;
    private final @BatteryConsumer.PowerComponent int[] mPowerComponents;


    private BatteryUsageStatsQuery(@NonNull Builder builder) {
    private BatteryUsageStatsQuery(@NonNull Builder builder) {
@@ -87,6 +88,7 @@ public final class BatteryUsageStatsQuery implements Parcelable {
        mUserIds = builder.mUserIds != null ? builder.mUserIds.toArray()
        mUserIds = builder.mUserIds != null ? builder.mUserIds.toArray()
                : new int[]{UserHandle.USER_ALL};
                : new int[]{UserHandle.USER_ALL};
        mMaxStatsAgeMs = builder.mMaxStatsAgeMs;
        mMaxStatsAgeMs = builder.mMaxStatsAgeMs;
        mMinConsumedPowerThreshold = builder.mMinConsumedPowerThreshold;
        mFromTimestamp = builder.mFromTimestamp;
        mFromTimestamp = builder.mFromTimestamp;
        mToTimestamp = builder.mToTimestamp;
        mToTimestamp = builder.mToTimestamp;
        mPowerComponents = builder.mPowerComponents;
        mPowerComponents = builder.mPowerComponents;
@@ -136,6 +138,14 @@ public final class BatteryUsageStatsQuery implements Parcelable {
        return mMaxStatsAgeMs;
        return mMaxStatsAgeMs;
    }
    }


    /**
     * Returns the minimal power component consumed power threshold. The small power consuming
     * components will be reported as zero.
     */
    public double getMinConsumedPowerThreshold() {
        return mMinConsumedPowerThreshold;
    }

    /**
    /**
     * Returns the exclusive lower bound of the stored snapshot timestamps that should be included
     * Returns the exclusive lower bound of the stored snapshot timestamps that should be included
     * in the aggregation.  Ignored if {@link #getToTimestamp()} is zero.
     * in the aggregation.  Ignored if {@link #getToTimestamp()} is zero.
@@ -158,6 +168,7 @@ public final class BatteryUsageStatsQuery implements Parcelable {
        mUserIds = new int[in.readInt()];
        mUserIds = new int[in.readInt()];
        in.readIntArray(mUserIds);
        in.readIntArray(mUserIds);
        mMaxStatsAgeMs = in.readLong();
        mMaxStatsAgeMs = in.readLong();
        mMinConsumedPowerThreshold = in.readDouble();
        mFromTimestamp = in.readLong();
        mFromTimestamp = in.readLong();
        mToTimestamp = in.readLong();
        mToTimestamp = in.readLong();
        mPowerComponents = in.createIntArray();
        mPowerComponents = in.createIntArray();
@@ -169,6 +180,7 @@ public final class BatteryUsageStatsQuery implements Parcelable {
        dest.writeInt(mUserIds.length);
        dest.writeInt(mUserIds.length);
        dest.writeIntArray(mUserIds);
        dest.writeIntArray(mUserIds);
        dest.writeLong(mMaxStatsAgeMs);
        dest.writeLong(mMaxStatsAgeMs);
        dest.writeDouble(mMinConsumedPowerThreshold);
        dest.writeLong(mFromTimestamp);
        dest.writeLong(mFromTimestamp);
        dest.writeLong(mToTimestamp);
        dest.writeLong(mToTimestamp);
        dest.writeIntArray(mPowerComponents);
        dest.writeIntArray(mPowerComponents);
@@ -202,6 +214,7 @@ public final class BatteryUsageStatsQuery implements Parcelable {
        private long mMaxStatsAgeMs = DEFAULT_MAX_STATS_AGE_MS;
        private long mMaxStatsAgeMs = DEFAULT_MAX_STATS_AGE_MS;
        private long mFromTimestamp;
        private long mFromTimestamp;
        private long mToTimestamp;
        private long mToTimestamp;
        private double mMinConsumedPowerThreshold = 0;
        private @BatteryConsumer.PowerComponent int[] mPowerComponents;
        private @BatteryConsumer.PowerComponent int[] mPowerComponents;


        /**
        /**
@@ -301,5 +314,14 @@ public final class BatteryUsageStatsQuery implements Parcelable {
            mMaxStatsAgeMs = maxStatsAgeMs;
            mMaxStatsAgeMs = maxStatsAgeMs;
            return this;
            return this;
        }
        }

        /**
         * Set the minimal power component consumed power threshold. The small power consuming
         * components will be reported as zero.
         */
        public Builder setMinConsumedPowerThreshold(double minConsumedPowerThreshold) {
            mMinConsumedPowerThreshold = minConsumedPowerThreshold;
            return this;
        }
    }
    }
}
}
+9 −1
Original line number Original line Diff line number Diff line
@@ -461,9 +461,11 @@ class PowerComponents {
        private static final byte POWER_MODEL_UNINITIALIZED = -1;
        private static final byte POWER_MODEL_UNINITIALIZED = -1;


        private final BatteryConsumer.BatteryConsumerData mData;
        private final BatteryConsumer.BatteryConsumerData mData;
        private final double mMinConsumedPowerThreshold;


        Builder(BatteryConsumer.BatteryConsumerData data) {
        Builder(BatteryConsumer.BatteryConsumerData data, double minConsumedPowerThreshold) {
            mData = data;
            mData = data;
            mMinConsumedPowerThreshold = minConsumedPowerThreshold;
            for (BatteryConsumer.Key[] keys : mData.layout.keys) {
            for (BatteryConsumer.Key[] keys : mData.layout.keys) {
                for (BatteryConsumer.Key key : keys) {
                for (BatteryConsumer.Key key : keys) {
                    if (key.mPowerModelColumnIndex != -1) {
                    if (key.mPowerModelColumnIndex != -1) {
@@ -476,6 +478,9 @@ class PowerComponents {
        @NonNull
        @NonNull
        public Builder setConsumedPower(BatteryConsumer.Key key, double componentPower,
        public Builder setConsumedPower(BatteryConsumer.Key key, double componentPower,
                int powerModel) {
                int powerModel) {
            if (Math.abs(componentPower) < mMinConsumedPowerThreshold) {
                componentPower = 0;
            }
            mData.putDouble(key.mPowerColumnIndex, componentPower);
            mData.putDouble(key.mPowerColumnIndex, componentPower);
            if (key.mPowerModelColumnIndex != -1) {
            if (key.mPowerModelColumnIndex != -1) {
                mData.putInt(key.mPowerModelColumnIndex, powerModel);
                mData.putInt(key.mPowerModelColumnIndex, powerModel);
@@ -491,6 +496,9 @@ class PowerComponents {
         */
         */
        @NonNull
        @NonNull
        public Builder setConsumedPowerForCustomComponent(int componentId, double componentPower) {
        public Builder setConsumedPowerForCustomComponent(int componentId, double componentPower) {
            if (Math.abs(componentPower) < mMinConsumedPowerThreshold) {
                componentPower = 0;
            }
            final int index = componentId - BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID;
            final int index = componentId - BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID;
            if (index < 0 || index >= mData.layout.customPowerComponentCount) {
            if (index < 0 || index >= mData.layout.customPowerComponentCount) {
                throw new IllegalArgumentException(
                throw new IllegalArgumentException(
Loading