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

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

Merge "Exclude inactive UIDs from PowerStats aggregation" into main

parents c65f2dde 726819d7
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.os.PersistableBundle;
import android.os.UserHandle;
import android.text.format.DateFormat;
import android.util.IndentingPrintWriter;
import android.util.IntArray;
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
@@ -347,7 +348,10 @@ class AggregatedPowerStats {

        Set<Integer> uids = new HashSet<>();
        for (int i = 0; i < mPowerComponentStats.size(); i++) {
            mPowerComponentStats.valueAt(i).collectUids(uids);
            IntArray activeUids = mPowerComponentStats.valueAt(i).getActiveUids();
            for (int j = activeUids.size() - 1; j >= 0; j--) {
                uids.add(activeUids.get(j));
            }
        }

        Integer[] allUids = uids.toArray(new Integer[uids.size()]);
+7 −7
Original line number Diff line number Diff line
@@ -24,13 +24,12 @@ import static com.android.server.power.stats.processor.AggregatedPowerStatsConfi

import android.os.BatteryConsumer;
import android.os.PersistableBundle;
import android.util.IntArray;

import com.android.internal.os.PowerStats;
import com.android.server.power.stats.format.BasePowerStatsLayout;

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

class BasePowerStatsProcessor extends PowerStatsProcessor {
@@ -125,11 +124,12 @@ class BasePowerStatsProcessor extends PowerStatsProcessor {
        mCumulativeDischargeUah = 0;
        mCumulativeDischargeDurationMs = 0;

        List<Integer> uids = new ArrayList<>();
        stats.collectUids(uids);

        // Note that we are calling `getUids` rather than `getActiveUids`, because this Processor
        // deals with duration rather than power estimation, so it needs to process *all* known
        // UIDs, not just the ones that contributed PowerStats
        IntArray uids = stats.getUids();
        if (uids.size() != 0) {
            long durationMs = timestampMs - mStartTimestamp;
        if (!uids.isEmpty()) {
            for (int i = uids.size() - 1; i >= 0; i--) {
                long[] uidStats = new long[sStatsLayout.getUidStatsArrayLength()];
                sStatsLayout.setUidUsageDuration(uidStats, durationMs);
+9 −11
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.IntDef;
import android.os.BatteryStats;
import android.os.PersistableBundle;
import android.os.Process;
import android.util.IntArray;

import com.android.internal.os.PowerStats;
import com.android.server.power.stats.UsageBasedPowerEstimator;
@@ -27,7 +28,6 @@ import com.android.server.power.stats.format.BinaryStatePowerStatsLayout;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@@ -190,14 +190,14 @@ abstract class BinaryStatePowerStatsProcessor extends PowerStatsProcessor {
        }

        computeDevicePowerEstimates(stats, mPlan, mEnergyConsumerSupported);
        combineDevicePowerEstimates(stats);

        List<Integer> uids = new ArrayList<>();
        stats.collectUids(uids);

        IntArray uids = stats.getActiveUids();
        if (uids.size() != 0) {
            combineDevicePowerEstimates(stats);
            computeUidActivityTotals(stats, uids);
            computeUidPowerEstimates(stats, uids);
        }
    }

    protected void computeDevicePowerEstimates(PowerComponentAggregatedPowerStats stats,
            PowerEstimationPlan plan, boolean energyConsumerSupported) {
@@ -239,8 +239,7 @@ abstract class BinaryStatePowerStatsProcessor extends PowerStatsProcessor {
        }
    }

    private void computeUidActivityTotals(PowerComponentAggregatedPowerStats stats,
            List<Integer> uids) {
    private void computeUidActivityTotals(PowerComponentAggregatedPowerStats stats, IntArray uids) {
        for (int i = mPlan.uidStateEstimates.size() - 1; i >= 0; i--) {
            UidStateEstimate uidStateEstimate = mPlan.uidStateEstimates.get(i);
            Intermediates intermediates =
@@ -259,8 +258,7 @@ abstract class BinaryStatePowerStatsProcessor extends PowerStatsProcessor {
        }
    }

    private void computeUidPowerEstimates(PowerComponentAggregatedPowerStats stats,
            List<Integer> uids) {
    private void computeUidPowerEstimates(PowerComponentAggregatedPowerStats stats, IntArray uids) {
        for (int i = mPlan.uidStateEstimates.size() - 1; i >= 0; i--) {
            UidStateEstimate uidStateEstimate = mPlan.uidStateEstimates.get(i);
            Intermediates intermediates =
+12 −10
Original line number Diff line number Diff line
@@ -16,12 +16,13 @@

package com.android.server.power.stats.processor;

import android.util.IntArray;

import com.android.internal.os.PowerProfile;
import com.android.internal.os.PowerStats;
import com.android.server.power.stats.UsageBasedPowerEstimator;
import com.android.server.power.stats.format.BluetoothPowerStatsLayout;

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

class BluetoothPowerStatsProcessor extends PowerStatsProcessor {
@@ -118,18 +119,19 @@ class BluetoothPowerStatsProcessor extends PowerStatsProcessor {

        combineDeviceStateEstimates();

        ArrayList<Integer> uids = new ArrayList<>();
        stats.collectUids(uids);
        if (!uids.isEmpty()) {
            for (int uid : uids) {
                for (int i = 0; i < mPlan.uidStateEstimates.size(); i++) {
                    computeUidActivityTotals(stats, uid, mPlan.uidStateEstimates.get(i));
        IntArray uids = stats.getActiveUids();
        if (uids.size() != 0) {
            for (int i = uids.size() - 1; i >= 0; i--) {
                int uid = uids.get(i);
                for (int j = 0; j < mPlan.uidStateEstimates.size(); j++) {
                    computeUidActivityTotals(stats, uid, mPlan.uidStateEstimates.get(j));
                }
            }

            for (int uid : uids) {
                for (int i = 0; i < mPlan.uidStateEstimates.size(); i++) {
                    computeUidPowerEstimates(stats, uid, mPlan.uidStateEstimates.get(i));
            for (int i = uids.size() - 1; i >= 0; i--) {
                int uid = uids.get(i);
                for (int j = 0; j < mPlan.uidStateEstimates.size(); j++) {
                    computeUidPowerEstimates(stats, uid, mPlan.uidStateEstimates.get(j));
                }
            }
        }
+7 −7
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.power.stats.processor;
import android.annotation.Nullable;
import android.os.BatteryConsumer;
import android.util.ArraySet;
import android.util.IntArray;
import android.util.Log;

import com.android.internal.os.CpuScalingPolicies;
@@ -27,7 +28,6 @@ import com.android.internal.os.PowerStats;
import com.android.server.power.stats.format.CpuPowerStatsLayout;
import com.android.server.power.stats.format.WakelockPowerStatsLayout;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -189,12 +189,12 @@ class CpuPowerStatsProcessor extends PowerStatsProcessor {
        estimatePowerByDeviceState(stats, intermediates, wakelockStats);
        combineDeviceStateEstimates();

        ArrayList<Integer> uids = new ArrayList<>();
        stats.collectUids(uids);
        if (!uids.isEmpty()) {
            for (int uid : uids) {
                for (int i = 0; i < mPlan.uidStateEstimates.size(); i++) {
                    estimateUidPowerConsumption(stats, uid, mPlan.uidStateEstimates.get(i),
        IntArray uids = stats.getActiveUids();
        if (uids.size() != 0) {
            for (int i = uids.size() - 1; i >= 0; i--) {
                int uid = uids.get(i);
                for (int j = 0; j < mPlan.uidStateEstimates.size(); j++) {
                    estimateUidPowerConsumption(stats, uid, mPlan.uidStateEstimates.get(j),
                            wakelockStats);
                }
            }
Loading