Skip to content

Conversation

@marchcat
Copy link
Contributor

@marchcat marchcat commented Oct 24, 2025

Summary:

Introduces asynchronous inventory skeleton loading via AIS to accelerate login (up to 12s faster for 100k+ item inventories) by hydrating from cache, fetching essentials on-demand, and throttling UI updates. Adds debug settings for concurrency/timeouts, fixes cache persistence/dehydration, and optimizes UI with lazy folder widget creation (O(n) parent-child mapping via caching).

Testing:

QA-only ForceAsyncInventorySkeleton toggle; monitor login times/cache integrity. No breaking changes.


LLXMLNodePtr referenced_xml;
std::string xml_filename = mXMLFilename;
const std::string& xml_filename = mXMLFilename;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Holding a reference to mXMLFilename seems pointless as it's only used in the following if-check now.


namespace
{
class LLAsyncInventorySkeletonLoader
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move this class into its own file maybe?

mSawCurrentOutfitFolder = true;
LLViewerInventoryCategory* cof = gInventory.getCategory(cof_id);
const S32 cached_version = gInventory.getCachedCategoryVersion(cof_id);
if (isCategoryUpToDate(cof, cached_version))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add to test plan:

  • Log in on machine A. Log out
  • Wear an outfit with multiple items of the same type on machine B. Log out.
  • Log in on machine A. Change outfit order. Log out.
  • Log in on machine B. Confirm order of items.

// If we run out of time, this still should create root folders
buildNewViews(gInventory.getRootFolderID()); // My Inventory
buildNewViews(gInventory.getLibraryRootFolderID()); // Library
// Build only root widgets - children will load on-demand when expanded
Copy link
Contributor

@akleshchev akleshchev Oct 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Loading 'on demand' potentilly breaks search (assuming it's permanent and not 'on demand untill something in the background eventually gets to it'.
Things to test:

  • Recent tab should show recent items since last logoff
  • Favorites tab should populate
  • Create an item, assign a texture, relog, confirm texture was selected in picker.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants