Loading core/java/android/os/PowerManager.java +5 −0 Original line number Diff line number Diff line Loading @@ -554,6 +554,11 @@ public final class PowerManager { */ int FORCE_ALL_APPS_STANDBY = 11; /** * Whether to enable background check on all apps or not. */ int FORCE_BACKGROUND_CHECK = 12; /** * Whether to disable non-essential sensors. (e.g. edge sensors.) */ Loading services/core/java/com/android/server/am/ActivityManagerService.java +67 −19 Original line number Diff line number Diff line Loading @@ -318,6 +318,7 @@ import android.os.Parcel; import android.os.ParcelFileDescriptor; import android.os.PersistableBundle; import android.os.PowerManager; import android.os.PowerManager.ServiceType; import android.os.PowerManagerInternal; import android.os.Process; import android.os.RemoteCallbackList; Loading Loading @@ -1781,6 +1782,11 @@ public class ActivityManagerService extends IActivityManager.Stub final boolean mPermissionReviewRequired; /** * Whether to force background check on all apps (for battery saver) or not. */ boolean mForceBackgroundCheck; private static String sTheRealBuildSerial = Build.UNKNOWN; /** Loading Loading @@ -8620,6 +8626,16 @@ public class ActivityManagerService extends IActivityManager.Stub } switch (appop) { case AppOpsManager.MODE_ALLOWED: // If force-background-check is enabled, restrict all apps that aren't whitelisted. if (mForceBackgroundCheck && UserHandle.isApp(uid) && !isOnDeviceIdleWhitelistLocked(uid)) { if (DEBUG_BACKGROUND_CHECK) { Slog.i(TAG, "Force background check: " + uid + "/" + packageName + " restricted"); } return ActivityManager.APP_START_MODE_DELAYED; } return ActivityManager.APP_START_MODE_NORMAL; case AppOpsManager.MODE_IGNORED: return ActivityManager.APP_START_MODE_DELAYED; Loading Loading @@ -8719,6 +8735,9 @@ public class ActivityManagerService extends IActivityManager.Stub return ActivityManager.APP_START_MODE_NORMAL; } /** * @return whether a UID is in the system, user or temp doze whitelist. */ boolean isOnDeviceIdleWhitelistLocked(int uid) { final int appId = UserHandle.getAppId(uid); return Arrays.binarySearch(mDeviceIdleWhitelist, appId) >= 0 Loading Loading @@ -14176,6 +14195,16 @@ public class ActivityManagerService extends IActivityManager.Stub readGrantedUriPermissionsLocked(); } final PowerManagerInternal pmi = LocalServices.getService(PowerManagerInternal.class); if (pmi != null) { pmi.registerLowPowerModeObserver(ServiceType.FORCE_BACKGROUND_CHECK, state -> updateForceBackgroundCheck(state.batterySaverEnabled)); updateForceBackgroundCheck( pmi.getLowPowerState(ServiceType.FORCE_BACKGROUND_CHECK).batterySaverEnabled); } else { Slog.wtf(TAG, "PowerManagerInternal not found."); } if (goingCallback != null) goingCallback.run(); traceLog.traceBegin("ActivityManagerStartApps"); mBatteryStatsService.noteEvent(BatteryStats.HistoryItem.EVENT_USER_RUNNING_START, Loading Loading @@ -14274,6 +14303,23 @@ public class ActivityManagerService extends IActivityManager.Stub } } private void updateForceBackgroundCheck(boolean enabled) { synchronized (this) { if (mForceBackgroundCheck != enabled) { mForceBackgroundCheck = enabled; if (DEBUG_BACKGROUND_CHECK) { Slog.i(TAG, "Force background check " + (enabled ? "enabled" : "disabled")); } if (mForceBackgroundCheck) { // Stop background services for idle UIDs. doStopUidForIdleUidsLocked(); } } } } void killAppAtUsersRequest(ProcessRecord app, Dialog fromDialog) { synchronized (this) { mAppErrors.killAppAtUserRequestLocked(app, fromDialog); Loading Loading @@ -15625,7 +15671,6 @@ public class ActivityManagerService extends IActivityManager.Stub void dumpProcessesLocked(FileDescriptor fd, PrintWriter pw, String[] args, int opti, boolean dumpAll, String dumpPackage, int dumpAppId) { boolean needSep = false; boolean printedAnything = false; int numPers = 0; pw.println("ACTIVITY MANAGER RUNNING PROCESSES (dumpsys activity processes)"); Loading @@ -15643,7 +15688,6 @@ public class ActivityManagerService extends IActivityManager.Stub if (!needSep) { pw.println(" All known processes:"); needSep = true; printedAnything = true; } pw.print(r.persistent ? " *PERS*" : " *APP*"); pw.print(" UID "); pw.print(procs.keyAt(ia)); Loading @@ -15668,7 +15712,6 @@ public class ActivityManagerService extends IActivityManager.Stub pw.println(); } pw.println(" Isolated process list (sorted by uid):"); printedAnything = true; printed = true; needSep = true; } Loading @@ -15690,7 +15733,6 @@ public class ActivityManagerService extends IActivityManager.Stub pw.println(); } pw.println(" Active instrumentation:"); printedAnything = true; printed = true; needSep = true; } Loading @@ -15702,14 +15744,14 @@ public class ActivityManagerService extends IActivityManager.Stub if (mActiveUids.size() > 0) { if (dumpUids(pw, dumpPackage, dumpAppId, mActiveUids, "UID states:", needSep)) { printedAnything = needSep = true; needSep = true; } } if (dumpAll) { if (mValidateUids.size() > 0) { if (dumpUids(pw, dumpPackage, dumpAppId, mValidateUids, "UID validation:", needSep)) { printedAnything = needSep = true; needSep = true; } } } Loading @@ -15726,7 +15768,6 @@ public class ActivityManagerService extends IActivityManager.Stub pw.println("):"); dumpProcessOomList(pw, this, mLruProcesses, " ", "Proc", "PERS", false, dumpPackage); needSep = true; printedAnything = true; } if (dumpAll || dumpPackage != null) { Loading @@ -15742,7 +15783,6 @@ public class ActivityManagerService extends IActivityManager.Stub needSep = true; pw.println(" PID mappings:"); printed = true; printedAnything = true; } pw.print(" PID #"); pw.print(mPidsSelfLocked.keyAt(i)); pw.print(": "); pw.println(mPidsSelfLocked.valueAt(i)); Loading @@ -15765,7 +15805,6 @@ public class ActivityManagerService extends IActivityManager.Stub needSep = true; pw.println(" Foreground Processes:"); printed = true; printedAnything = true; } pw.print(" PID #"); pw.print(mImportantProcesses.keyAt(i)); pw.print(": "); pw.println(mImportantProcesses.valueAt(i)); Loading @@ -15776,7 +15815,6 @@ public class ActivityManagerService extends IActivityManager.Stub if (mPersistentStartingProcesses.size() > 0) { if (needSep) pw.println(); needSep = true; printedAnything = true; pw.println(" Persisent processes that are starting:"); dumpProcessList(pw, this, mPersistentStartingProcesses, " ", "Starting Norm", "Restarting PERS", dumpPackage); Loading @@ -15785,7 +15823,6 @@ public class ActivityManagerService extends IActivityManager.Stub if (mRemovedProcesses.size() > 0) { if (needSep) pw.println(); needSep = true; printedAnything = true; pw.println(" Processes that are being removed:"); dumpProcessList(pw, this, mRemovedProcesses, " ", "Removed Norm", "Removed PERS", dumpPackage); Loading @@ -15794,7 +15831,6 @@ public class ActivityManagerService extends IActivityManager.Stub if (mProcessesOnHold.size() > 0) { if (needSep) pw.println(); needSep = true; printedAnything = true; pw.println(" Processes that are on old until the system is ready:"); dumpProcessList(pw, this, mProcessesOnHold, " ", "OnHold Norm", "OnHold PERS", dumpPackage); Loading @@ -15803,9 +15839,6 @@ public class ActivityManagerService extends IActivityManager.Stub needSep = dumpProcessesToGc(fd, pw, args, opti, needSep, dumpAll, dumpPackage); needSep = mAppErrors.dumpLocked(fd, pw, needSep, dumpPackage); if (needSep) { printedAnything = true; } if (dumpPackage == null) { pw.println(); Loading Loading @@ -16077,10 +16110,7 @@ public class ActivityManagerService extends IActivityManager.Stub pw.println(); } } if (!printedAnything) { pw.println(" (nothing)"); } pw.println(" mForceBackgroundCheck=" + mForceBackgroundCheck); } boolean dumpProcessesToGc(FileDescriptor fd, PrintWriter pw, String[] args, Loading Loading @@ -23341,6 +23371,24 @@ public class ActivityManagerService extends IActivityManager.Stub } } /** * Call {@link #doStopUidLocked} (which will also stop background services) for all idle UIDs. */ void doStopUidForIdleUidsLocked() { final int size = mActiveUids.size(); for (int i = 0; i < size; i++) { final int uid = mActiveUids.keyAt(i); if (!UserHandle.isApp(uid)) { continue; } final UidRecord uidRec = mActiveUids.valueAt(i); if (!uidRec.idle) { continue; } doStopUidLocked(uidRec.uid, uidRec); } } final void doStopUidLocked(int uid, final UidRecord uidRec) { mServices.stopInBackgroundLocked(uid); enqueueUidChangeLocked(uidRec, uid, UidRecord.CHANGE_IDLE); services/core/java/com/android/server/power/BatterySaverPolicy.java +15 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ public class BatterySaverPolicy extends ContentObserver { private static final String KEY_FULLBACKUP_DEFERRED = "fullbackup_deferred"; private static final String KEY_KEYVALUE_DEFERRED = "keyvaluebackup_deferred"; private static final String KEY_FORCE_ALL_APPS_STANDBY = "force_all_apps_standby"; private static final String KEY_FORCE_BACKGROUND_CHECK = "force_background_check"; private static final String KEY_OPTIONAL_SENSORS_DISABLED = "optional_sensors_disabled"; private static final String KEY_CPU_FREQ_INTERACTIVE = "cpufreq-i"; Loading Loading @@ -189,6 +190,12 @@ public class BatterySaverPolicy extends ContentObserver { @GuardedBy("mLock") private boolean mForceAllAppsStandby; /** * Whether to put all apps in the stand-by mode. */ @GuardedBy("mLock") private boolean mForceBackgroundCheck; /** * Weather to show non-essential sensors (e.g. edge sensors) or not. */ Loading Loading @@ -326,6 +333,7 @@ public class BatterySaverPolicy extends ContentObserver { mDataSaverDisabled = parser.getBoolean(KEY_DATASAVER_DISABLED, true); mLaunchBoostDisabled = parser.getBoolean(KEY_LAUNCH_BOOST_DISABLED, true); mForceAllAppsStandby = parser.getBoolean(KEY_FORCE_ALL_APPS_STANDBY, true); mForceBackgroundCheck = parser.getBoolean(KEY_FORCE_BACKGROUND_CHECK, true); mOptionalSensorsDisabled = parser.getBoolean(KEY_OPTIONAL_SENSORS_DISABLED, true); // Get default value from Settings.Secure Loading Loading @@ -395,6 +403,12 @@ public class BatterySaverPolicy extends ContentObserver { case ServiceType.VIBRATION: return builder.setBatterySaverEnabled(mVibrationDisabled) .build(); case ServiceType.FORCE_ALL_APPS_STANDBY: return builder.setBatterySaverEnabled(mForceAllAppsStandby) .build(); case ServiceType.FORCE_BACKGROUND_CHECK: return builder.setBatterySaverEnabled(mForceBackgroundCheck) .build(); case ServiceType.OPTIONAL_SENSORS: return builder.setBatterySaverEnabled(mOptionalSensorsDisabled) .build(); Loading Loading @@ -438,6 +452,7 @@ public class BatterySaverPolicy extends ContentObserver { pw.println(" " + KEY_ADJUST_BRIGHTNESS_FACTOR + "=" + mAdjustBrightnessFactor); pw.println(" " + KEY_GPS_MODE + "=" + mGpsMode); pw.println(" " + KEY_FORCE_ALL_APPS_STANDBY + "=" + mForceAllAppsStandby); pw.println(" " + KEY_FORCE_BACKGROUND_CHECK + "=" + mForceBackgroundCheck); pw.println(" " + KEY_OPTIONAL_SENSORS_DISABLED + "=" + mOptionalSensorsDisabled); pw.println(); Loading Loading
core/java/android/os/PowerManager.java +5 −0 Original line number Diff line number Diff line Loading @@ -554,6 +554,11 @@ public final class PowerManager { */ int FORCE_ALL_APPS_STANDBY = 11; /** * Whether to enable background check on all apps or not. */ int FORCE_BACKGROUND_CHECK = 12; /** * Whether to disable non-essential sensors. (e.g. edge sensors.) */ Loading
services/core/java/com/android/server/am/ActivityManagerService.java +67 −19 Original line number Diff line number Diff line Loading @@ -318,6 +318,7 @@ import android.os.Parcel; import android.os.ParcelFileDescriptor; import android.os.PersistableBundle; import android.os.PowerManager; import android.os.PowerManager.ServiceType; import android.os.PowerManagerInternal; import android.os.Process; import android.os.RemoteCallbackList; Loading Loading @@ -1781,6 +1782,11 @@ public class ActivityManagerService extends IActivityManager.Stub final boolean mPermissionReviewRequired; /** * Whether to force background check on all apps (for battery saver) or not. */ boolean mForceBackgroundCheck; private static String sTheRealBuildSerial = Build.UNKNOWN; /** Loading Loading @@ -8620,6 +8626,16 @@ public class ActivityManagerService extends IActivityManager.Stub } switch (appop) { case AppOpsManager.MODE_ALLOWED: // If force-background-check is enabled, restrict all apps that aren't whitelisted. if (mForceBackgroundCheck && UserHandle.isApp(uid) && !isOnDeviceIdleWhitelistLocked(uid)) { if (DEBUG_BACKGROUND_CHECK) { Slog.i(TAG, "Force background check: " + uid + "/" + packageName + " restricted"); } return ActivityManager.APP_START_MODE_DELAYED; } return ActivityManager.APP_START_MODE_NORMAL; case AppOpsManager.MODE_IGNORED: return ActivityManager.APP_START_MODE_DELAYED; Loading Loading @@ -8719,6 +8735,9 @@ public class ActivityManagerService extends IActivityManager.Stub return ActivityManager.APP_START_MODE_NORMAL; } /** * @return whether a UID is in the system, user or temp doze whitelist. */ boolean isOnDeviceIdleWhitelistLocked(int uid) { final int appId = UserHandle.getAppId(uid); return Arrays.binarySearch(mDeviceIdleWhitelist, appId) >= 0 Loading Loading @@ -14176,6 +14195,16 @@ public class ActivityManagerService extends IActivityManager.Stub readGrantedUriPermissionsLocked(); } final PowerManagerInternal pmi = LocalServices.getService(PowerManagerInternal.class); if (pmi != null) { pmi.registerLowPowerModeObserver(ServiceType.FORCE_BACKGROUND_CHECK, state -> updateForceBackgroundCheck(state.batterySaverEnabled)); updateForceBackgroundCheck( pmi.getLowPowerState(ServiceType.FORCE_BACKGROUND_CHECK).batterySaverEnabled); } else { Slog.wtf(TAG, "PowerManagerInternal not found."); } if (goingCallback != null) goingCallback.run(); traceLog.traceBegin("ActivityManagerStartApps"); mBatteryStatsService.noteEvent(BatteryStats.HistoryItem.EVENT_USER_RUNNING_START, Loading Loading @@ -14274,6 +14303,23 @@ public class ActivityManagerService extends IActivityManager.Stub } } private void updateForceBackgroundCheck(boolean enabled) { synchronized (this) { if (mForceBackgroundCheck != enabled) { mForceBackgroundCheck = enabled; if (DEBUG_BACKGROUND_CHECK) { Slog.i(TAG, "Force background check " + (enabled ? "enabled" : "disabled")); } if (mForceBackgroundCheck) { // Stop background services for idle UIDs. doStopUidForIdleUidsLocked(); } } } } void killAppAtUsersRequest(ProcessRecord app, Dialog fromDialog) { synchronized (this) { mAppErrors.killAppAtUserRequestLocked(app, fromDialog); Loading Loading @@ -15625,7 +15671,6 @@ public class ActivityManagerService extends IActivityManager.Stub void dumpProcessesLocked(FileDescriptor fd, PrintWriter pw, String[] args, int opti, boolean dumpAll, String dumpPackage, int dumpAppId) { boolean needSep = false; boolean printedAnything = false; int numPers = 0; pw.println("ACTIVITY MANAGER RUNNING PROCESSES (dumpsys activity processes)"); Loading @@ -15643,7 +15688,6 @@ public class ActivityManagerService extends IActivityManager.Stub if (!needSep) { pw.println(" All known processes:"); needSep = true; printedAnything = true; } pw.print(r.persistent ? " *PERS*" : " *APP*"); pw.print(" UID "); pw.print(procs.keyAt(ia)); Loading @@ -15668,7 +15712,6 @@ public class ActivityManagerService extends IActivityManager.Stub pw.println(); } pw.println(" Isolated process list (sorted by uid):"); printedAnything = true; printed = true; needSep = true; } Loading @@ -15690,7 +15733,6 @@ public class ActivityManagerService extends IActivityManager.Stub pw.println(); } pw.println(" Active instrumentation:"); printedAnything = true; printed = true; needSep = true; } Loading @@ -15702,14 +15744,14 @@ public class ActivityManagerService extends IActivityManager.Stub if (mActiveUids.size() > 0) { if (dumpUids(pw, dumpPackage, dumpAppId, mActiveUids, "UID states:", needSep)) { printedAnything = needSep = true; needSep = true; } } if (dumpAll) { if (mValidateUids.size() > 0) { if (dumpUids(pw, dumpPackage, dumpAppId, mValidateUids, "UID validation:", needSep)) { printedAnything = needSep = true; needSep = true; } } } Loading @@ -15726,7 +15768,6 @@ public class ActivityManagerService extends IActivityManager.Stub pw.println("):"); dumpProcessOomList(pw, this, mLruProcesses, " ", "Proc", "PERS", false, dumpPackage); needSep = true; printedAnything = true; } if (dumpAll || dumpPackage != null) { Loading @@ -15742,7 +15783,6 @@ public class ActivityManagerService extends IActivityManager.Stub needSep = true; pw.println(" PID mappings:"); printed = true; printedAnything = true; } pw.print(" PID #"); pw.print(mPidsSelfLocked.keyAt(i)); pw.print(": "); pw.println(mPidsSelfLocked.valueAt(i)); Loading @@ -15765,7 +15805,6 @@ public class ActivityManagerService extends IActivityManager.Stub needSep = true; pw.println(" Foreground Processes:"); printed = true; printedAnything = true; } pw.print(" PID #"); pw.print(mImportantProcesses.keyAt(i)); pw.print(": "); pw.println(mImportantProcesses.valueAt(i)); Loading @@ -15776,7 +15815,6 @@ public class ActivityManagerService extends IActivityManager.Stub if (mPersistentStartingProcesses.size() > 0) { if (needSep) pw.println(); needSep = true; printedAnything = true; pw.println(" Persisent processes that are starting:"); dumpProcessList(pw, this, mPersistentStartingProcesses, " ", "Starting Norm", "Restarting PERS", dumpPackage); Loading @@ -15785,7 +15823,6 @@ public class ActivityManagerService extends IActivityManager.Stub if (mRemovedProcesses.size() > 0) { if (needSep) pw.println(); needSep = true; printedAnything = true; pw.println(" Processes that are being removed:"); dumpProcessList(pw, this, mRemovedProcesses, " ", "Removed Norm", "Removed PERS", dumpPackage); Loading @@ -15794,7 +15831,6 @@ public class ActivityManagerService extends IActivityManager.Stub if (mProcessesOnHold.size() > 0) { if (needSep) pw.println(); needSep = true; printedAnything = true; pw.println(" Processes that are on old until the system is ready:"); dumpProcessList(pw, this, mProcessesOnHold, " ", "OnHold Norm", "OnHold PERS", dumpPackage); Loading @@ -15803,9 +15839,6 @@ public class ActivityManagerService extends IActivityManager.Stub needSep = dumpProcessesToGc(fd, pw, args, opti, needSep, dumpAll, dumpPackage); needSep = mAppErrors.dumpLocked(fd, pw, needSep, dumpPackage); if (needSep) { printedAnything = true; } if (dumpPackage == null) { pw.println(); Loading Loading @@ -16077,10 +16110,7 @@ public class ActivityManagerService extends IActivityManager.Stub pw.println(); } } if (!printedAnything) { pw.println(" (nothing)"); } pw.println(" mForceBackgroundCheck=" + mForceBackgroundCheck); } boolean dumpProcessesToGc(FileDescriptor fd, PrintWriter pw, String[] args, Loading Loading @@ -23341,6 +23371,24 @@ public class ActivityManagerService extends IActivityManager.Stub } } /** * Call {@link #doStopUidLocked} (which will also stop background services) for all idle UIDs. */ void doStopUidForIdleUidsLocked() { final int size = mActiveUids.size(); for (int i = 0; i < size; i++) { final int uid = mActiveUids.keyAt(i); if (!UserHandle.isApp(uid)) { continue; } final UidRecord uidRec = mActiveUids.valueAt(i); if (!uidRec.idle) { continue; } doStopUidLocked(uidRec.uid, uidRec); } } final void doStopUidLocked(int uid, final UidRecord uidRec) { mServices.stopInBackgroundLocked(uid); enqueueUidChangeLocked(uidRec, uid, UidRecord.CHANGE_IDLE);
services/core/java/com/android/server/power/BatterySaverPolicy.java +15 −0 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ public class BatterySaverPolicy extends ContentObserver { private static final String KEY_FULLBACKUP_DEFERRED = "fullbackup_deferred"; private static final String KEY_KEYVALUE_DEFERRED = "keyvaluebackup_deferred"; private static final String KEY_FORCE_ALL_APPS_STANDBY = "force_all_apps_standby"; private static final String KEY_FORCE_BACKGROUND_CHECK = "force_background_check"; private static final String KEY_OPTIONAL_SENSORS_DISABLED = "optional_sensors_disabled"; private static final String KEY_CPU_FREQ_INTERACTIVE = "cpufreq-i"; Loading Loading @@ -189,6 +190,12 @@ public class BatterySaverPolicy extends ContentObserver { @GuardedBy("mLock") private boolean mForceAllAppsStandby; /** * Whether to put all apps in the stand-by mode. */ @GuardedBy("mLock") private boolean mForceBackgroundCheck; /** * Weather to show non-essential sensors (e.g. edge sensors) or not. */ Loading Loading @@ -326,6 +333,7 @@ public class BatterySaverPolicy extends ContentObserver { mDataSaverDisabled = parser.getBoolean(KEY_DATASAVER_DISABLED, true); mLaunchBoostDisabled = parser.getBoolean(KEY_LAUNCH_BOOST_DISABLED, true); mForceAllAppsStandby = parser.getBoolean(KEY_FORCE_ALL_APPS_STANDBY, true); mForceBackgroundCheck = parser.getBoolean(KEY_FORCE_BACKGROUND_CHECK, true); mOptionalSensorsDisabled = parser.getBoolean(KEY_OPTIONAL_SENSORS_DISABLED, true); // Get default value from Settings.Secure Loading Loading @@ -395,6 +403,12 @@ public class BatterySaverPolicy extends ContentObserver { case ServiceType.VIBRATION: return builder.setBatterySaverEnabled(mVibrationDisabled) .build(); case ServiceType.FORCE_ALL_APPS_STANDBY: return builder.setBatterySaverEnabled(mForceAllAppsStandby) .build(); case ServiceType.FORCE_BACKGROUND_CHECK: return builder.setBatterySaverEnabled(mForceBackgroundCheck) .build(); case ServiceType.OPTIONAL_SENSORS: return builder.setBatterySaverEnabled(mOptionalSensorsDisabled) .build(); Loading Loading @@ -438,6 +452,7 @@ public class BatterySaverPolicy extends ContentObserver { pw.println(" " + KEY_ADJUST_BRIGHTNESS_FACTOR + "=" + mAdjustBrightnessFactor); pw.println(" " + KEY_GPS_MODE + "=" + mGpsMode); pw.println(" " + KEY_FORCE_ALL_APPS_STANDBY + "=" + mForceAllAppsStandby); pw.println(" " + KEY_FORCE_BACKGROUND_CHECK + "=" + mForceBackgroundCheck); pw.println(" " + KEY_OPTIONAL_SENSORS_DISABLED + "=" + mOptionalSensorsDisabled); pw.println(); Loading