diff options
Diffstat (limited to 'services/backup/java')
-rw-r--r-- | services/backup/java/com/android/server/backup/BackupManagerConstants.java | 14 | ||||
-rw-r--r-- | services/backup/java/com/android/server/backup/UserBackupManagerService.java | 17 |
2 files changed, 24 insertions, 7 deletions
diff --git a/services/backup/java/com/android/server/backup/BackupManagerConstants.java b/services/backup/java/com/android/server/backup/BackupManagerConstants.java index 4bd987a17447..b753d01562ca 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerConstants.java +++ b/services/backup/java/com/android/server/backup/BackupManagerConstants.java @@ -72,6 +72,9 @@ public class BackupManagerConstants extends KeyValueSettingObserver { public static final String BACKUP_FINISHED_NOTIFICATION_RECEIVERS = "backup_finished_notification_receivers"; + @VisibleForTesting + public static final String WAKELOCK_TIMEOUT_MILLIS = "wakelock_timeout_millis"; + // Hard coded default values. @VisibleForTesting public static final long DEFAULT_KEY_VALUE_BACKUP_INTERVAL_MILLISECONDS = @@ -97,6 +100,9 @@ public class BackupManagerConstants extends KeyValueSettingObserver { @VisibleForTesting public static final String DEFAULT_BACKUP_FINISHED_NOTIFICATION_RECEIVERS = ""; + @VisibleForTesting + public static final long DEFAULT_WAKELOCK_TIMEOUT_MILLIS = 30 * 60 * 1000; // 30 minutes + // Backup manager constants. private long mKeyValueBackupIntervalMilliseconds; private long mKeyValueBackupFuzzMilliseconds; @@ -106,6 +112,7 @@ public class BackupManagerConstants extends KeyValueSettingObserver { private boolean mFullBackupRequireCharging; private int mFullBackupRequiredNetworkType; private String[] mBackupFinishedNotificationReceivers; + private long mWakelockTimeoutMillis; public BackupManagerConstants(Handler handler, ContentResolver resolver) { super(handler, resolver, Settings.Secure.getUriFor(SETTING)); @@ -152,6 +159,8 @@ public class BackupManagerConstants extends KeyValueSettingObserver { } else { mBackupFinishedNotificationReceivers = backupFinishedNotificationReceivers.split(":"); } + mWakelockTimeoutMillis = parser.getLong(WAKELOCK_TIMEOUT_MILLIS, + DEFAULT_WAKELOCK_TIMEOUT_MILLIS); } // The following are access methods for the individual parameters. @@ -235,4 +244,9 @@ public class BackupManagerConstants extends KeyValueSettingObserver { } return mBackupFinishedNotificationReceivers; } + + public synchronized long getWakelockTimeoutMillis() { + Slog.v(TAG, "wakelock timeout: " + mWakelockTimeoutMillis); + return mWakelockTimeoutMillis; + } } diff --git a/services/backup/java/com/android/server/backup/UserBackupManagerService.java b/services/backup/java/com/android/server/backup/UserBackupManagerService.java index 549f8fa77b53..ac1f50f85d64 100644 --- a/services/backup/java/com/android/server/backup/UserBackupManagerService.java +++ b/services/backup/java/com/android/server/backup/UserBackupManagerService.java @@ -181,11 +181,14 @@ public class UserBackupManagerService { public static class BackupWakeLock { private final PowerManager.WakeLock mPowerManagerWakeLock; private boolean mHasQuit = false; - private int mUserId; + private final int mUserId; + private final BackupManagerConstants mBackupManagerConstants; - public BackupWakeLock(PowerManager.WakeLock powerManagerWakeLock, int userId) { + public BackupWakeLock(PowerManager.WakeLock powerManagerWakeLock, int userId, + BackupManagerConstants backupManagerConstants) { mPowerManagerWakeLock = powerManagerWakeLock; mUserId = userId; + mBackupManagerConstants = backupManagerConstants; } /** Acquires the {@link PowerManager.WakeLock} if hasn't been quit. */ @@ -199,7 +202,9 @@ public class UserBackupManagerService { + mPowerManagerWakeLock.getTag())); return; } - mPowerManagerWakeLock.acquire(); + // Set a timeout for the wakelock. Otherwise if we fail internally and never call + // release(), the device might stay awake and drain battery indefinitely. + mPowerManagerWakeLock.acquire(mBackupManagerConstants.getWakelockTimeoutMillis()); Slog.v( TAG, addUserIdToLogMessage( @@ -674,10 +679,8 @@ public class UserBackupManagerService { mBackupPreferences = new UserBackupPreferences(mContext, mBaseStateDir); // Power management - mWakelock = new BackupWakeLock( - mPowerManager.newWakeLock( - PowerManager.PARTIAL_WAKE_LOCK, - "*backup*-" + userId + "-" + userBackupThread.getThreadId()), userId); + mWakelock = new BackupWakeLock(mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, + "*backup*-" + userId + "-" + userBackupThread.getThreadId()), userId, mConstants); // Set up the various sorts of package tracking we do mFullBackupScheduleFile = new File(mBaseStateDir, "fb-schedule"); |