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

Commit 46b85fa6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix inaccuracies in BatterySaverPolicy cache invalidation" into rvc-dev

parents 74918ad9 84cebabd
Loading
Loading
Loading
Loading
+31 −49
Original line number Diff line number Diff line
@@ -214,7 +214,7 @@ public class BatterySaverPolicy extends ContentObserver {
     * required adjustments.
     */
    @GuardedBy("mLock")
    private Policy mEffectivePolicy = OFF_POLICY;
    private Policy mEffectivePolicyRaw = OFF_POLICY;

    @IntDef(prefix = {"POLICY_LEVEL_"}, value = {
            POLICY_LEVEL_OFF,
@@ -228,12 +228,8 @@ public class BatterySaverPolicy extends ContentObserver {
    static final int POLICY_LEVEL_ADAPTIVE = 1;
    static final int POLICY_LEVEL_FULL = 2;

    /**
     * Do not access directly; always use {@link #setPolicyLevel}
     * and {@link #getPolicyLevelLocked}
     */
    @GuardedBy("mLock")
    private int mPolicyLevelRaw = POLICY_LEVEL_OFF;
    private int mPolicyLevel = POLICY_LEVEL_OFF;

    private final Context mContext;
    private final ContentResolver mContentResolver;
@@ -338,7 +334,7 @@ public class BatterySaverPolicy extends ContentObserver {
    private void maybeNotifyListenersOfPolicyChange() {
        final BatterySaverPolicyListener[] listeners;
        synchronized (mLock) {
            if (getPolicyLevelLocked() == POLICY_LEVEL_OFF) {
            if (mPolicyLevel == POLICY_LEVEL_OFF) {
                // Current policy is OFF, so there's no change to notify listeners of.
                return;
            }
@@ -428,14 +424,14 @@ public class BatterySaverPolicy extends ContentObserver {
        boolean changed = false;
        Policy newFullPolicy = Policy.fromSettings(setting, deviceSpecificSetting,
                DEFAULT_FULL_POLICY);
        if (getPolicyLevelLocked() == POLICY_LEVEL_FULL && !mFullPolicy.equals(newFullPolicy)) {
        if (mPolicyLevel == POLICY_LEVEL_FULL && !mFullPolicy.equals(newFullPolicy)) {
            changed = true;
        }
        mFullPolicy = newFullPolicy;

        mDefaultAdaptivePolicy = Policy.fromSettings(adaptiveSetting, adaptiveDeviceSpecificSetting,
                DEFAULT_ADAPTIVE_POLICY);
        if (getPolicyLevelLocked() == POLICY_LEVEL_ADAPTIVE
        if (mPolicyLevel == POLICY_LEVEL_ADAPTIVE
                && !mAdaptivePolicy.equals(mDefaultAdaptivePolicy)) {
            changed = true;
        }
@@ -451,8 +447,9 @@ public class BatterySaverPolicy extends ContentObserver {
    @GuardedBy("mLock")
    private void updatePolicyDependenciesLocked() {
        final Policy rawPolicy = getCurrentRawPolicyLocked();

        final int locationMode;

        invalidatePowerSaveModeCaches();
        if (mCarModeEnabled
                && rawPolicy.locationMode != PowerManager.LOCATION_MODE_NO_CHANGE
                && rawPolicy.locationMode != PowerManager.LOCATION_MODE_FOREGROUND_ONLY) {
@@ -461,7 +458,8 @@ public class BatterySaverPolicy extends ContentObserver {
        } else {
            locationMode = rawPolicy.locationMode;
        }
        mEffectivePolicy = new Policy(

        mEffectivePolicyRaw = new Policy(
                rawPolicy.adjustBrightnessFactor,
                rawPolicy.advertiseIsEnabled,
                rawPolicy.deferFullBackup,
@@ -489,24 +487,24 @@ public class BatterySaverPolicy extends ContentObserver {

        final StringBuilder sb = new StringBuilder();

        if (mEffectivePolicy.forceAllAppsStandby) sb.append("A");
        if (mEffectivePolicy.forceBackgroundCheck) sb.append("B");
        if (mEffectivePolicyRaw.forceAllAppsStandby) sb.append("A");
        if (mEffectivePolicyRaw.forceBackgroundCheck) sb.append("B");

        if (mEffectivePolicy.disableVibration) sb.append("v");
        if (mEffectivePolicy.disableAnimation) sb.append("a");
        if (mEffectivePolicy.disableSoundTrigger) sb.append("s");
        if (mEffectivePolicy.deferFullBackup) sb.append("F");
        if (mEffectivePolicy.deferKeyValueBackup) sb.append("K");
        if (mEffectivePolicy.enableFirewall) sb.append("f");
        if (mEffectivePolicy.enableDataSaver) sb.append("d");
        if (mEffectivePolicy.enableAdjustBrightness) sb.append("b");
        if (mEffectivePolicyRaw.disableVibration) sb.append("v");
        if (mEffectivePolicyRaw.disableAnimation) sb.append("a");
        if (mEffectivePolicyRaw.disableSoundTrigger) sb.append("s");
        if (mEffectivePolicyRaw.deferFullBackup) sb.append("F");
        if (mEffectivePolicyRaw.deferKeyValueBackup) sb.append("K");
        if (mEffectivePolicyRaw.enableFirewall) sb.append("f");
        if (mEffectivePolicyRaw.enableDataSaver) sb.append("d");
        if (mEffectivePolicyRaw.enableAdjustBrightness) sb.append("b");

        if (mEffectivePolicy.disableLaunchBoost) sb.append("l");
        if (mEffectivePolicy.disableOptionalSensors) sb.append("S");
        if (mEffectivePolicy.disableAod) sb.append("o");
        if (mEffectivePolicy.enableQuickDoze) sb.append("q");
        if (mEffectivePolicyRaw.disableLaunchBoost) sb.append("l");
        if (mEffectivePolicyRaw.disableOptionalSensors) sb.append("S");
        if (mEffectivePolicyRaw.disableAod) sb.append("o");
        if (mEffectivePolicyRaw.enableQuickDoze) sb.append("q");

        sb.append(mEffectivePolicy.locationMode);
        sb.append(mEffectivePolicyRaw.locationMode);

        mEventLogKeys = sb.toString();
    }
@@ -969,14 +967,14 @@ public class BatterySaverPolicy extends ContentObserver {
     */
    boolean setPolicyLevel(@PolicyLevel int level) {
        synchronized (mLock) {
            if (getPolicyLevelLocked() == level) {
            if (mPolicyLevel == level) {
                return false;
            }
            switch (level) {
                case POLICY_LEVEL_FULL:
                case POLICY_LEVEL_ADAPTIVE:
                case POLICY_LEVEL_OFF:
                    setPolicyLevelLocked(level);
                    mPolicyLevel = level;
                    break;
                default:
                    Slog.wtf(TAG, "setPolicyLevel invalid level given: " + level);
@@ -998,7 +996,7 @@ public class BatterySaverPolicy extends ContentObserver {
        }

        mAdaptivePolicy = p;
        if (getPolicyLevelLocked() == POLICY_LEVEL_ADAPTIVE) {
        if (mPolicyLevel == POLICY_LEVEL_ADAPTIVE) {
            updatePolicyDependenciesLocked();
            return true;
        }
@@ -1011,11 +1009,11 @@ public class BatterySaverPolicy extends ContentObserver {
    }

    private Policy getCurrentPolicyLocked() {
        return mEffectivePolicy;
        return mEffectivePolicyRaw;
    }

    private Policy getCurrentRawPolicyLocked() {
        switch (getPolicyLevelLocked()) {
        switch (mPolicyLevel) {
            case POLICY_LEVEL_FULL:
                return mFullPolicy;
            case POLICY_LEVEL_ADAPTIVE:
@@ -1077,12 +1075,12 @@ public class BatterySaverPolicy extends ContentObserver {

            pw.println("  mAccessibilityEnabled=" + mAccessibilityEnabled);
            pw.println("  mCarModeEnabled=" + mCarModeEnabled);
            pw.println("  mPolicyLevel=" + getPolicyLevelLocked());
            pw.println("  mPolicyLevel=" + mPolicyLevel);

            dumpPolicyLocked(pw, "  ", "full", mFullPolicy);
            dumpPolicyLocked(pw, "  ", "default adaptive", mDefaultAdaptivePolicy);
            dumpPolicyLocked(pw, "  ", "current adaptive", mAdaptivePolicy);
            dumpPolicyLocked(pw, "  ", "effective", mEffectivePolicy);
            dumpPolicyLocked(pw, "  ", "effective", mEffectivePolicyRaw);
        }
    }

@@ -1170,20 +1168,4 @@ public class BatterySaverPolicy extends ContentObserver {
            }
        }
    }

    /** Non-blocking getter exists as a reminder not to modify cached fields directly */
    @GuardedBy("mLock")
    private int getPolicyLevelLocked() {
        return mPolicyLevelRaw;
    }

    @GuardedBy("mLock")
    private void setPolicyLevelLocked(int level) {
        if (mPolicyLevelRaw == level) {
            return;
        }
        // Under lock, invalidate before set ensures caches won't return stale values.
        invalidatePowerSaveModeCaches();
        mPolicyLevelRaw = level;
    }
}