From bc5430850ecd0a0c8ed7f73981f614218b54e6e9 Mon Sep 17 00:00:00 2001 From: Hai Zhang Date: Thu, 6 Dec 2018 23:25:43 -0800 Subject: [PATCH] Use simpler delayed writing logic in RoleUserState. This change makes RoleUserState to use a simpler delayed writing logic. Bug: 110557011 Test: manual Change-Id: I29d848263af36bf632a1bb48659520b66e8c4492 --- .../android/server/role/RoleUserState.java | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/services/core/java/com/android/server/role/RoleUserState.java b/services/core/java/com/android/server/role/RoleUserState.java index 81adb1180f1a9..ec614a451f545 100644 --- a/services/core/java/com/android/server/role/RoleUserState.java +++ b/services/core/java/com/android/server/role/RoleUserState.java @@ -62,7 +62,6 @@ public class RoleUserState { private static final String ROLES_FILE_NAME = "roles.xml"; private static final long WRITE_DELAY_MILLIS = 200; - private static final long MAX_WRITE_DELAY_MILLIS = 2000; private static final String TAG_ROLES = "roles"; private static final String TAG_ROLE = "role"; @@ -92,7 +91,7 @@ public class RoleUserState { private ArrayMap> mRoles = new ArrayMap<>(); @GuardedBy("mLock") - private long mWritePendingSinceMillis; + private boolean mWriteScheduled; @GuardedBy("mLock") private boolean mDestroyed; @@ -292,26 +291,11 @@ public class RoleUserState { private void scheduleWriteFileLocked() { throwIfDestroyedLocked(); - long currentTimeMillis = System.currentTimeMillis(); - long writeDelayMillis; - if (!mWriteHandler.hasMessagesOrCallbacks()) { - mWritePendingSinceMillis = currentTimeMillis; - writeDelayMillis = WRITE_DELAY_MILLIS; - } else { - mWriteHandler.removeCallbacksAndMessages(null); - long writePendingDurationMillis = currentTimeMillis - mWritePendingSinceMillis; - if (writePendingDurationMillis >= MAX_WRITE_DELAY_MILLIS) { - writeDelayMillis = 0; - } else { - long maxWriteDelayMillis = Math.max(MAX_WRITE_DELAY_MILLIS - - writePendingDurationMillis, 0); - writeDelayMillis = Math.min(WRITE_DELAY_MILLIS, maxWriteDelayMillis); - } + if (!mWriteScheduled) { + mWriteHandler.sendMessageDelayed(PooledLambda.obtainMessage(RoleUserState::writeFile, + this), WRITE_DELAY_MILLIS); + mWriteScheduled = true; } - - mWriteHandler.sendMessageDelayed(PooledLambda.obtainMessage(RoleUserState::writeFile, this), - writeDelayMillis); - Slog.i(LOG_TAG, "Scheduled writing roles.xml"); } @WorkerThread @@ -324,6 +308,8 @@ public class RoleUserState { return; } + mWriteScheduled = false; + version = mVersion; packagesHash = mPackagesHash; roles = snapshotRolesLocked();