Merge "Allow DiskRead ThreadPolicy in LetterboxConfigurationPersister" into udc-dev

This commit is contained in:
Massimo Carli
2023-06-21 11:33:30 +00:00
committed by Android (Google) Code Review

View File

@@ -16,6 +16,8 @@
package com.android.server.wm; 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_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
@@ -23,6 +25,8 @@ import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.content.Context; import android.content.Context;
import android.os.Environment; import android.os.Environment;
import android.os.StrictMode;
import android.os.StrictMode.ThreadPolicy;
import android.util.AtomicFile; import android.util.AtomicFile;
import android.util.Slog; import android.util.Slog;
@@ -125,7 +129,7 @@ class LetterboxConfigurationPersister {
final File prefFiles = new File(configFolder, LETTERBOX_CONFIGURATION_FILENAME); final File prefFiles = new File(configFolder, LETTERBOX_CONFIGURATION_FILENAME);
mConfigurationFile = new AtomicFile(prefFiles); mConfigurationFile = new AtomicFile(prefFiles);
mPersisterQueue = persisterQueue; 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 private static class UpdateValuesCommand implements
PersisterQueue.WriteQueueItem<UpdateValuesCommand> { PersisterQueue.WriteQueueItem<UpdateValuesCommand> {