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

Commit b229a7c0 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: I2abb2155493c3f08da38a8499d7413d5c8903b7e
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 00f54eeb 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> {