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

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

Merge "Remove constructors used exlusively for tests" into main

parents 9ca732bd b410edc9
Loading
Loading
Loading
Loading
+14 −49
Original line number Original line Diff line number Diff line
@@ -582,23 +582,6 @@ public class BatteryStatsHistory {
     * @param maxHistoryFiles      the largest number of history buffer files to keep
     * @param maxHistoryFiles      the largest number of history buffer files to keep
     * @param maxHistoryBufferSize the most amount of RAM to used for buffering of history steps
     * @param maxHistoryBufferSize the most amount of RAM to used for buffering of history steps
     */
     */
    public BatteryStatsHistory(File systemDir, int maxHistoryFiles, int maxHistoryBufferSize,
            HistoryStepDetailsCalculator stepDetailsCalculator, Clock clock,
            MonotonicClock monotonicClock) {
        this(systemDir, maxHistoryFiles, maxHistoryBufferSize,
                stepDetailsCalculator, clock, monotonicClock, new TraceDelegate(),
                new EventLogger());
    }

    public BatteryStatsHistory(File systemDir, int maxHistoryFiles, int maxHistoryBufferSize,
            HistoryStepDetailsCalculator stepDetailsCalculator, Clock clock,
            MonotonicClock monotonicClock, TraceDelegate tracer, EventLogger eventLogger) {
        this(Parcel.obtain(), systemDir, maxHistoryFiles, maxHistoryBufferSize,
                stepDetailsCalculator, clock, monotonicClock, tracer, eventLogger);
        initHistoryBuffer();
    }

    @VisibleForTesting
    public BatteryStatsHistory(Parcel historyBuffer, File systemDir,
    public BatteryStatsHistory(Parcel historyBuffer, File systemDir,
            int maxHistoryFiles, int maxHistoryBufferSize,
            int maxHistoryFiles, int maxHistoryBufferSize,
            HistoryStepDetailsCalculator stepDetailsCalculator, Clock clock,
            HistoryStepDetailsCalculator stepDetailsCalculator, Clock clock,
@@ -607,12 +590,11 @@ public class BatteryStatsHistory {
                clock, monotonicClock, tracer, eventLogger, null);
                clock, monotonicClock, tracer, eventLogger, null);
    }
    }


    private BatteryStatsHistory(Parcel historyBuffer, File systemDir,
    private BatteryStatsHistory(@Nullable Parcel historyBuffer, @Nullable File systemDir,
            int maxHistoryFiles, int maxHistoryBufferSize,
            int maxHistoryFiles, int maxHistoryBufferSize,
            HistoryStepDetailsCalculator stepDetailsCalculator, Clock clock,
            @NonNull HistoryStepDetailsCalculator stepDetailsCalculator, @NonNull Clock clock,
            MonotonicClock monotonicClock, TraceDelegate tracer, EventLogger eventLogger,
            @NonNull MonotonicClock monotonicClock, @NonNull TraceDelegate tracer,
            BatteryStatsHistory writableHistory) {
            @NonNull EventLogger eventLogger, @Nullable BatteryStatsHistory writableHistory) {
        mHistoryBuffer = historyBuffer;
        mSystemDir = systemDir;
        mSystemDir = systemDir;
        mMaxHistoryBufferSize = maxHistoryBufferSize;
        mMaxHistoryBufferSize = maxHistoryBufferSize;
        mStepDetailsCalculator = stepDetailsCalculator;
        mStepDetailsCalculator = stepDetailsCalculator;
@@ -625,9 +607,16 @@ public class BatteryStatsHistory {
            mMutable = false;
            mMutable = false;
        }
        }


        if (historyBuffer != null) {
            mHistoryBuffer = historyBuffer;
        } else {
            mHistoryBuffer = Parcel.obtain();
            initHistoryBuffer();
        }

        if (writableHistory != null) {
        if (writableHistory != null) {
            mHistoryDir = writableHistory.mHistoryDir;
            mHistoryDir = writableHistory.mHistoryDir;
        } else {
        } else if (systemDir != null) {
            mHistoryDir = new BatteryHistoryDirectory(new File(systemDir, HISTORY_DIR),
            mHistoryDir = new BatteryHistoryDirectory(new File(systemDir, HISTORY_DIR),
                    monotonicClock, maxHistoryFiles);
                    monotonicClock, maxHistoryFiles);
            mHistoryDir.load();
            mHistoryDir.load();
@@ -636,33 +625,9 @@ public class BatteryStatsHistory {
                activeFile = mHistoryDir.makeBatteryHistoryFile();
                activeFile = mHistoryDir.makeBatteryHistoryFile();
            }
            }
            setActiveFile(activeFile);
            setActiveFile(activeFile);
        }
        } else {
    }

    public BatteryStatsHistory(int maxHistoryBufferSize,
            HistoryStepDetailsCalculator stepDetailsCalculator, Clock clock,
            MonotonicClock monotonicClock) {
        this(maxHistoryBufferSize, stepDetailsCalculator, clock, monotonicClock,
                new TraceDelegate(), new EventLogger());
    }

    @VisibleForTesting
    public BatteryStatsHistory(int maxHistoryBufferSize,
            HistoryStepDetailsCalculator stepDetailsCalculator, Clock clock,
            MonotonicClock monotonicClock, TraceDelegate traceDelegate,
            EventLogger eventLogger) {
        mMaxHistoryBufferSize = maxHistoryBufferSize;
        mStepDetailsCalculator = stepDetailsCalculator;
        mTracer = traceDelegate;
        mClock = clock;
        mMonotonicClock = monotonicClock;
        mEventLogger = eventLogger;

        mHistoryBuffer = Parcel.obtain();
        mSystemDir = null;
            mHistoryDir = null;
            mHistoryDir = null;
        mWritableHistory = null;
        }
        initHistoryBuffer();
    }
    }


    /**
    /**
+63 −84
Original line number Original line Diff line number Diff line
@@ -290,8 +290,8 @@ public class BatteryStatsImpl extends BatteryStats {
    private KernelMemoryBandwidthStats mKernelMemoryBandwidthStats;
    private KernelMemoryBandwidthStats mKernelMemoryBandwidthStats;
    private final LongSparseArray<SamplingTimer> mKernelMemoryStats = new LongSparseArray<>();
    private final LongSparseArray<SamplingTimer> mKernelMemoryStats = new LongSparseArray<>();
    private int[] mCpuPowerBracketMap;
    private int[] mCpuPowerBracketMap;
    private CpuPowerStatsCollector mCpuPowerStatsCollector;
    private final CpuPowerStatsCollector mCpuPowerStatsCollector;
    private MobileRadioPowerStatsCollector mMobileRadioPowerStatsCollector;
    private final MobileRadioPowerStatsCollector mMobileRadioPowerStatsCollector;
    private final SparseBooleanArray mPowerStatsCollectorEnabled = new SparseBooleanArray();
    private final SparseBooleanArray mPowerStatsCollectorEnabled = new SparseBooleanArray();
    public LongSparseArray<SamplingTimer> getKernelMemoryStats() {
    public LongSparseArray<SamplingTimer> getKernelMemoryStats() {
@@ -1777,7 +1777,7 @@ public class BatteryStatsImpl extends BatteryStats {
        return mMaxLearnedBatteryCapacityUah;
        return mMaxLearnedBatteryCapacityUah;
    }
    }
    public class FrameworkStatsLogger {
    public static class FrameworkStatsLogger {
        public void uidProcessStateChanged(int uid, int state) {
        public void uidProcessStateChanged(int uid, int state) {
            // TODO(b/155216561): It is possible for isolated uids to be in a higher
            // TODO(b/155216561): It is possible for isolated uids to be in a higher
            // state than its parent uid. We should track the highest state within the union of host
            // state than its parent uid. We should track the highest state within the union of host
@@ -1786,25 +1786,24 @@ public class BatteryStatsImpl extends BatteryStats {
                    ActivityManager.processStateAmToProto(state));
                    ActivityManager.processStateAmToProto(state));
        }
        }
        public void wakelockStateChanged(int uid, WorkChain wc, String name, int type,
        public void wakelockStateChanged(int uid, WorkChain wc, String name,
                int procState, boolean acquired) {
                int procState, boolean acquired, int powerManagerWakeLockLevel) {
            int event = acquired
            int event = acquired
                    ? FrameworkStatsLog.WAKELOCK_STATE_CHANGED__STATE__ACQUIRE
                    ? FrameworkStatsLog.WAKELOCK_STATE_CHANGED__STATE__ACQUIRE
                    : FrameworkStatsLog.WAKELOCK_STATE_CHANGED__STATE__RELEASE;
                    : FrameworkStatsLog.WAKELOCK_STATE_CHANGED__STATE__RELEASE;
            if (wc != null) {
            if (wc != null) {
                FrameworkStatsLog.write(FrameworkStatsLog.WAKELOCK_STATE_CHANGED, wc.getUids(),
                FrameworkStatsLog.write(FrameworkStatsLog.WAKELOCK_STATE_CHANGED, wc.getUids(),
                        wc.getTags(), getPowerManagerWakeLockLevel(type), name,
                        wc.getTags(), powerManagerWakeLockLevel, name, event, procState);
                        event, procState);
            } else {
            } else {
                FrameworkStatsLog.write_non_chained(FrameworkStatsLog.WAKELOCK_STATE_CHANGED,
                FrameworkStatsLog.write_non_chained(FrameworkStatsLog.WAKELOCK_STATE_CHANGED, uid,
                        mapIsolatedUid(uid), null, getPowerManagerWakeLockLevel(type), name,
                        null, powerManagerWakeLockLevel, name, event, procState);
                        event, procState);
            }
            }
        }
        }
        public void kernelWakeupReported(long deltaUptimeUs) {
        public void kernelWakeupReported(long deltaUptimeUs, String lastWakeupReason,
            FrameworkStatsLog.write(FrameworkStatsLog.KERNEL_WAKEUP_REPORTED, mLastWakeupReason,
                long lastWakeupElapsedTimeMs) {
                    /* duration_usec */ deltaUptimeUs, mLastWakeupElapsedTimeMs);
            FrameworkStatsLog.write(FrameworkStatsLog.KERNEL_WAKEUP_REPORTED, lastWakeupReason,
                    /* duration_usec */ deltaUptimeUs, lastWakeupElapsedTimeMs);
        }
        }
        public void gpsScanStateChanged(int uid, WorkChain workChain, boolean stateOn) {
        public void gpsScanStateChanged(int uid, WorkChain workChain, boolean stateOn) {
@@ -1868,41 +1867,6 @@ public class BatteryStatsImpl extends BatteryStats {
    private final FrameworkStatsLogger mFrameworkStatsLogger;
    private final FrameworkStatsLogger mFrameworkStatsLogger;
    @VisibleForTesting
    public BatteryStatsImpl(@NonNull BatteryStatsConfig config, Clock clock, File historyDirectory,
            @NonNull Handler handler,
            @NonNull PowerStatsUidResolver powerStatsUidResolver,
            @NonNull FrameworkStatsLogger frameworkStatsLogger,
            @NonNull BatteryStatsHistory.TraceDelegate traceDelegate,
            @NonNull BatteryStatsHistory.EventLogger eventLogger) {
        mBatteryStatsConfig = config;
        mClock = clock;
        initKernelStatsReaders();
        mHandler = handler;
        mPowerStatsUidResolver = powerStatsUidResolver;
        mFrameworkStatsLogger = frameworkStatsLogger;
        mConstants = new Constants(mHandler);
        mStartClockTimeMs = clock.currentTimeMillis();
        mDailyFile = null;
        mMonotonicClock = new MonotonicClock(0, mClock);
        if (historyDirectory == null) {
            mCheckinFile = null;
            mStatsFile = null;
            mHistory = new BatteryStatsHistory(mConstants.MAX_HISTORY_BUFFER,
                    mStepDetailsCalculator, mClock, mMonotonicClock, traceDelegate, eventLogger);
        } else {
            mCheckinFile = new AtomicFile(new File(historyDirectory, "batterystats-checkin.bin"));
            mStatsFile = new AtomicFile(new File(historyDirectory, "batterystats.bin"));
            mHistory = new BatteryStatsHistory(historyDirectory, mConstants.MAX_HISTORY_FILES,
                    mConstants.MAX_HISTORY_BUFFER, mStepDetailsCalculator, mClock, mMonotonicClock,
                    traceDelegate, eventLogger);
        }
        mPlatformIdleStateCallback = null;
        mEnergyConsumerRetriever = null;
        mUserInfoProvider = null;
        initPowerStatsCollectors();
    }
    private void initKernelStatsReaders() {
    private void initKernelStatsReaders() {
        if (!isKernelStatsAvailable()) {
        if (!isKernelStatsAvailable()) {
            return;
            return;
@@ -2006,19 +1970,6 @@ public class BatteryStatsImpl extends BatteryStats {
    private final PowerStatsCollectorInjector mPowerStatsCollectorInjector =
    private final PowerStatsCollectorInjector mPowerStatsCollectorInjector =
            new PowerStatsCollectorInjector();
            new PowerStatsCollectorInjector();
    @SuppressWarnings("GuardedBy")      // Accessed from constructor only
    private void initPowerStatsCollectors() {
        mCpuPowerStatsCollector = new CpuPowerStatsCollector(mPowerStatsCollectorInjector,
                mBatteryStatsConfig.getPowerStatsThrottlePeriod(
                        BatteryConsumer.POWER_COMPONENT_CPU));
        mCpuPowerStatsCollector.addConsumer(this::recordPowerStats);
        mMobileRadioPowerStatsCollector = new MobileRadioPowerStatsCollector(
                mPowerStatsCollectorInjector, mBatteryStatsConfig.getPowerStatsThrottlePeriod(
                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO));
        mMobileRadioPowerStatsCollector.addConsumer(this::recordPowerStats);
    }
    /**
    /**
     * TimeBase observer.
     * TimeBase observer.
     */
     */
@@ -4975,8 +4926,9 @@ public class BatteryStatsImpl extends BatteryStats {
            Uid uidStats = getUidStatsLocked(mappedUid, elapsedRealtimeMs, uptimeMs);
            Uid uidStats = getUidStatsLocked(mappedUid, elapsedRealtimeMs, uptimeMs);
            uidStats.noteStartWakeLocked(pid, name, type, elapsedRealtimeMs);
            uidStats.noteStartWakeLocked(pid, name, type, elapsedRealtimeMs);
            mFrameworkStatsLogger.wakelockStateChanged(mapIsolatedUid(uid), wc, name, type,
            mFrameworkStatsLogger.wakelockStateChanged(mapIsolatedUid(uid), wc, name,
                    uidStats.mProcessState, true /* acquired */);
                    uidStats.mProcessState, true /* acquired */,
                    getPowerManagerWakeLockLevel(type));
        }
        }
    }
    }
@@ -5019,8 +4971,9 @@ public class BatteryStatsImpl extends BatteryStats {
            Uid uidStats = getUidStatsLocked(mappedUid, elapsedRealtimeMs, uptimeMs);
            Uid uidStats = getUidStatsLocked(mappedUid, elapsedRealtimeMs, uptimeMs);
            uidStats.noteStopWakeLocked(pid, name, type, elapsedRealtimeMs);
            uidStats.noteStopWakeLocked(pid, name, type, elapsedRealtimeMs);
            mFrameworkStatsLogger.wakelockStateChanged(mapIsolatedUid(uid), wc, name, type,
            mFrameworkStatsLogger.wakelockStateChanged(mapIsolatedUid(uid), wc, name,
                    uidStats.mProcessState, false /* acquired */);
                    uidStats.mProcessState, false/* acquired */,
                    getPowerManagerWakeLockLevel(type));
            if (mappedUid != uid) {
            if (mappedUid != uid) {
                // Decrement the ref count for the isolated uid and delete the mapping if uneeded.
                // Decrement the ref count for the isolated uid and delete the mapping if uneeded.
@@ -5036,8 +4989,8 @@ public class BatteryStatsImpl extends BatteryStats {
     * TODO: Delete this. Instead, FrameworkStatsLog.write should be called from
     * TODO: Delete this. Instead, FrameworkStatsLog.write should be called from
     * PowerManager's Notifier.
     * PowerManager's Notifier.
     */
     */
    private int getPowerManagerWakeLockLevel(int battertStatsWakelockType) {
    private int getPowerManagerWakeLockLevel(int batteryStatsWakelockType) {
        switch (battertStatsWakelockType) {
        switch (batteryStatsWakelockType) {
            // PowerManager.PARTIAL_WAKE_LOCK or PROXIMITY_SCREEN_OFF_WAKE_LOCK
            // PowerManager.PARTIAL_WAKE_LOCK or PROXIMITY_SCREEN_OFF_WAKE_LOCK
            case BatteryStats.WAKE_TYPE_PARTIAL:
            case BatteryStats.WAKE_TYPE_PARTIAL:
                return PowerManager.PARTIAL_WAKE_LOCK;
                return PowerManager.PARTIAL_WAKE_LOCK;
@@ -5055,7 +5008,7 @@ public class BatteryStatsImpl extends BatteryStats {
                return -1;
                return -1;
            default:
            default:
                Slog.e(TAG, "Illegal wakelock type in batterystats: " + battertStatsWakelockType);
                Slog.e(TAG, "Illegal wakelock type in batterystats: " + batteryStatsWakelockType);
                return -1;
                return -1;
        }
        }
    }
    }
@@ -5257,7 +5210,8 @@ public class BatteryStatsImpl extends BatteryStats {
            long deltaUptimeMs = uptimeMs - mLastWakeupUptimeMs;
            long deltaUptimeMs = uptimeMs - mLastWakeupUptimeMs;
            SamplingTimer timer = getWakeupReasonTimerLocked(mLastWakeupReason);
            SamplingTimer timer = getWakeupReasonTimerLocked(mLastWakeupReason);
            timer.add(deltaUptimeMs * 1000, 1, elapsedRealtimeMs); // time in in microseconds
            timer.add(deltaUptimeMs * 1000, 1, elapsedRealtimeMs); // time in in microseconds
            mFrameworkStatsLogger.kernelWakeupReported(deltaUptimeMs * 1000);
            mFrameworkStatsLogger.kernelWakeupReported(deltaUptimeMs * 1000, mLastWakeupReason,
                    mLastWakeupElapsedTimeMs);
            mLastWakeupReason = null;
            mLastWakeupReason = null;
        }
        }
    }
    }
@@ -11094,11 +11048,27 @@ public class BatteryStatsImpl extends BatteryStats {
    public BatteryStatsImpl(@NonNull BatteryStatsConfig config, @NonNull Clock clock,
    public BatteryStatsImpl(@NonNull BatteryStatsConfig config, @NonNull Clock clock,
            @NonNull MonotonicClock monotonicClock, @Nullable File systemDir,
            @NonNull MonotonicClock monotonicClock, @Nullable File systemDir,
            @NonNull Handler handler, @Nullable PlatformIdleStateCallback cb,
            @NonNull Handler handler, @Nullable PlatformIdleStateCallback platformIdleStateCallback,
            @Nullable EnergyStatsRetriever energyStatsCb,
            @Nullable EnergyStatsRetriever energyStatsRetriever,
            @NonNull UserInfoProvider userInfoProvider, @NonNull PowerProfile powerProfile,
            @NonNull UserInfoProvider userInfoProvider, @NonNull PowerProfile powerProfile,
            @NonNull CpuScalingPolicies cpuScalingPolicies,
            @NonNull CpuScalingPolicies cpuScalingPolicies,
            @NonNull PowerStatsUidResolver powerStatsUidResolver) {
            @NonNull PowerStatsUidResolver powerStatsUidResolver) {
        this(config, clock, monotonicClock, systemDir, handler, platformIdleStateCallback,
                energyStatsRetriever, userInfoProvider, powerProfile, cpuScalingPolicies,
                powerStatsUidResolver, new FrameworkStatsLogger(),
                new BatteryStatsHistory.TraceDelegate(), new BatteryStatsHistory.EventLogger());
    }
    public BatteryStatsImpl(@NonNull BatteryStatsConfig config, @NonNull Clock clock,
            @NonNull MonotonicClock monotonicClock, @Nullable File systemDir,
            @NonNull Handler handler, @Nullable PlatformIdleStateCallback platformIdleStateCallback,
            @Nullable EnergyStatsRetriever energyStatsRetriever,
            @NonNull UserInfoProvider userInfoProvider, @NonNull PowerProfile powerProfile,
            @NonNull CpuScalingPolicies cpuScalingPolicies,
            @NonNull PowerStatsUidResolver powerStatsUidResolver,
            @NonNull FrameworkStatsLogger frameworkStatsLogger,
            @NonNull BatteryStatsHistory.TraceDelegate traceDelegate,
            @NonNull BatteryStatsHistory.EventLogger eventLogger) {
        mClock = clock;
        mClock = clock;
        initKernelStatsReaders();
        initKernelStatsReaders();
@@ -11110,25 +11080,34 @@ public class BatteryStatsImpl extends BatteryStats {
        mPowerProfile = powerProfile;
        mPowerProfile = powerProfile;
        mCpuScalingPolicies = cpuScalingPolicies;
        mCpuScalingPolicies = cpuScalingPolicies;
        mPowerStatsUidResolver = powerStatsUidResolver;
        mPowerStatsUidResolver = powerStatsUidResolver;
        mFrameworkStatsLogger = new FrameworkStatsLogger();
        mFrameworkStatsLogger = frameworkStatsLogger;
        initPowerProfile();
        initPowerProfile();
        if (systemDir == null) {
        if (systemDir != null) {
            mStatsFile = null;
            mCheckinFile = null;
            mDailyFile = null;
            mHistory = new BatteryStatsHistory(mConstants.MAX_HISTORY_BUFFER,
                    mStepDetailsCalculator, mClock, mMonotonicClock);
        } else {
            mStatsFile = new AtomicFile(new File(systemDir, "batterystats.bin"));
            mStatsFile = new AtomicFile(new File(systemDir, "batterystats.bin"));
            mCheckinFile = new AtomicFile(new File(systemDir, "batterystats-checkin.bin"));
            mCheckinFile = new AtomicFile(new File(systemDir, "batterystats-checkin.bin"));
            mDailyFile = new AtomicFile(new File(systemDir, "batterystats-daily.xml"));
            mDailyFile = new AtomicFile(new File(systemDir, "batterystats-daily.xml"));
            mHistory = new BatteryStatsHistory(systemDir, mConstants.MAX_HISTORY_FILES,
        } else {
                    mConstants.MAX_HISTORY_BUFFER, mStepDetailsCalculator, mClock, mMonotonicClock);
            mStatsFile = null;
            mCheckinFile = null;
            mDailyFile = null;
        }
        }
        initPowerStatsCollectors();
        mHistory = new BatteryStatsHistory(null /* historyBuffer */, systemDir,
                mConstants.MAX_HISTORY_FILES, mConstants.MAX_HISTORY_BUFFER, mStepDetailsCalculator,
                mClock, mMonotonicClock, traceDelegate, eventLogger);
        mCpuPowerStatsCollector = new CpuPowerStatsCollector(mPowerStatsCollectorInjector,
                mBatteryStatsConfig.getPowerStatsThrottlePeriod(
                        BatteryConsumer.POWER_COMPONENT_CPU));
        mCpuPowerStatsCollector.addConsumer(this::recordPowerStats);
        mMobileRadioPowerStatsCollector = new MobileRadioPowerStatsCollector(
                mPowerStatsCollectorInjector, mBatteryStatsConfig.getPowerStatsThrottlePeriod(
                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO));
        mMobileRadioPowerStatsCollector.addConsumer(this::recordPowerStats);
        mStartCount++;
        mStartCount++;
        initTimersAndCounters();
        initTimersAndCounters();
        mOnBattery = mOnBatteryInternal = false;
        mOnBattery = mOnBatteryInternal = false;
@@ -11138,8 +11117,8 @@ public class BatteryStatsImpl extends BatteryStats {
        mStartPlatformVersion = mEndPlatformVersion = Build.ID;
        mStartPlatformVersion = mEndPlatformVersion = Build.ID;
        initDischarge(realtimeUs);
        initDischarge(realtimeUs);
        updateDailyDeadlineLocked();
        updateDailyDeadlineLocked();
        mPlatformIdleStateCallback = cb;
        mPlatformIdleStateCallback = platformIdleStateCallback;
        mEnergyConsumerRetriever = energyStatsCb;
        mEnergyConsumerRetriever = energyStatsRetriever;
        mUserInfoProvider = userInfoProvider;
        mUserInfoProvider = userInfoProvider;
        mPowerStatsUidResolver.addListener(new PowerStatsUidResolver.Listener() {
        mPowerStatsUidResolver.addListener(new PowerStatsUidResolver.Listener() {
+21 −21
Original line number Original line Diff line number Diff line
@@ -36,6 +36,8 @@ import android.hardware.power.stats.EnergyConsumerType;
import android.hardware.power.stats.EnergyMeasurement;
import android.hardware.power.stats.EnergyMeasurement;
import android.hardware.power.stats.PowerEntity;
import android.hardware.power.stats.PowerEntity;
import android.hardware.power.stats.StateResidencyResult;
import android.hardware.power.stats.StateResidencyResult;
import android.os.Handler;
import android.os.Looper;
import android.platform.test.ravenwood.RavenwoodRule;
import android.platform.test.ravenwood.RavenwoodRule;
import android.power.PowerStatsInternal;
import android.power.PowerStatsInternal;
import android.util.IntArray;
import android.util.IntArray;
@@ -45,6 +47,7 @@ import androidx.test.InstrumentationRegistry;


import com.android.internal.os.Clock;
import com.android.internal.os.Clock;
import com.android.internal.os.CpuScalingPolicies;
import com.android.internal.os.CpuScalingPolicies;
import com.android.internal.os.MonotonicClock;
import com.android.internal.os.PowerProfile;
import com.android.internal.os.PowerProfile;


import org.junit.Before;
import org.junit.Before;
@@ -65,18 +68,23 @@ import java.util.concurrent.CompletableFuture;
public class BatteryExternalStatsWorkerTest {
public class BatteryExternalStatsWorkerTest {
    @Rule
    @Rule
    public final RavenwoodRule mRavenwood = new RavenwoodRule();
    public final RavenwoodRule mRavenwood = new RavenwoodRule();

    private BatteryExternalStatsWorker mBatteryExternalStatsWorker;
    private BatteryExternalStatsWorker mBatteryExternalStatsWorker;
    private TestBatteryStatsImpl mBatteryStatsImpl;
    private TestPowerStatsInternal mPowerStatsInternal;
    private TestPowerStatsInternal mPowerStatsInternal;


    @Before
    @Before
    public void setUp() {
    public void setUp() {
        final Context context = InstrumentationRegistry.getContext();
        final Context context = InstrumentationRegistry.getContext();


        mBatteryStatsImpl = new TestBatteryStatsImpl(context);
        BatteryStatsImpl batteryStats = new BatteryStatsImpl(
                new BatteryStatsImpl.BatteryStatsConfig.Builder().build(), Clock.SYSTEM_CLOCK,
                new MonotonicClock(0, Clock.SYSTEM_CLOCK), null,
                new Handler(Looper.getMainLooper()), null, null, null,
                new PowerProfile(context, true /* forTest */), buildScalingPolicies(),
                new PowerStatsUidResolver());
        mPowerStatsInternal = new TestPowerStatsInternal();
        mPowerStatsInternal = new TestPowerStatsInternal();
        mBatteryExternalStatsWorker = new BatteryExternalStatsWorker(new TestInjector(context),
        mBatteryExternalStatsWorker =
                mBatteryStatsImpl);
                new BatteryExternalStatsWorker(new TestInjector(context), batteryStats);
    }
    }


    @Test
    @Test
@@ -218,25 +226,17 @@ public class BatteryExternalStatsWorkerTest {
        }
        }
    }
    }


    public class TestBatteryStatsImpl extends BatteryStatsImpl {
    private static CpuScalingPolicies buildScalingPolicies() {
        public TestBatteryStatsImpl(Context context) {
            super(new BatteryStatsConfig.Builder().build(), Clock.SYSTEM_CLOCK, null, null, null,
                    null, null, null);
            mPowerProfile = new PowerProfile(context, true /* forTest */);

        SparseArray<int[]> cpusByPolicy = new SparseArray<>();
        SparseArray<int[]> cpusByPolicy = new SparseArray<>();
        cpusByPolicy.put(0, new int[]{0, 1, 2, 3});
        cpusByPolicy.put(0, new int[]{0, 1, 2, 3});
        cpusByPolicy.put(4, new int[]{4, 5, 6, 7});
        cpusByPolicy.put(4, new int[]{4, 5, 6, 7});
        SparseArray<int[]> freqsByPolicy = new SparseArray<>();
        SparseArray<int[]> freqsByPolicy = new SparseArray<>();
        freqsByPolicy.put(0, new int[]{300000, 1000000, 2000000});
        freqsByPolicy.put(0, new int[]{300000, 1000000, 2000000});
        freqsByPolicy.put(4, new int[]{300000, 1000000, 2500000, 3000000});
        freqsByPolicy.put(4, new int[]{300000, 1000000, 2500000, 3000000});
            mCpuScalingPolicies = new CpuScalingPolicies(freqsByPolicy, freqsByPolicy);
        return new CpuScalingPolicies(freqsByPolicy, freqsByPolicy);

            initTimersAndCounters();
        }
    }
    }


    public class TestPowerStatsInternal extends PowerStatsInternal {
    private static class TestPowerStatsInternal extends PowerStatsInternal {
        private final SparseArray<EnergyConsumer> mEnergyConsumers = new SparseArray();
        private final SparseArray<EnergyConsumer> mEnergyConsumers = new SparseArray();
        private final SparseArray<EnergyConsumerResult> mEnergyConsumerResults = new SparseArray();
        private final SparseArray<EnergyConsumerResult> mEnergyConsumerResults = new SparseArray();
        private final int mTimeSinceBoot = 0;
        private final int mTimeSinceBoot = 0;
+7 −3
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidClusterTimeRea
import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader;
import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader;
import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidUserSysTimeReader;
import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidUserSysTimeReader;
import com.android.internal.os.KernelSingleUidTimeReader;
import com.android.internal.os.KernelSingleUidTimeReader;
import com.android.internal.os.MonotonicClock;
import com.android.internal.os.PowerProfile;
import com.android.internal.os.PowerProfile;
import com.android.internal.power.EnergyConsumerStats;
import com.android.internal.power.EnergyConsumerStats;


@@ -73,10 +74,13 @@ public class MockBatteryStatsImpl extends BatteryStatsImpl {


    MockBatteryStatsImpl(BatteryStatsConfig config, Clock clock, File historyDirectory,
    MockBatteryStatsImpl(BatteryStatsConfig config, Clock clock, File historyDirectory,
            Handler handler, PowerStatsUidResolver powerStatsUidResolver) {
            Handler handler, PowerStatsUidResolver powerStatsUidResolver) {
        super(config, clock, historyDirectory, handler, powerStatsUidResolver,
        super(config, clock, new MonotonicClock(0, clock), historyDirectory, handler,
                mock(FrameworkStatsLogger.class), mock(BatteryStatsHistory.TraceDelegate.class),
                mock(PlatformIdleStateCallback.class), mock(EnergyStatsRetriever.class),
                mock(UserInfoProvider.class), mock(PowerProfile.class),
                new CpuScalingPolicies(new SparseArray<>(), new SparseArray<>()),
                powerStatsUidResolver, mock(FrameworkStatsLogger.class),
                mock(BatteryStatsHistory.TraceDelegate.class),
                mock(BatteryStatsHistory.EventLogger.class));
                mock(BatteryStatsHistory.EventLogger.class));
        initTimersAndCounters();
        setMaxHistoryBuffer(128 * 1024);
        setMaxHistoryBuffer(128 * 1024);


        setExternalStatsSyncLocked(mExternalStatsSync);
        setExternalStatsSyncLocked(mExternalStatsSync);
+1 −1
Original line number Original line Diff line number Diff line
@@ -58,7 +58,7 @@ public class PowerStatsAggregatorTest {


    @Before
    @Before
    public void setup() throws ParseException {
    public void setup() throws ParseException {
        mHistory = new BatteryStatsHistory(1024,
        mHistory = new BatteryStatsHistory(null, null, 0, 1024,
                mock(BatteryStatsHistory.HistoryStepDetailsCalculator.class), mClock,
                mock(BatteryStatsHistory.HistoryStepDetailsCalculator.class), mClock,
                mMonotonicClock, mock(BatteryStatsHistory.TraceDelegate.class), null);
                mMonotonicClock, mock(BatteryStatsHistory.TraceDelegate.class), null);