From 3952caa992edb7e67ea4753040476c1b5fd804cc Mon Sep 17 00:00:00 2001 From: Zim Date: Mon, 14 Dec 2020 11:51:54 +0000 Subject: [PATCH] Fix transcode_optimize flags The optimize flag depended on transcode_enabled (sysprop only, ignoring device_config) flag to take effect. Now, we removed the 'optimize' flag and rely on a new non-persistent sysprop that says if transcode was enabled on the current boot. This means that a reboot is required for 'optimizations' to take effect, right after enabling/disabling transcode. This is anyways a better trade-off than ignoring the device_config transcode_enabled flag entirely. Test: Manual Bug: 170488060 Change-Id: I77bbc30f9fae2cfc0085c32028859fdbbc9aaed7 --- core/java/android/os/FileUtils.java | 4 +--- .../android/server/StorageManagerService.java | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/core/java/android/os/FileUtils.java b/core/java/android/os/FileUtils.java index 379d6e6f5dfe3..92fe98ca1044e 100644 --- a/core/java/android/os/FileUtils.java +++ b/core/java/android/os/FileUtils.java @@ -1436,9 +1436,7 @@ public final class FileUtils { public static FileDescriptor convertToModernFd(FileDescriptor fd) { try { Context context = AppGlobals.getInitialApplication(); - // TODO(b/169327180): Consider device config. - if (!SystemProperties.getBoolean("persist.sys.fuse.transcode_enabled", false) - || !SystemProperties.getBoolean("persist.sys.fuse.transcode_optimize", true) + if (!SystemProperties.getBoolean("sys.fuse.transcode_enabled", false) || UserHandle.getAppId(Process.myUid()) == getMediaProviderAppId(context)) { // If transcode is enabled we optimize by default, unless explicitly disabled. // Never convert modern fd for MediaProvider, because this requires diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 730c64e6968c1..7abaf4716a395 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -108,6 +108,7 @@ import android.os.storage.StorageManagerInternal; import android.os.storage.StorageVolume; import android.os.storage.VolumeInfo; import android.os.storage.VolumeRecord; +import android.provider.DeviceConfig; import android.provider.DocumentsContract; import android.provider.Downloads; import android.provider.MediaStore; @@ -879,6 +880,8 @@ class StorageManagerService extends IStorageManager.Stub com.android.internal.R.bool.config_zramWriteback)) { ZramWriteback.scheduleZramWriteback(mContext); } + + updateTranscodeEnabled(); } /** @@ -910,6 +913,21 @@ class StorageManagerService extends IStorageManager.Stub } } + private void updateTranscodeEnabled() { + // See MediaProvider TranscodeHelper#getBooleanProperty for more information + boolean transcodeEnabled = false; + boolean defaultValue = true; + + if (SystemProperties.getBoolean("persist.sys.fuse.transcode_user_control", false)) { + transcodeEnabled = SystemProperties.getBoolean("persist.sys.fuse.transcode_enabled", + defaultValue); + } else { + transcodeEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_STORAGE_NATIVE_BOOT, + "transcode_enabled", defaultValue); + } + SystemProperties.set("sys.fuse.transcode_enabled", String.valueOf(transcodeEnabled)); + } + /** * MediaProvider has a ton of code that makes assumptions about storage * paths never changing, so we outright kill them to pick up new state.