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

Commit 9233ddb4 authored by Alex Buynytskyy's avatar Alex Buynytskyy
Browse files

Further async settings write optimizations.

Bug: 252726591
Test: presubmit
Change-Id: Ie08130539adefa71f95bebab65c60ff30eb83d26
parent 7e72d299
Loading
Loading
Loading
Loading
+23 −11
Original line number Diff line number Diff line
@@ -5613,8 +5613,7 @@ public final class Settings implements Watchable, Snappable {

        // Low-priority handlers running on SystemBg thread.
        private final Handler mAsyncHandler = new MyHandler();
        private final Handler mPersistenceHandler = new Handler(
                BackgroundThread.getHandler().getLooper());
        private final Handler mPersistenceHandler = new PersistenceHandler();

        private final Object mLock = new Object();

@@ -5761,20 +5760,22 @@ public final class Settings implements Watchable, Snappable {
                @NonNull WatchedArrayMap<String, SharedUserSetting> sharedUsers,
                @Nullable Handler pmHandler, @NonNull Object pmLock,
                boolean sync) {
            final int version;
            final String fingerprint;
            final boolean isLegacyPermissionStateStale;
            synchronized (mLock) {
                mAsyncHandler.removeMessages(userId);
                mWriteScheduled.delete(userId);
            }

            Runnable writer = () -> {
                final int version;
                final String fingerprint;
                final boolean isLegacyPermissionStateStale;
                synchronized (mLock) {
                    version = mVersions.get(userId, INITIAL_VERSION);
                    fingerprint = mFingerprints.get(userId);
                    isLegacyPermissionStateStale = mIsLegacyPermissionStateStale;
                    mIsLegacyPermissionStateStale = false;
                }

            Runnable writer = () -> {
                final RuntimePermissionsState runtimePermissions;
                synchronized (pmLock) {
                    if (sync || isLegacyPermissionStateStale) {
@@ -5823,7 +5824,7 @@ public final class Settings implements Watchable, Snappable {
                }
                if (pmHandler != null) {
                    // Async version.
                    mPersistenceHandler.post(() -> writePendingStates());
                    mPersistenceHandler.obtainMessage(userId).sendToTarget();
                } else {
                    // Sync version.
                    writePendingStates();
@@ -6099,6 +6100,17 @@ public final class Settings implements Watchable, Snappable {
                }
            }
        }

        private final class PersistenceHandler extends Handler {
            PersistenceHandler() {
                super(BackgroundThread.getHandler().getLooper());
            }

            @Override
            public void handleMessage(Message message) {
                writePendingStates();
            }
        }
    }

    /**