Merge "Allow DiskRead ThreadPolicy in LetterboxConfigurationPersister" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
99eba6f039
@@ -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> {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user