Merge "Fix dead lock between AM and BatterySaverStateMachine" into pi-dev

This commit is contained in:
TreeHugger Robot
2018-03-31 05:24:20 +00:00
committed by Android (Google) Code Review
2 changed files with 29 additions and 15 deletions

View File

@@ -26,6 +26,7 @@ import android.util.proto.ProtoOutputStream;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.os.BackgroundThread;
import com.android.server.power.BatterySaverPolicy;
import com.android.server.power.BatterySaverStateMachineProto;
@@ -124,25 +125,33 @@ public class BatterySaverStateMachine {
if (DEBUG) {
Slog.d(TAG, "onBootCompleted");
}
synchronized (mLock) {
// This is called with the power manager lock held. Don't do any
runOnBgThread(() -> {
synchronized (mLock) {
final ContentResolver cr = mContext.getContentResolver();
cr.registerContentObserver(Settings.Global.getUriFor(
Settings.Global.LOW_POWER_MODE),
false, mSettingsObserver, UserHandle.USER_SYSTEM);
cr.registerContentObserver(Settings.Global.getUriFor(
Settings.Global.LOW_POWER_MODE_STICKY),
false, mSettingsObserver, UserHandle.USER_SYSTEM);
cr.registerContentObserver(Settings.Global.getUriFor(
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL),
false, mSettingsObserver, UserHandle.USER_SYSTEM);
final ContentResolver cr = mContext.getContentResolver();
cr.registerContentObserver(Settings.Global.getUriFor(
Settings.Global.LOW_POWER_MODE),
false, mSettingsObserver, UserHandle.USER_SYSTEM);
cr.registerContentObserver(Settings.Global.getUriFor(
Settings.Global.LOW_POWER_MODE_STICKY),
false, mSettingsObserver, UserHandle.USER_SYSTEM);
cr.registerContentObserver(Settings.Global.getUriFor(
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL),
false, mSettingsObserver, UserHandle.USER_SYSTEM);
mBootCompleted = true;
mBootCompleted = true;
refreshSettingsLocked();
refreshSettingsLocked();
doAutoBatterySaverLocked();
}
doAutoBatterySaverLocked();
}
});
}
@VisibleForTesting
void runOnBgThread(Runnable r) {
BackgroundThread.getHandler().post(r);
}
void refreshSettingsLocked() {

View File

@@ -139,6 +139,11 @@ public class BatterySaverStateMachineTest {
protected int getGlobalSetting(String key, int defValue) {
return mDevice.getGlobalSetting(key, defValue);
}
@Override
void runOnBgThread(Runnable r) {
r.run();
}
}
@Before