diff options
| author | 2016-06-16 18:44:17 +0000 | |
|---|---|---|
| committer | 2016-06-16 18:44:18 +0000 | |
| commit | ab84ab5f355f7862b70c1f5a618ccf71f52325d6 (patch) | |
| tree | e74cbcd16a15619135eb2b83cc63a38b635dd1f0 | |
| parent | c637d4bde25337ff3d6fb65832dbe4647eb64a48 (diff) | |
| parent | b021fca31a69b6c2d4582bcf1cf1aad987f22557 (diff) | |
Merge "Merge \"Fix issue #29371078: Foreground jobs should not count...\" into nyc-dev am: 47cfac6803" into nyc-mr1-dev
6 files changed, 34 insertions, 67 deletions
diff --git a/core/java/android/os/IDeviceIdleController.aidl b/core/java/android/os/IDeviceIdleController.aidl index 082194ba6162..cc2af215c2c6 100644 --- a/core/java/android/os/IDeviceIdleController.aidl +++ b/core/java/android/os/IDeviceIdleController.aidl @@ -38,8 +38,6 @@ interface IDeviceIdleController { long addPowerSaveTempWhitelistAppForMms(String name, int userId, String reason); long addPowerSaveTempWhitelistAppForSms(String name, int userId, String reason); void exitIdle(String reason); - void downloadServiceActive(IBinder token); - void downloadServiceInactive(); boolean registerMaintenanceActivityListener(IMaintenanceActivityListener listener); void unregisterMaintenanceActivityListener(IMaintenanceActivityListener listener); } diff --git a/services/core/java/com/android/server/DeviceIdleController.java b/services/core/java/com/android/server/DeviceIdleController.java index bb966f7b0eca..afed5ef066ff 100644 --- a/services/core/java/com/android/server/DeviceIdleController.java +++ b/services/core/java/com/android/server/DeviceIdleController.java @@ -212,7 +212,6 @@ public class DeviceIdleController extends SystemService private int mActiveIdleOpCount; private PowerManager.WakeLock mActiveIdleWakeLock; - private IBinder mDownloadServiceActive; private boolean mJobsActive; private boolean mAlarmsActive; private boolean mReportedMaintenanceActivity; @@ -607,7 +606,7 @@ public class DeviceIdleController extends SystemService * This is the minimum amount of time that we will stay in maintenance mode after * a light doze. We have this minimum to allow various things to respond to switching * in to maintenance mode and scheduling their work -- otherwise we may - * see there is nothing to do (no jobs or downloads pending) and go out of maintenance + * see there is nothing to do (no jobs pending) and go out of maintenance * mode immediately. * @see Settings.Global#DEVICE_IDLE_CONSTANTS * @see #KEY_MIN_LIGHT_MAINTENANCE_TIME @@ -618,7 +617,7 @@ public class DeviceIdleController extends SystemService * This is the minimum amount of time that we will stay in maintenance mode after * a full doze. We have this minimum to allow various things to respond to switching * in to maintenance mode and scheduling their work -- otherwise we may - * see there is nothing to do (no jobs or downloads pending) and go out of maintenance + * see there is nothing to do (no jobs pending) and go out of maintenance * mode immediately. * @see Settings.Global#DEVICE_IDLE_CONSTANTS * @see #KEY_MIN_DEEP_MAINTENANCE_TIME @@ -1220,28 +1219,6 @@ public class DeviceIdleController extends SystemService } } - @Override public void downloadServiceActive(IBinder token) { - getContext().enforceCallingOrSelfPermission( - "android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS", null); - long ident = Binder.clearCallingIdentity(); - try { - DeviceIdleController.this.downloadServiceActive(token); - } finally { - Binder.restoreCallingIdentity(ident); - } - } - - @Override public void downloadServiceInactive() { - getContext().enforceCallingOrSelfPermission( - "android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS", null); - long ident = Binder.clearCallingIdentity(); - try { - DeviceIdleController.this.downloadServiceInactive(); - } finally { - Binder.restoreCallingIdentity(ident); - } - } - @Override public boolean registerMaintenanceActivityListener( IMaintenanceActivityListener listener) { return DeviceIdleController.this.registerMaintenanceActivityListener(listener); @@ -2086,30 +2063,6 @@ public class DeviceIdleController extends SystemService } } - void downloadServiceActive(IBinder token) { - synchronized (this) { - mDownloadServiceActive = token; - reportMaintenanceActivityIfNeededLocked(); - try { - token.linkToDeath(new IBinder.DeathRecipient() { - @Override public void binderDied() { - downloadServiceInactive(); - } - }, 0); - } catch (RemoteException e) { - mDownloadServiceActive = null; - } - } - } - - void downloadServiceInactive() { - synchronized (this) { - mDownloadServiceActive = null; - reportMaintenanceActivityIfNeededLocked(); - exitMaintenanceEarlyIfNeededLocked(); - } - } - void setJobsActive(boolean active) { synchronized (this) { mJobsActive = active; @@ -2143,7 +2096,7 @@ public class DeviceIdleController extends SystemService } void reportMaintenanceActivityIfNeededLocked() { - boolean active = mJobsActive | (mDownloadServiceActive != null); + boolean active = mJobsActive; if (active == mReportedMaintenanceActivity) { return; } @@ -2154,8 +2107,7 @@ public class DeviceIdleController extends SystemService } boolean isOpsInactiveLocked() { - return mActiveIdleOpCount <= 0 && mDownloadServiceActive == null - && !mJobsActive && !mAlarmsActive; + return mActiveIdleOpCount <= 0 && !mJobsActive && !mAlarmsActive; } void exitMaintenanceEarlyIfNeededLocked() { @@ -3053,9 +3005,6 @@ public class DeviceIdleController extends SystemService if (mAlarmsActive) { pw.print(" mAlarmsActive="); pw.println(mAlarmsActive); } - if (mDownloadServiceActive != null) { - pw.print(" mDownloadServiceActive="); pw.println(mDownloadServiceActive); - } } } diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java index 27b3aa2280c0..8589de1a1884 100644 --- a/services/core/java/com/android/server/job/JobSchedulerService.java +++ b/services/core/java/com/android/server/job/JobSchedulerService.java @@ -692,8 +692,13 @@ public final class JobSchedulerService extends com.android.server.SystemService boolean active = mPendingJobs.size() > 0; if (mPendingJobs.size() <= 0) { for (int i=0; i<mActiveServices.size(); i++) { - JobServiceContext jsc = mActiveServices.get(i); - if (jsc.getRunningJob() != null) { + final JobServiceContext jsc = mActiveServices.get(i); + final JobStatus job = jsc.getRunningJob(); + if (job != null + && (job.getJob().getFlags() & JobInfo.FLAG_WILL_BE_FOREGROUND) == 0 + && !job.dozeWhitelisted) { + // We will report active if we have a job running and it is not an exception + // due to being in the foreground or whitelisted. active = true; break; } diff --git a/services/core/java/com/android/server/job/controllers/AppIdleController.java b/services/core/java/com/android/server/job/controllers/AppIdleController.java index a23af3541e19..2dbecbd4f515 100644 --- a/services/core/java/com/android/server/job/controllers/AppIdleController.java +++ b/services/core/java/com/android/server/job/controllers/AppIdleController.java @@ -142,8 +142,11 @@ public class AppIdleController extends StateController { UserHandle.formatUid(pw, jobStatus.getSourceUid()); pw.print(": "); pw.print(jobStatus.getSourcePackageName()); - pw.print(", runnable="); - pw.println((jobStatus.satisfiedConstraints&JobStatus.CONSTRAINT_APP_NOT_IDLE) != 0); + if ((jobStatus.satisfiedConstraints&JobStatus.CONSTRAINT_APP_NOT_IDLE) != 0) { + pw.println(" RUNNABLE"); + } else { + pw.println(" WAITING"); + } } }); } diff --git a/services/core/java/com/android/server/job/controllers/DeviceIdleJobsController.java b/services/core/java/com/android/server/job/controllers/DeviceIdleJobsController.java index bf1297faf183..f7706d7e048a 100644 --- a/services/core/java/com/android/server/job/controllers/DeviceIdleJobsController.java +++ b/services/core/java/com/android/server/job/controllers/DeviceIdleJobsController.java @@ -157,8 +157,9 @@ public class DeviceIdleJobsController extends StateController { } private void updateTaskStateLocked(JobStatus task) { - boolean enableTask = !mDeviceIdleMode || isWhitelistedLocked(task); - task.setDeviceNotDozingConstraintSatisfied(enableTask); + final boolean whitelisted = isWhitelistedLocked(task); + final boolean enableTask = !mDeviceIdleMode || whitelisted; + task.setDeviceNotDozingConstraintSatisfied(enableTask, whitelisted); } @Override @@ -186,9 +187,13 @@ public class DeviceIdleJobsController extends StateController { UserHandle.formatUid(pw, jobStatus.getSourceUid()); pw.print(": "); pw.print(jobStatus.getSourcePackageName()); - pw.print(", runnable="); - pw.println((jobStatus.satisfiedConstraints - & JobStatus.CONSTRAINT_DEVICE_NOT_DOZING) != 0); + pw.print((jobStatus.satisfiedConstraints + & JobStatus.CONSTRAINT_DEVICE_NOT_DOZING) != 0 + ? " RUNNABLE" : " WAITING"); + if (jobStatus.dozeWhitelisted) { + pw.print(" WHITELISTED"); + } + pw.println(); } }); } diff --git a/services/core/java/com/android/server/job/controllers/JobStatus.java b/services/core/java/com/android/server/job/controllers/JobStatus.java index ded7a2f3521e..552c990d19cb 100644 --- a/services/core/java/com/android/server/job/controllers/JobStatus.java +++ b/services/core/java/com/android/server/job/controllers/JobStatus.java @@ -103,6 +103,9 @@ public final class JobStatus { final int requiredConstraints; int satisfiedConstraints = 0; + // Set to true if doze constraint was satisfied due to app being whitelisted. + public boolean dozeWhitelisted; + // These are filled in by controllers when preparing for execution. public ArraySet<Uri> changedUris; public ArraySet<String> changedAuthorities; @@ -403,7 +406,8 @@ public final class JobStatus { return setConstraintSatisfied(CONSTRAINT_CONTENT_TRIGGER, state); } - boolean setDeviceNotDozingConstraintSatisfied(boolean state) { + boolean setDeviceNotDozingConstraintSatisfied(boolean state, boolean whitelisted) { + dozeWhitelisted = whitelisted; return setConstraintSatisfied(CONSTRAINT_DEVICE_NOT_DOZING, state); } @@ -651,6 +655,9 @@ public final class JobStatus { pw.print(prefix); pw.print("Unsatisfied constraints:"); dumpConstraints(pw, (requiredConstraints & ~satisfiedConstraints)); pw.println(); + if (dozeWhitelisted) { + pw.print(prefix); pw.println("Doze whitelisted: true"); + } } if (changedAuthorities != null) { pw.print(prefix); pw.println("Changed authorities:"); |