From 391ada1150a861e899dcde8558e9efd4c5efc981 Mon Sep 17 00:00:00 2001
From: Callum Prentice <callum@gmail.com>
Date: Tue, 27 Oct 2020 13:53:17 -0700
Subject: [PATCH] Fix for meta issue: SL-14211 Determine optimum cache size for
 VFS replacement cache

---
 indra/llfilesystem/lldiskcache.h        |  4 ++--
 indra/newview/app_settings/settings.xml |  8 ++++----
 indra/newview/llappviewer.cpp           | 10 ++++++++--
 3 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/indra/llfilesystem/lldiskcache.h b/indra/llfilesystem/lldiskcache.h
index b25eac85387..997884da319 100644
--- a/indra/llfilesystem/lldiskcache.h
+++ b/indra/llfilesystem/lldiskcache.h
@@ -83,8 +83,8 @@ class LLDiskCache :
                      */
                     const std::string cache_dir,
                     /**
-                     * The maximum size of the cache in bytes - Defined by
-                     * the setting at 'DiskCacheMaxSizeMB' (* 1024 * 1024)
+                     * The maximum size of the cache in bytes - Based on the
+                     * setting at 'CacheSize' and 'DiskCachePercentOfTotal'
                      */
                     const int max_size_bytes,
                     /**
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index fc1437148a0..142a3098ec3 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1362,16 +1362,16 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>DiskCacheMaxSizeMB</key>
+    <key>DiskCachePercentOfTotal</key>
     <map>
       <key>Comment</key>
-      <string>The maximum number of MB to use for the new disk cache</string>
+      <string>The percent of total cache size (defined by CacheSize) to use for the disk cache</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
-      <string>U32</string>
+      <string>F32</string>
       <key>Value</key>
-      <integer>50</integer>
+      <integer>20.0</integer>
     </map>
     <key>DiskCacheDirName</key>
     <map>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 9e508600642..20ca4322792 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -4063,10 +4063,16 @@ bool LLAppViewer::initCache()
 
 	// initialize the new disk cache using saved settings
 	const std::string cache_dir_name = gSavedSettings.getString("DiskCacheDirName");
-	const unsigned int cache_max_bytes = gSavedSettings.getU32("DiskCacheMaxSizeMB") * 1024 * 1024;
+
+    // note that the maximum size of this cache is defined as a percentage of the 
+    // total cache size - the 'CacheSize' pref - for all caches. 
+    const unsigned int cache_total_size_mb = gSavedSettings.getU32("CacheSize");
+    const double disk_cache_percent = gSavedSettings.getF32("DiskCachePercentOfTotal");
+    const unsigned int disk_cache_mb = cache_total_size_mb * disk_cache_percent / 100;
+    const unsigned int disk_cache_bytes = disk_cache_mb * 1024 * 1024;
 	const bool enable_cache_debug_info = gSavedSettings.getBOOL("EnableDiskCacheDebugInfo");
 	const std::string cache_dir = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, cache_dir_name);
-	LLDiskCache::initParamSingleton(cache_dir, cache_max_bytes, enable_cache_debug_info);
+	LLDiskCache::initParamSingleton(cache_dir, disk_cache_bytes, enable_cache_debug_info);
 
 	bool texture_cache_mismatch = false;
 	if (gSavedSettings.getS32("LocalCacheVersion") != LLAppViewer::getTextureCacheVersion())
-- 
GitLab