Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 348c8977 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Use simpler delayed writing logic in RoleUserState."

parents 71c9bea9 bc543085
Loading
Loading
Loading
Loading
+7 −21
Original line number Original line Diff line number Diff line
@@ -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";
@@ -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;
@@ -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
@@ -324,6 +308,8 @@ public class RoleUserState {
                return;
                return;
            }
            }


            mWriteScheduled = false;

            version = mVersion;
            version = mVersion;
            packagesHash = mPackagesHash;
            packagesHash = mPackagesHash;
            roles = snapshotRolesLocked();
            roles = snapshotRolesLocked();