diff --git a/indra/llinventory/llfoldertype.cpp b/indra/llinventory/llfoldertype.cpp
index 670405e9b55..ee554dfde0b 100644
--- a/indra/llinventory/llfoldertype.cpp
+++ b/indra/llinventory/llfoldertype.cpp
@@ -195,6 +195,24 @@ bool LLFolderType::lookupIsEnsembleType(EType folder_type)
folder_type <= FT_ENSEMBLE_END);
}
+// static
+bool LLFolderType::lookupIsEssentialType(EType folder_type)
+{
+ if (folder_type == FT_NONE)
+ {
+ return false;
+ }
+
+ if (folder_type == FT_ROOT_INVENTORY)
+ {
+ return true;
+ }
+
+ // Essential folders are those needed for basic viewer operation:
+ // singleton system folders and ensemble (outfit) folders
+ return lookupIsSingletonType(folder_type) || lookupIsEnsembleType(folder_type);
+}
+
// static
LLAssetType::EType LLFolderType::folderTypeToAssetType(LLFolderType::EType folder_type)
{
diff --git a/indra/llinventory/llfoldertype.h b/indra/llinventory/llfoldertype.h
index dd12693f660..8774014f171 100644
--- a/indra/llinventory/llfoldertype.h
+++ b/indra/llinventory/llfoldertype.h
@@ -109,6 +109,8 @@ class LL_COMMON_API LLFolderType
static bool lookupIsAutomaticType(EType folder_type);
static bool lookupIsSingletonType(EType folder_type);
static bool lookupIsEnsembleType(EType folder_type);
+ // Returns true if this folder type should be fully loaded during async inventory startup
+ static bool lookupIsEssentialType(EType folder_type);
static LLAssetType::EType folderTypeToAssetType(LLFolderType::EType folder_type);
static LLFolderType::EType assetTypeToFolderType(LLAssetType::EType asset_type);
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 861712fb58c..80d65f6c144 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -106,6 +106,7 @@ set(viewer_SOURCE_FILES
llappearancemgr.cpp
llappviewer.cpp
llappviewerlistener.cpp
+ llasyncinventoryskeletonloader.cpp
llattachmentsmgr.cpp
llaudiosourcevo.cpp
llautoreplace.cpp
@@ -785,6 +786,7 @@ set(viewer_HEADER_FILES
llappearancemgr.h
llappviewer.h
llappviewerlistener.h
+ llasyncinventoryskeletonloader.h
llattachmentsmgr.h
llaudiosourcevo.h
llautoreplace.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index c41a1e5b88e..482967d6a11 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3291,6 +3291,72 @@
Value
255
+ ForceAsyncInventorySkeleton
+
+ AsyncInventoryMaxConcurrentFetches
+
+ AsyncInventoryNotifyMinInterval
+
+ AsyncInventoryCapsTimeout
+
+ AsyncInventoryFetchTimeout
+
+ AsyncInventoryEssentialTimeout
+
ForceLoginURL