summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java80
1 files changed, 31 insertions, 49 deletions
diff --git a/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java b/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java
index 059861b65e20..701197e690fc 100644
--- a/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java
+++ b/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java
@@ -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;
- }
}