From 0529dac587b1361eac359737a5f10972bce5fd0d Mon Sep 17 00:00:00 2001 From: Shreyas Basarge Date: Tue, 15 Mar 2016 22:19:04 +0000 Subject: [PATCH] Fix for JobScheduler jobs not running If the device is powered off when a job is supposed to run, its delay and deadline both are set to 0 on boot. If the deadlineExpired alarm runs first, the job is discarded from TimeController's tracked jobs list. The delay constraint is never set to true and the job would never be executed. This behavior is fixed here. Dump modified to print jobId and uId instead of hash to make it more meaningful. Bug: 27619643 Change-Id: If03e3d6f194f15fe43b697dcb4198137fa7ed646 --- .../server/job/controllers/ConnectivityController.java | 2 +- .../com/android/server/job/controllers/IdleController.java | 2 +- .../com/android/server/job/controllers/TimeController.java | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/job/controllers/ConnectivityController.java b/services/core/java/com/android/server/job/controllers/ConnectivityController.java index bd06645b2b16c..6ef425a578775 100644 --- a/services/core/java/com/android/server/job/controllers/ConnectivityController.java +++ b/services/core/java/com/android/server/job/controllers/ConnectivityController.java @@ -185,7 +185,7 @@ public class ConnectivityController extends StateController implements pw.println("Conn."); pw.println("connected: " + mNetworkConnected + " unmetered: " + mNetworkUnmetered); for (JobStatus js: mTrackedJobs) { - pw.println(String.valueOf(js.hashCode()).substring(0, 3) + ".." + pw.println(String.valueOf(js.getJobId() + "," + js.getUid()) + ": C=" + js.hasConnectivityConstraint() + ", UM=" + js.hasUnmeteredConstraint()); } diff --git a/services/core/java/com/android/server/job/controllers/IdleController.java b/services/core/java/com/android/server/job/controllers/IdleController.java index 7638494eccb29..d9eb45c6026d6 100644 --- a/services/core/java/com/android/server/job/controllers/IdleController.java +++ b/services/core/java/com/android/server/job/controllers/IdleController.java @@ -197,7 +197,7 @@ public class IdleController extends StateController { for (int i = 0; i < mTrackedTasks.size(); i++) { final JobStatus js = mTrackedTasks.get(i); pw.print(" "); - pw.print(String.valueOf(js.hashCode()).substring(0, 3)); + pw.print(String.valueOf(js.getJobId() + "," + js.getUid())); pw.println(".."); } } diff --git a/services/core/java/com/android/server/job/controllers/TimeController.java b/services/core/java/com/android/server/job/controllers/TimeController.java index 620800caaf67d..36fa9ec68050d 100644 --- a/services/core/java/com/android/server/job/controllers/TimeController.java +++ b/services/core/java/com/android/server/job/controllers/TimeController.java @@ -145,6 +145,9 @@ public class TimeController extends StateController { final long jobDeadline = job.getLatestRunTimeElapsed(); if (jobDeadline <= nowElapsedMillis) { + if (job.hasTimingDelayConstraint()) { + job.setTimingDelayConstraintSatisfied(true); + } job.setDeadlineConstraintSatisfied(true); mStateChangedListener.onRunJobNow(job); it.remove(); @@ -281,7 +284,7 @@ public class TimeController extends StateController { + "s"); pw.println("Tracking:"); for (JobStatus ts : mTrackedJobs) { - pw.println(String.valueOf(ts.hashCode()).substring(0, 3) + ".." + pw.println(String.valueOf(ts.getJobId() + "," + ts.getUid()) + ": (" + (ts.hasTimingDelayConstraint() ? ts.getEarliestRunTime() : "N/A") + ", " + (ts.hasDeadlineConstraint() ?ts.getLatestRunTimeElapsed() : "N/A") + ")");