OSDN Git Service

Fix parole scheduling bugs.
authorJeff Sharkey <jsharkey@android.com>
Mon, 14 Sep 2015 22:35:38 +0000 (15:35 -0700)
committerJeff Sharkey <jsharkey@android.com>
Mon, 14 Sep 2015 22:49:53 +0000 (15:49 -0700)
There were a few subtle bugs in app idle parole scheduling that
would cause us to never end a parole period we had entered.  The
updated logic in this change concentrates the registration for the
next event in one place in setAppIdleParoled().

Bug: 24050462
Change-Id: I1efe43cd6e00a547f70c4a4a37e1f3ef52a7e706

services/usage/java/com/android/server/usage/UsageStatsService.java

index 4146c1c..5ad796f 100644 (file)
@@ -314,6 +314,8 @@ public class UsageStatsService extends SystemService implements
                 mAppIdleParoled = paroled;
                 if (DEBUG) Slog.d(TAG, "Changing paroled to " + mAppIdleParoled);
                 if (paroled) {
+                    postParoleEndTimeout();
+                } else {
                     mLastAppIdleParoledTime = checkAndGetTimeLocked();
                     postNextParoleTimeout();
                 }
@@ -404,8 +406,6 @@ public class UsageStatsService extends SystemService implements
                 if (timeSinceLastParole > mAppIdleParoleIntervalMillis) {
                     if (DEBUG) Slog.d(TAG, "Crossed default parole interval");
                     setAppIdleParoled(true);
-                    // Make sure it ends at some point
-                    postParoleEndTimeout();
                 } else {
                     if (DEBUG) Slog.d(TAG, "Not long enough to go to parole");
                     postNextParoleTimeout();
@@ -492,7 +492,6 @@ public class UsageStatsService extends SystemService implements
             if (!deviceIdle
                     && timeSinceLastParole >= mAppIdleParoleIntervalMillis) {
                 if (DEBUG) Slog.i(TAG, "Bringing idle apps out of inactive state due to deviceIdleMode=false");
-                postNextParoleTimeout();
                 setAppIdleParoled(true);
             } else if (deviceIdle) {
                 if (DEBUG) Slog.i(TAG, "Device idle, back to prison");