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

Commit 3d2d2fc4 authored by Tim Murray's avatar Tim Murray Committed by Android (Google) Code Review
Browse files

Merge "SharedPreferences: replace per-load threads with single thread" into udc-qpr-dev

parents d5237b86 b8dd2652
Loading
Loading
Loading
Loading
+23 −5
Original line number Diff line number Diff line
@@ -55,6 +55,11 @@ import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

final class SharedPreferencesImpl implements SharedPreferences {
    private static final String TAG = "SharedPreferencesImpl";
@@ -119,6 +124,10 @@ final class SharedPreferencesImpl implements SharedPreferences {
    private final ExponentiallyBucketedHistogram mSyncTimes = new ExponentiallyBucketedHistogram(16);
    private int mNumSync = 0;

    private static final ThreadPoolExecutor sLoadExecutor = new ThreadPoolExecutor(0, 1, 10L,
            TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(),
            new SharedPreferencesThreadFactory());

    @UnsupportedAppUsage
    SharedPreferencesImpl(File file, int mode) {
        mFile = file;
@@ -135,11 +144,10 @@ final class SharedPreferencesImpl implements SharedPreferences {
        synchronized (mLock) {
            mLoaded = false;
        }
        new Thread("SharedPreferencesImpl-load") {
            public void run() {

        sLoadExecutor.execute(() -> {
            loadFromDisk();
            }
        }.start();
        });
    }

    private void loadFromDisk() {
@@ -874,4 +882,14 @@ final class SharedPreferencesImpl implements SharedPreferences {
        }
        mcr.setDiskWriteResult(false, false);
    }


    private static final class SharedPreferencesThreadFactory implements ThreadFactory {
        @Override
        public Thread newThread(Runnable runnable) {
            Thread thread = Executors.defaultThreadFactory().newThread(runnable);
            thread.setName("SharedPreferences");
            return thread;
        }
    }
}