From 8e5f360e2c480381ab74302628059d6be979685c Mon Sep 17 00:00:00 2001 From: Utkarsh Dalal Date: Sat, 25 Jul 2026 21:34:29 -0400 Subject: [PATCH 1/3] Change external location to speed up external boots --- .../app/gamenative/service/DownloadService.kt | 54 ++++++++++++++++++- .../screen/settings/SettingsGroupInterface.kt | 10 ++-- .../java/app/gamenative/utils/StorageUtils.kt | 26 +++++++++ 3 files changed, 84 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/app/gamenative/service/DownloadService.kt b/app/src/main/java/app/gamenative/service/DownloadService.kt index 511f9e55f4..1024003f39 100644 --- a/app/src/main/java/app/gamenative/service/DownloadService.kt +++ b/app/src/main/java/app/gamenative/service/DownloadService.kt @@ -2,6 +2,7 @@ package app.gamenative.service import android.content.Context import android.os.Environment +import app.gamenative.PrefManager import app.gamenative.utils.StorageUtils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -37,10 +38,59 @@ object DownloadService { baseExternalAppDirPath = extFiles?.parentFile?.path ?: "" val sm = context.getSystemService(android.os.storage.StorageManager::class.java) - externalVolumePaths = StorageUtils.getAllExternalFilesDirs(context) + val appFilesDirs = StorageUtils.getAllExternalFilesDirs(context) .filter { Environment.getExternalStorageState(it) == Environment.MEDIA_MOUNTED } .filter { sm?.getStorageVolume(it)?.isPrimary != true } - .map { it.absolutePath } + // both layouts per volume: legacy Android/data (existing installs) + public root (new installs) + externalVolumePaths = appFilesDirs + .flatMap { dir -> listOfNotNull(dir.absolutePath, StorageUtils.publicInstallRoot(dir)?.absolutePath) } + .distinct() + + migrateExternalStoragePath() + } + + // Android/data paths pay a ~1000x FUSE metadata penalty (MediaProvider disables kernel + // caching there); repoint the install pref at the public root so new installs avoid it + private fun migrateExternalStoragePath() { + val pref = PrefManager.externalStoragePath + if (pref.isBlank()) return + val public: File + val legacy: File? + if (pref.contains("/Android/data/")) { + legacy = File(pref) + public = StorageUtils.publicInstallRoot(legacy) ?: return + if (!StorageUtils.ensureInstallRoot(public)) return + Timber.i("Migrating external install root from $pref to ${public.absolutePath}") + PrefManager.externalStoragePath = public.absolutePath + } else { + // pref already migrated; legacy content may still need moving + public = File(pref) + legacy = externalVolumePaths.map(::File).firstOrNull { + it.absolutePath.contains("/Android/data/") && + StorageUtils.publicInstallRoot(it)?.absolutePath == public.absolutePath + } + if (legacy == null || !StorageUtils.ensureInstallRoot(public)) return + } + moveExternalContent(legacy, public) + } + + // rename(2) only — same-volume moves are instant metadata ops even for huge libraries; + // on failure the game stays in place and the dual-root scan keeps finding it + private fun moveExternalContent(legacyRoot: File, publicRoot: File) { + for (name in listOf("Steam", "GOG", "Epic", "Amazon")) { + val src = File(legacyRoot, name) + val dst = File(publicRoot, name) + if (!src.isDirectory) continue + if (dst.exists()) { + Timber.w("Not moving $src: $dst already exists") + continue + } + if (src.renameTo(dst)) { + Timber.i("Moved $src to $dst") + } else { + Timber.w("Could not move $src to $dst; leaving in place") + } + } } @Synchronized diff --git a/app/src/main/java/app/gamenative/ui/screen/settings/SettingsGroupInterface.kt b/app/src/main/java/app/gamenative/ui/screen/settings/SettingsGroupInterface.kt index b8175a6ed3..5a992888e9 100644 --- a/app/src/main/java/app/gamenative/ui/screen/settings/SettingsGroupInterface.kt +++ b/app/src/main/java/app/gamenative/ui/screen/settings/SettingsGroupInterface.kt @@ -561,7 +561,7 @@ fun SettingsGroupInterface( useExternalStorage = it PrefManager.useExternalStorage = it if (it && dirs.isNotEmpty()) { - PrefManager.externalStoragePath = dirs[0].absolutePath + PrefManager.externalStoragePath = StorageUtils.preferredInstallRoot(dirs[0]) } }, ) @@ -569,8 +569,10 @@ fun SettingsGroupInterface( // Currently selected item var selectedIndex by rememberSaveable { mutableStateOf( - dirs.indexOfFirst { it.absolutePath == PrefManager.externalStoragePath } - .takeIf { it >= 0 } ?: 0, + dirs.indexOfFirst { dir -> + dir.absolutePath == PrefManager.externalStoragePath || + StorageUtils.publicInstallRoot(dir)?.absolutePath == PrefManager.externalStoragePath + }.takeIf { it >= 0 } ?: 0, ) } SettingsListDropdown( @@ -579,7 +581,7 @@ fun SettingsGroupInterface( value = selectedIndex, onItemSelected = { idx -> selectedIndex = idx - PrefManager.externalStoragePath = dirs[idx].absolutePath + PrefManager.externalStoragePath = StorageUtils.preferredInstallRoot(dirs[idx]) }, colors = settingsTileColorsAlt(), ) diff --git a/app/src/main/java/app/gamenative/utils/StorageUtils.kt b/app/src/main/java/app/gamenative/utils/StorageUtils.kt index 4bade589e3..8787245226 100644 --- a/app/src/main/java/app/gamenative/utils/StorageUtils.kt +++ b/app/src/main/java/app/gamenative/utils/StorageUtils.kt @@ -98,6 +98,32 @@ object StorageUtils { return result } + private const val PUBLIC_INSTALL_DIR_NAME = "GameNative" + + /** + * Maps an app-specific dir (/Android/data//files) to a public install root + * (/GameNative). MediaProvider disables FUSE kernel caching under Android/data, + * making per-open metadata ops ~1000x slower there; public dirs get normal dcache treatment. + */ + fun publicInstallRoot(appFilesDir: File): File? { + val path = appFilesDir.absolutePath + val idx = path.indexOf("/Android/data/") + if (idx <= 0) return null + return File(path.substring(0, idx), PUBLIC_INSTALL_DIR_NAME) + } + + fun ensureInstallRoot(dir: File): Boolean { + if (!dir.isDirectory && !dir.mkdirs()) return false + runCatching { File(dir, ".nomedia").createNewFile() } + return true + } + + fun preferredInstallRoot(appFilesDir: File): String { + val public = publicInstallRoot(appFilesDir) + if (public != null && ensureInstallRoot(public)) return public.absolutePath + return appFilesDir.absolutePath + } + /** * Gets all app-specific external files directories, using StorageManager as a fallback * for cases where context.getExternalFilesDirs(null) might return null or incomplete results From 3c7fd274d97cb2e6e0963097bb942d9ea7b335cc Mon Sep 17 00:00:00 2001 From: Utkarsh Dalal Date: Sun, 26 Jul 2026 18:20:28 -0400 Subject: [PATCH 2/3] Updated shims for external storage --- app/src/main/assets/redirect.tzst | Bin 17041 -> 33496 bytes .../ui/screen/xserver/XServerScreen.kt | 6 ++++++ .../xenvironment/ImageFsInstaller.java | 2 +- .../modern/assets/libredirect-bionic-wx.so | Bin 41528 -> 53800 bytes 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/assets/redirect.tzst b/app/src/main/assets/redirect.tzst index 3e9bc47bd1309290266bcda7009099e84e073131..dccc7e590ac872a43d9fe2f1105ef6d355f54718 100644 GIT binary patch literal 33496 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 ANB{r; diff --git a/app/src/main/java/app/gamenative/ui/screen/xserver/XServerScreen.kt b/app/src/main/java/app/gamenative/ui/screen/xserver/XServerScreen.kt index ee2220c9ac..0266fd28df 100644 --- a/app/src/main/java/app/gamenative/ui/screen/xserver/XServerScreen.kt +++ b/app/src/main/java/app/gamenative/ui/screen/xserver/XServerScreen.kt @@ -3658,6 +3658,12 @@ private fun setupXEnvironment( envVars.remove("DXVK_FRAME_RATE") envVars.remove("VKD3D_FRAME_RATE") if (!envVars.has("WINEESYNC")) envVars.put("WINEESYNC", "1") + + val ffpGameDir = runCatching { + File(SteamService.getAppDirPath(ContainerUtils.extractGameIdFromContainerId(appId))).canonicalFile.path + }.getOrDefault("") + if (ffpGameDir.startsWith("/storage/")) envVars.put("FFP_ENABLE", "1") + val graphicsDriverConfig = KeyValueSet(container.getGraphicsDriverConfig()) if (graphicsDriverConfig.get("version").lowercase(Locale.getDefault()).contains("gen8")) { var tuDebug = envVars.get("TU_DEBUG") diff --git a/app/src/main/java/com/winlator/xenvironment/ImageFsInstaller.java b/app/src/main/java/com/winlator/xenvironment/ImageFsInstaller.java index a21237db97..23807b0f4c 100644 --- a/app/src/main/java/com/winlator/xenvironment/ImageFsInstaller.java +++ b/app/src/main/java/com/winlator/xenvironment/ImageFsInstaller.java @@ -43,7 +43,7 @@ import java.util.concurrent.atomic.AtomicLong; public abstract class ImageFsInstaller { - public static final byte LATEST_VERSION = 28; + public static final byte LATEST_VERSION = 29; private static void resetContainerImgVersions(Context context) { ContainerManager manager = new ContainerManager(context); diff --git a/app/src/modern/assets/libredirect-bionic-wx.so b/app/src/modern/assets/libredirect-bionic-wx.so index 5722cc60526e3db35669a70cf3f803f09569fc29..b4184771cc99f6d7ad52d8488d2afcf69476b81e 100755 GIT binary patch literal 53800 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

O#}ZPl+_jH|ygkD{t9x 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 Date: Sun, 26 Jul 2026 18:42:25 -0400 Subject: [PATCH 3/3] Migrate external storage on launch of game --- .../app/gamenative/service/DownloadService.kt | 38 ++----------------- .../app/gamenative/utils/ContainerUtils.kt | 8 ++-- .../java/app/gamenative/utils/StorageUtils.kt | 23 +++++++++++ 3 files changed, 31 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/app/gamenative/service/DownloadService.kt b/app/src/main/java/app/gamenative/service/DownloadService.kt index 1024003f39..c05e72541d 100644 --- a/app/src/main/java/app/gamenative/service/DownloadService.kt +++ b/app/src/main/java/app/gamenative/service/DownloadService.kt @@ -53,43 +53,11 @@ object DownloadService { // caching there); repoint the install pref at the public root so new installs avoid it private fun migrateExternalStoragePath() { val pref = PrefManager.externalStoragePath - if (pref.isBlank()) return - val public: File - val legacy: File? - if (pref.contains("/Android/data/")) { - legacy = File(pref) - public = StorageUtils.publicInstallRoot(legacy) ?: return - if (!StorageUtils.ensureInstallRoot(public)) return + if (pref.isBlank() || !pref.contains("/Android/data/")) return + val public = StorageUtils.publicInstallRoot(File(pref)) ?: return + if (StorageUtils.ensureInstallRoot(public)) { Timber.i("Migrating external install root from $pref to ${public.absolutePath}") PrefManager.externalStoragePath = public.absolutePath - } else { - // pref already migrated; legacy content may still need moving - public = File(pref) - legacy = externalVolumePaths.map(::File).firstOrNull { - it.absolutePath.contains("/Android/data/") && - StorageUtils.publicInstallRoot(it)?.absolutePath == public.absolutePath - } - if (legacy == null || !StorageUtils.ensureInstallRoot(public)) return - } - moveExternalContent(legacy, public) - } - - // rename(2) only — same-volume moves are instant metadata ops even for huge libraries; - // on failure the game stays in place and the dual-root scan keeps finding it - private fun moveExternalContent(legacyRoot: File, publicRoot: File) { - for (name in listOf("Steam", "GOG", "Epic", "Amazon")) { - val src = File(legacyRoot, name) - val dst = File(publicRoot, name) - if (!src.isDirectory) continue - if (dst.exists()) { - Timber.w("Not moving $src: $dst already exists") - continue - } - if (src.renameTo(dst)) { - Timber.i("Moved $src to $dst") - } else { - Timber.w("Could not move $src to $dst; leaving in place") - } } } diff --git a/app/src/main/java/app/gamenative/utils/ContainerUtils.kt b/app/src/main/java/app/gamenative/utils/ContainerUtils.kt index 476fdbb062..bfca448e3a 100644 --- a/app/src/main/java/app/gamenative/utils/ContainerUtils.kt +++ b/app/src/main/java/app/gamenative/utils/ContainerUtils.kt @@ -1041,11 +1041,13 @@ object ContainerUtils { } } - if (gameFolderPath != null) { + val resolvedGameFolderPath = StorageUtils.migrateLegacyGameDir(gameFolderPath) + + if (resolvedGameFolderPath != null) { // Check if A: drive is already mapped to the correct path var hasCorrectADrive = false for (drive in Container.drivesIterator(container.drives)) { - if (drive[0] == "A" && drive[1] == gameFolderPath) { + if (drive[0] == "A" && drive[1] == resolvedGameFolderPath) { hasCorrectADrive = true break } @@ -1056,7 +1058,7 @@ object ContainerUtils { val currentDrives = container.drives // Rebuild drives string, excluding existing A: drive and adding new one val drivesBuilder = StringBuilder() - drivesBuilder.append("A:$gameFolderPath") + drivesBuilder.append("A:$resolvedGameFolderPath") // Add all other drives (excluding A:) for (drive in Container.drivesIterator(currentDrives)) { diff --git a/app/src/main/java/app/gamenative/utils/StorageUtils.kt b/app/src/main/java/app/gamenative/utils/StorageUtils.kt index 8787245226..b861c1eb9d 100644 --- a/app/src/main/java/app/gamenative/utils/StorageUtils.kt +++ b/app/src/main/java/app/gamenative/utils/StorageUtils.kt @@ -124,6 +124,29 @@ object StorageUtils { return appFilesDir.absolutePath } + fun migrateLegacyGameDir(path: String?): String? { + if (path.isNullOrBlank()) return path + val idx = path.indexOf("/Android/data/") + if (idx <= 0) return path + val filesIdx = path.indexOf("/files/", idx) + if (filesIdx < 0) return path + val legacyRoot = File(path.substring(0, filesIdx + "/files".length)) + val rel = path.substring(filesIdx + "/files/".length) + val src = File(path) + if (!src.isDirectory) return path + val publicRoot = publicInstallRoot(legacyRoot) ?: return path + val dst = File(publicRoot, rel) + if (dst.exists() || !ensureInstallRoot(publicRoot)) return path + dst.parentFile?.mkdirs() + return if (src.renameTo(dst)) { + Timber.i("Migrated game dir $path to ${dst.absolutePath}") + dst.absolutePath + } else { + Timber.w("Could not migrate $path; leaving in place") + path + } + } + /** * Gets all app-specific external files directories, using StorageManager as a fallback * for cases where context.getExternalFilesDirs(null) might return null or incomplete results