Loading services/core/java/com/android/server/role/RoleUserState.java +7 −21 Original line number Original line Diff line number Diff line Loading @@ -62,7 +62,6 @@ public class RoleUserState { private static final String ROLES_FILE_NAME = "roles.xml"; private static final String ROLES_FILE_NAME = "roles.xml"; private static final long WRITE_DELAY_MILLIS = 200; 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_ROLES = "roles"; private static final String TAG_ROLE = "role"; private static final String TAG_ROLE = "role"; Loading Loading @@ -92,7 +91,7 @@ public class RoleUserState { private ArrayMap<String, ArraySet<String>> mRoles = new ArrayMap<>(); private ArrayMap<String, ArraySet<String>> mRoles = new ArrayMap<>(); @GuardedBy("mLock") @GuardedBy("mLock") private long mWritePendingSinceMillis; private boolean mWriteScheduled; @GuardedBy("mLock") @GuardedBy("mLock") private boolean mDestroyed; private boolean mDestroyed; Loading Loading @@ -292,26 +291,11 @@ public class RoleUserState { private void scheduleWriteFileLocked() { private void scheduleWriteFileLocked() { throwIfDestroyedLocked(); throwIfDestroyedLocked(); long currentTimeMillis = System.currentTimeMillis(); if (!mWriteScheduled) { long writeDelayMillis; mWriteHandler.sendMessageDelayed(PooledLambda.obtainMessage(RoleUserState::writeFile, if (!mWriteHandler.hasMessagesOrCallbacks()) { this), WRITE_DELAY_MILLIS); mWritePendingSinceMillis = currentTimeMillis; mWriteScheduled = true; 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); } } } mWriteHandler.sendMessageDelayed(PooledLambda.obtainMessage(RoleUserState::writeFile, this), writeDelayMillis); Slog.i(LOG_TAG, "Scheduled writing roles.xml"); } } @WorkerThread @WorkerThread Loading @@ -324,6 +308,8 @@ public class RoleUserState { return; return; } } mWriteScheduled = false; version = mVersion; version = mVersion; packagesHash = mPackagesHash; packagesHash = mPackagesHash; roles = snapshotRolesLocked(); roles = snapshotRolesLocked(); Loading Loading
services/core/java/com/android/server/role/RoleUserState.java +7 −21 Original line number Original line Diff line number Diff line Loading @@ -62,7 +62,6 @@ public class RoleUserState { private static final String ROLES_FILE_NAME = "roles.xml"; private static final String ROLES_FILE_NAME = "roles.xml"; private static final long WRITE_DELAY_MILLIS = 200; 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_ROLES = "roles"; private static final String TAG_ROLE = "role"; private static final String TAG_ROLE = "role"; Loading Loading @@ -92,7 +91,7 @@ public class RoleUserState { private ArrayMap<String, ArraySet<String>> mRoles = new ArrayMap<>(); private ArrayMap<String, ArraySet<String>> mRoles = new ArrayMap<>(); @GuardedBy("mLock") @GuardedBy("mLock") private long mWritePendingSinceMillis; private boolean mWriteScheduled; @GuardedBy("mLock") @GuardedBy("mLock") private boolean mDestroyed; private boolean mDestroyed; Loading Loading @@ -292,26 +291,11 @@ public class RoleUserState { private void scheduleWriteFileLocked() { private void scheduleWriteFileLocked() { throwIfDestroyedLocked(); throwIfDestroyedLocked(); long currentTimeMillis = System.currentTimeMillis(); if (!mWriteScheduled) { long writeDelayMillis; mWriteHandler.sendMessageDelayed(PooledLambda.obtainMessage(RoleUserState::writeFile, if (!mWriteHandler.hasMessagesOrCallbacks()) { this), WRITE_DELAY_MILLIS); mWritePendingSinceMillis = currentTimeMillis; mWriteScheduled = true; 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); } } } mWriteHandler.sendMessageDelayed(PooledLambda.obtainMessage(RoleUserState::writeFile, this), writeDelayMillis); Slog.i(LOG_TAG, "Scheduled writing roles.xml"); } } @WorkerThread @WorkerThread Loading @@ -324,6 +308,8 @@ public class RoleUserState { return; return; } } mWriteScheduled = false; version = mVersion; version = mVersion; packagesHash = mPackagesHash; packagesHash = mPackagesHash; roles = snapshotRolesLocked(); roles = snapshotRolesLocked(); Loading