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

Commit a76b1162 authored by Nicolò Mazzucato's avatar Nicolò Mazzucato Committed by Android (Google) Code Review
Browse files

Merge "Use separate locks for BatteryController estimation and callbacks" into tm-qpr-dev

parents 2e18872e 83f8dbda
Loading
Loading
Loading
Loading
+8 −2
Original line number Original line Diff line number Diff line
@@ -57,6 +57,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.atomic.AtomicReference;


import javax.annotation.concurrent.GuardedBy;

/**
/**
 * Default implementation of a {@link BatteryController}. This controller monitors for battery
 * Default implementation of a {@link BatteryController}. This controller monitors for battery
 * level change events that are broadcasted by the system.
 * level change events that are broadcasted by the system.
@@ -94,7 +96,10 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
    private boolean mTestMode = false;
    private boolean mTestMode = false;
    @VisibleForTesting
    @VisibleForTesting
    boolean mHasReceivedBattery = false;
    boolean mHasReceivedBattery = false;
    @GuardedBy("mEstimateLock")
    private Estimate mEstimate;
    private Estimate mEstimate;
    private final Object mEstimateLock = new Object();

    private boolean mFetchingEstimate = false;
    private boolean mFetchingEstimate = false;


    // Use AtomicReference because we may request it from a different thread
    // Use AtomicReference because we may request it from a different thread
@@ -321,7 +326,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC


    @Nullable
    @Nullable
    private String generateTimeRemainingString() {
    private String generateTimeRemainingString() {
        synchronized (mFetchCallbacks) {
        synchronized (mEstimateLock) {
            if (mEstimate == null) {
            if (mEstimate == null) {
                return null;
                return null;
            }
            }
@@ -340,7 +345,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
        mFetchingEstimate = true;
        mFetchingEstimate = true;
        mBgHandler.post(() -> {
        mBgHandler.post(() -> {
            // Only fetch the estimate if they are enabled
            // Only fetch the estimate if they are enabled
            synchronized (mFetchCallbacks) {
            synchronized (mEstimateLock) {
                mEstimate = null;
                mEstimate = null;
                if (mEstimates.isHybridNotificationEnabled()) {
                if (mEstimates.isHybridNotificationEnabled()) {
                    updateEstimate();
                    updateEstimate();
@@ -363,6 +368,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
    }
    }


    @WorkerThread
    @WorkerThread
    @GuardedBy("mEstimateLock")
    private void updateEstimate() {
    private void updateEstimate() {
        Assert.isNotMainThread();
        Assert.isNotMainThread();
        // if the estimate has been cached we can just use that, otherwise get a new one and
        // if the estimate has been cached we can just use that, otherwise get a new one and