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

Commit 4d80a870 authored by Massimo Carli's avatar Massimo Carli Committed by Automerger Merge Worker
Browse files

Merge "Allow DiskRead ThreadPolicy in LetterboxConfigurationPersister" into...

Merge "Allow DiskRead ThreadPolicy in LetterboxConfigurationPersister" into udc-dev am: 99eba6f0 am: 8620b356

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23750905



Change-Id: I0d91d72bdd2bbfecc404fc74c5073c803ee7e410
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 62f83017 8620b356
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.server.wm;

import static android.os.StrictMode.setThreadPolicy;

import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;

@@ -23,6 +25,8 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.os.Environment;
import android.os.StrictMode;
import android.os.StrictMode.ThreadPolicy;
import android.util.AtomicFile;
import android.util.Slog;

@@ -125,7 +129,7 @@ class LetterboxConfigurationPersister {
        final File prefFiles = new File(configFolder, LETTERBOX_CONFIGURATION_FILENAME);
        mConfigurationFile = new AtomicFile(prefFiles);
        mPersisterQueue = persisterQueue;
        readCurrentConfiguration();
        runWithDiskReadsThreadPolicy(this::readCurrentConfiguration);
    }

    /**
@@ -275,6 +279,20 @@ class LetterboxConfigurationPersister {
        }
    }

    // The LetterboxConfigurationDeviceConfig needs to access the
    // file with the current reachability position once when the
    // device boots. Because DisplayThread uses allowIo=false
    // accessing a file triggers a DiskReadViolation.
    // Here we use StrictMode to allow the current thread to read
    // the AtomicFile once in the current thread restoring the
    // original ThreadPolicy after that.
    private void runWithDiskReadsThreadPolicy(Runnable runnable) {
        final ThreadPolicy currentPolicy = StrictMode.getThreadPolicy();
        setThreadPolicy(new ThreadPolicy.Builder().permitDiskReads().build());
        runnable.run();
        setThreadPolicy(currentPolicy);
    }

    private static class UpdateValuesCommand implements
            PersisterQueue.WriteQueueItem<UpdateValuesCommand> {