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

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

Delay processing of BatteryStats events until onSystemReady

Bug: 374937737
Test: atest PowerStatsTests
Flag: EXEMPT_bugfix
Change-Id: I2b5e025d7399d20a11db760165fac3c5483335c7
parent 6e7b24e8
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ import android.os.BatteryUsageStatsQuery;
import android.os.Binder;
import android.os.BluetoothBatteryStats;
import android.os.Bundle;
import android.os.ConditionVariable;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
@@ -213,6 +214,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
    private final HandlerThread mHandlerThread;
    private final Handler mHandler;
    private final Object mLock = new Object();
    private final ConditionVariable mSystemReady = new ConditionVariable(false);

    private final Object mPowerStatsLock = new Object();
    @GuardedBy("mPowerStatsLock")
@@ -413,6 +415,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
        mHandlerThread = new HandlerThread("batterystats-handler");
        mHandlerThread.start();
        mHandler = new Handler(mHandlerThread.getLooper());
        mHandler.post(mSystemReady::block);

        mMonotonicClock = new MonotonicClock(new File(systemDir, "monotonic_clock.xml"));
        mPowerProfile = new PowerProfile(context);
@@ -648,6 +651,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
        dataConnectionStats.startMonitoring();

        registerStatsCallbacks();
        mSystemReady.open();
    }

    private static boolean isBatteryUsageStatsAccumulationSupported() {
+10 −8
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.os.BatteryUsageStatsQuery;
import android.os.Handler;
import android.os.Process;
import android.util.Log;
import android.util.Slog;
import android.util.SparseArray;

import com.android.internal.os.Clock;
@@ -350,13 +351,14 @@ public class BatteryUsageStatsProvider {

        synchronized (stats) {
            final List<PowerCalculator> powerCalculators = getPowerCalculators();
            if (!powerCalculators.isEmpty()) {
                if (monotonicStartTime != MonotonicClock.UNDEFINED
                        || monotonicEndTime != MonotonicClock.UNDEFINED) {
                    throw new IllegalStateException("BatteryUsageStatsQuery specifies a time "
            boolean usePowerCalculators = !powerCalculators.isEmpty();
            if (usePowerCalculators
                    && (monotonicStartTime != MonotonicClock.UNDEFINED
                    || monotonicEndTime != MonotonicClock.UNDEFINED)) {
                Slog.wtfStack(TAG, "BatteryUsageStatsQuery specifies a time "
                        + "range that is incompatible with PowerCalculators: "
                        + powerCalculators);
                }
                usePowerCalculators = false;
            }

            if (monotonicStartTime == MonotonicClock.UNDEFINED) {
@@ -371,7 +373,7 @@ public class BatteryUsageStatsProvider {
                batteryUsageStatsBuilder.setStatsEndTimestamp(currentTimeMs);
            }

            if (!powerCalculators.isEmpty()) {
            if (usePowerCalculators) {
                final long realtimeUs = mClock.elapsedRealtime() * 1000;
                final long uptimeUs = mClock.uptimeMillis() * 1000;
                final int[] powerComponents = query.getPowerComponents();
+1 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ public final class BatteryStatsServiceTest {
        Handler handler = new Handler(mBgThread.getLooper());
        mBatteryStatsService = new BatteryStatsService(context, systemDir);
        mBatteryStatsService.setRailsStatsCollectionEnabled(false);
        mBatteryStatsService.systemServicesReady();
    }

    @After