Stop overrunning jobs when doze and battery saver turn on. am: a84568723f
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13780349 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I2caacffc7e1b48c9446e8576cbeba57be97c5b89
This commit is contained in:
@@ -317,6 +317,8 @@ class JobConcurrencyManager {
|
||||
|
||||
final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
|
||||
filter.addAction(Intent.ACTION_SCREEN_OFF);
|
||||
filter.addAction(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED);
|
||||
filter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED);
|
||||
mContext.registerReceiver(mReceiver, filter);
|
||||
try {
|
||||
ActivityManager.getService().registerUserSwitchObserver(mGracePeriodObserver, TAG);
|
||||
@@ -340,6 +342,20 @@ class JobConcurrencyManager {
|
||||
case Intent.ACTION_SCREEN_OFF:
|
||||
onInteractiveStateChanged(false);
|
||||
break;
|
||||
case PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED:
|
||||
if (mPowerManager != null && mPowerManager.isDeviceIdleMode()) {
|
||||
synchronized (mLock) {
|
||||
stopLongRunningJobsLocked("deep doze");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case PowerManager.ACTION_POWER_SAVE_MODE_CHANGED:
|
||||
if (mPowerManager != null && mPowerManager.isPowerSaveMode()) {
|
||||
synchronized (mLock) {
|
||||
stopLongRunningJobsLocked("battery saver");
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -634,6 +650,18 @@ class JobConcurrencyManager {
|
||||
noteConcurrency();
|
||||
}
|
||||
|
||||
@GuardedBy("mLock")
|
||||
private void stopLongRunningJobsLocked(@NonNull String debugReason) {
|
||||
for (int i = 0; i < MAX_JOB_CONTEXTS_COUNT; ++i) {
|
||||
final JobServiceContext jsc = mService.mActiveServices.get(i);
|
||||
final JobStatus jobStatus = jsc.getRunningJobLocked();
|
||||
|
||||
if (jobStatus != null && !jsc.isWithinExecutionGuaranteeTime()) {
|
||||
jsc.cancelExecutingJobLocked(JobParameters.REASON_TIMEOUT, debugReason);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void noteConcurrency() {
|
||||
mService.mJobPackageTracker.noteConcurrency(mRunningJobs.size(),
|
||||
// TODO: log per type instead of only TOP
|
||||
|
||||
Reference in New Issue
Block a user