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

Commit a5163de7 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov
Browse files

Use BatteryStats instead of BatteryStatsImpl in BatteryUsageStatsProvider

This is being done in preparation for a switch of BatteryStats.dumpLocked
from BatteryStatsHelper to BatteryUsageStats

Bug: 162380414
Test: atest FrameworksCoreTests:com.android.internal.os.BatteryStatsTests

Change-Id: Ia8bf02116517c77f008b85c2012f68353b39c044
parent ca6a54ed
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.os.BatteryStatsManager.NUM_WIFI_STATES;
import static android.os.BatteryStatsManager.NUM_WIFI_SUPPL_STATES;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.job.JobParameters;
@@ -2622,6 +2623,15 @@ public abstract class BatteryStats implements Parcelable {
     */
    public abstract @Nullable long[] getCustomConsumerMeasuredBatteryConsumptionUC();

    /**
     * Returns the names of all {@link android.hardware.power.stats.EnergyConsumer}'s
     * of (custom) energy consumer type
     * {@link android.hardware.power.stats.EnergyConsumerType#OTHER}).
     *
     * {@hide}
     */
    public abstract @NonNull String[] getCustomEnergyConsumerNames();

    public static final BitDescription[] HISTORY_STATE_DESCRIPTIONS = new BitDescription[] {
        new BitDescription(HistoryItem.STATE_CPU_RUNNING_FLAG, "running", "r"),
        new BitDescription(HistoryItem.STATE_WAKE_LOCK_FLAG, "wake_lock", "w"),
+2 −1
Original line number Diff line number Diff line
@@ -6951,7 +6951,8 @@ public class BatteryStatsImpl extends BatteryStats {
    /**
     * Returns the names of custom power components.
     */
    public @NonNull String[] getCustomPowerComponentNames() {
    @Override
    public @NonNull String[] getCustomEnergyConsumerNames() {
        if (mGlobalMeasuredEnergyStats == null) {
            return new String[0];
        }
+32 −9
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.hardware.SensorManager;
import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
import android.os.SystemClock;
import android.os.UidBatteryConsumer;
import android.util.SparseArray;

@@ -36,12 +37,12 @@ import java.util.Map;
 */
public class BatteryUsageStatsProvider {
    private final Context mContext;
    private final BatteryStatsImpl mStats;
    private final BatteryStats mStats;
    private final PowerProfile mPowerProfile;
    private final Object mLock = new Object();
    private List<PowerCalculator> mPowerCalculators;

    public BatteryUsageStatsProvider(Context context, BatteryStatsImpl stats) {
    public BatteryUsageStatsProvider(Context context, BatteryStats stats) {
        mContext = context;
        mStats = stats;
        mPowerProfile = new PowerProfile(mContext);
@@ -97,7 +98,7 @@ public class BatteryUsageStatsProvider {
            allowableStatsAge = Math.min(allowableStatsAge, query.getMaxStatsAge());
        }

        return mStats.mClocks.elapsedRealtime() - lastUpdateTimeStampMs > allowableStatsAge;
        return elapsedRealtime() - lastUpdateTimeStampMs > allowableStatsAge;
    }

    /**
@@ -120,10 +121,10 @@ public class BatteryUsageStatsProvider {
     */
    @VisibleForTesting
    public BatteryUsageStats getBatteryUsageStats(BatteryUsageStatsQuery query) {
        final long realtimeUs = mStats.mClocks.elapsedRealtime() * 1000;
        final long uptimeUs = mStats.mClocks.uptimeMillis() * 1000;
        final long realtimeUs = elapsedRealtime() * 1000;
        final long uptimeUs = uptimeMillis() * 1000;

        final String[] customPowerComponentNames = mStats.getCustomPowerComponentNames();
        final String[] customPowerComponentNames = mStats.getCustomEnergyConsumerNames();

        // TODO(b/174186358): read extra time component number from configuration
        final int customTimeComponentCount = 0;
@@ -154,16 +155,22 @@ public class BatteryUsageStatsProvider {

        if ((query.getFlags()
                & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY) != 0) {
            if (!(mStats instanceof BatteryStatsImpl)) {
                throw new UnsupportedOperationException(
                        "History cannot be included for " + getClass().getName());
            }

            BatteryStatsImpl batteryStatsImpl = (BatteryStatsImpl) mStats;
            ArrayList<BatteryStats.HistoryTag> tags = new ArrayList<>(
                    mStats.mHistoryTagPool.size());
                    batteryStatsImpl.mHistoryTagPool.size());
            for (Map.Entry<BatteryStats.HistoryTag, Integer> entry :
                    mStats.mHistoryTagPool.entrySet()) {
                    batteryStatsImpl.mHistoryTagPool.entrySet()) {
                final BatteryStats.HistoryTag tag = entry.getKey();
                tag.poolIdx = entry.getValue();
                tags.add(tag);
            }

            batteryUsageStatsBuilder.setBatteryHistory(mStats.mHistoryBuffer, tags);
            batteryUsageStatsBuilder.setBatteryHistory(batteryStatsImpl.mHistoryBuffer, tags);
        }

        return batteryUsageStatsBuilder.build();
@@ -199,4 +206,20 @@ public class BatteryUsageStatsProvider {
        return uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_BACKGROUND, realtimeUs,
                BatteryStats.STATS_SINCE_CHARGED) / 1000;
    }

    private long elapsedRealtime() {
        if (mStats instanceof BatteryStatsImpl) {
            return ((BatteryStatsImpl) mStats).mClocks.elapsedRealtime();
        } else {
            return SystemClock.elapsedRealtime();
        }
    }

    private long uptimeMillis() {
        if (mStats instanceof BatteryStatsImpl) {
            return ((BatteryStatsImpl) mStats).mClocks.uptimeMillis();
        } else {
            return SystemClock.uptimeMillis();
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -167,7 +167,7 @@ public class BatteryUsageStatsRule implements TestRule {
    }

    BatteryUsageStats apply(BatteryUsageStatsQuery query, PowerCalculator... calculators) {
        final String[] customPowerComponentNames = mBatteryStats.getCustomPowerComponentNames();
        final String[] customPowerComponentNames = mBatteryStats.getCustomEnergyConsumerNames();
        final boolean includePowerModels = (query.getFlags()
                & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_POWER_MODELS) != 0;
        BatteryUsageStats.Builder builder = new BatteryUsageStats.Builder(