summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Android Build Merger (Role) <android-build-merger@google.com> 2016-06-16 18:44:17 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-06-16 18:44:18 +0000
commitab84ab5f355f7862b70c1f5a618ccf71f52325d6 (patch)
treee74cbcd16a15619135eb2b83cc63a38b635dd1f0
parentc637d4bde25337ff3d6fb65832dbe4647eb64a48 (diff)
parentb021fca31a69b6c2d4582bcf1cf1aad987f22557 (diff)
Merge "Merge \"Fix issue #29371078: Foreground jobs should not count...\" into nyc-dev am: 47cfac6803" into nyc-mr1-dev
-rw-r--r--core/java/android/os/IDeviceIdleController.aidl2
-rw-r--r--services/core/java/com/android/server/DeviceIdleController.java59
-rw-r--r--services/core/java/com/android/server/job/JobSchedulerService.java9
-rw-r--r--services/core/java/com/android/server/job/controllers/AppIdleController.java7
-rw-r--r--services/core/java/com/android/server/job/controllers/DeviceIdleJobsController.java15
-rw-r--r--services/core/java/com/android/server/job/controllers/JobStatus.java9
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:");