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

Commit 035fba8e authored by Dmitri Plotnikov's avatar Dmitri Plotnikov
Browse files

Allow requesting BatteryUsageStats for specific power components

Bug: 216393849
Test: atest FrameworksCoreTests:BatteryUsageStatsProviderTest
Change-Id: I8db1f41c42929ab2cfc5c64dc0c1fce74ca19896
parent 056333fa
Loading
Loading
Loading
Loading
+25 −2
Original line number Diff line number Diff line
@@ -75,8 +75,9 @@ public final class BatteryUsageStatsQuery implements Parcelable {
    @NonNull
    private final int[] mUserIds;
    private final long mMaxStatsAgeMs;
    private long mFromTimestamp;
    private long mToTimestamp;
    private final long mFromTimestamp;
    private final long mToTimestamp;
    private final @BatteryConsumer.PowerComponent int[] mPowerComponents;

    private BatteryUsageStatsQuery(@NonNull Builder builder) {
        mFlags = builder.mFlags;
@@ -85,6 +86,7 @@ public final class BatteryUsageStatsQuery implements Parcelable {
        mMaxStatsAgeMs = builder.mMaxStatsAgeMs;
        mFromTimestamp = builder.mFromTimestamp;
        mToTimestamp = builder.mToTimestamp;
        mPowerComponents = builder.mPowerComponents;
    }

    @BatteryUsageStatsFlags
@@ -115,6 +117,14 @@ public final class BatteryUsageStatsQuery implements Parcelable {
        return (mFlags & FLAG_BATTERY_USAGE_STATS_INCLUDE_PROCESS_STATE_DATA) != 0;
    }

    /**
     * Returns the power components that should be estimated or null if all power components
     * are being requested.
     */
    public int[] getPowerComponents() {
        return mPowerComponents;
    }

    /**
     * Returns the client's tolerance for stale battery stats. The data is allowed to be up to
     * this many milliseconds out-of-date.
@@ -147,6 +157,7 @@ public final class BatteryUsageStatsQuery implements Parcelable {
        mMaxStatsAgeMs = in.readLong();
        mFromTimestamp = in.readLong();
        mToTimestamp = in.readLong();
        mPowerComponents = in.createIntArray();
    }

    @Override
@@ -157,6 +168,7 @@ public final class BatteryUsageStatsQuery implements Parcelable {
        dest.writeLong(mMaxStatsAgeMs);
        dest.writeLong(mFromTimestamp);
        dest.writeLong(mToTimestamp);
        dest.writeIntArray(mPowerComponents);
    }

    @Override
@@ -187,6 +199,7 @@ public final class BatteryUsageStatsQuery implements Parcelable {
        private long mMaxStatsAgeMs = DEFAULT_MAX_STATS_AGE_MS;
        private long mFromTimestamp;
        private long mToTimestamp;
        private @BatteryConsumer.PowerComponent int[] mPowerComponents;

        /**
         * Builds a read-only BatteryUsageStatsQuery object.
@@ -247,6 +260,16 @@ public final class BatteryUsageStatsQuery implements Parcelable {
            return this;
        }

        /**
         * Requests to return only statistics for the specified power components.  The default
         * is all power components.
         */
        public Builder includePowerComponents(
                @BatteryConsumer.PowerComponent int[] powerComponents) {
            mPowerComponents = powerComponents;
            return this;
        }

        /**
         * Requests to aggregate stored snapshots between the two supplied timestamps
         * @param fromTimestamp Exclusive starting timestamp, as per System.currentTimeMillis()
+5 −0
Original line number Diff line number Diff line
@@ -33,6 +33,11 @@ import java.util.List;
public class AmbientDisplayPowerCalculator extends PowerCalculator {
    private final UsageBasedPowerEstimator[] mPowerEstimators;

    @Override
    public boolean isPowerComponentSupported(@BatteryConsumer.PowerComponent int powerComponent) {
        return powerComponent == BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY;
    }

    public AmbientDisplayPowerCalculator(PowerProfile powerProfile) {
        final int numDisplays = powerProfile.getNumDisplays();
        mPowerEstimators = new UsageBasedPowerEstimator[numDisplays];
+5 −0
Original line number Diff line number Diff line
@@ -43,6 +43,11 @@ public class AudioPowerCalculator extends PowerCalculator {
                powerProfile.getAveragePower(PowerProfile.POWER_AUDIO));
    }

    @Override
    public boolean isPowerComponentSupported(@BatteryConsumer.PowerComponent int powerComponent) {
        return powerComponent == BatteryConsumer.POWER_COMPONENT_AUDIO;
    }

    @Override
    public void calculate(BatteryUsageStats.Builder builder, BatteryStats batteryStats,
            long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) {
+7 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.internal.os;

import android.os.BatteryConsumer;
import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
@@ -29,6 +30,12 @@ import java.util.List;
 */
public class BatteryChargeCalculator extends PowerCalculator {

    @Override
    public boolean isPowerComponentSupported(@BatteryConsumer.PowerComponent int powerComponent) {
        // Always apply this power calculator, no matter what power components were requested
        return true;
    }

    @Override
    public void calculate(BatteryUsageStats.Builder builder, BatteryStats batteryStats,
            long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) {
+13 −0
Original line number Diff line number Diff line
@@ -181,9 +181,22 @@ public class BatteryUsageStatsProvider {
                            getProcessForegroundTimeMs(uid, realtimeUs));
        }

        final int[] powerComponents = query.getPowerComponents();
        final List<PowerCalculator> powerCalculators = getPowerCalculators();
        for (int i = 0, count = powerCalculators.size(); i < count; i++) {
            PowerCalculator powerCalculator = powerCalculators.get(i);
            if (powerComponents != null) {
                boolean include = false;
                for (int j = 0; j < powerComponents.length; j++) {
                    if (powerCalculator.isPowerComponentSupported(powerComponents[j])) {
                        include = true;
                        break;
                    }
                }
                if (!include) {
                    continue;
                }
            }
            powerCalculator.calculate(batteryUsageStatsBuilder, mStats, realtimeUs, uptimeUs,
                    query);
        }
Loading