diff options
| -rw-r--r-- | indra/newview/llaisapi.cpp | 28 | ||||
| -rw-r--r-- | indra/newview/llinventorymodelbackgroundfetch.cpp | 50 | ||||
| -rw-r--r-- | indra/newview/llinventorymodelbackgroundfetch.h | 1 | 
3 files changed, 39 insertions, 40 deletions
| diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index 23bb123dee..bb963d77c9 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -901,7 +901,25 @@ void AISUpdate::parseLink(const LLSD& link_map)  void AISUpdate::parseCategory(const LLSD& category_map)  { -	LLUUID category_id = category_map["category_id"].asUUID(); +    LLUUID category_id = category_map["category_id"].asUUID(); +    S32 version = LLViewerInventoryCategory::VERSION_UNKNOWN; + +    if (category_map.has("version")) +    { +        version = category_map["version"].asInteger(); +    } + +    LLViewerInventoryCategory *curr_cat = gInventory.getCategory(category_id); + +    if (curr_cat +        && curr_cat->getVersion() > LLViewerInventoryCategory::VERSION_UNKNOWN +        && version > LLViewerInventoryCategory::VERSION_UNKNOWN +        && version < curr_cat->getVersion()) +    { +        LL_WARNS() << "Got stale folder, known: " << curr_cat->getVersion() +            << ", received: " << version << LL_ENDL; +        return; +    }  	// Check descendent count first, as it may be needed  	// to populate newly created categories @@ -911,7 +929,6 @@ void AISUpdate::parseCategory(const LLSD& category_map)  	}  	LLPointer<LLViewerInventoryCategory> new_cat; -	LLViewerInventoryCategory *curr_cat = gInventory.getCategory(category_id);  	if (curr_cat)  	{  		// Default to current values where not provided. @@ -940,11 +957,10 @@ void AISUpdate::parseCategory(const LLSD& category_map)          if (mFetch)          {              // Set version/descendents for newly created categories. -            if (category_map.has("version")) +            if (version > LLViewerInventoryCategory::VERSION_UNKNOWN)              { -                S32 version = category_map["version"].asInteger();                  LL_DEBUGS("Inventory") << "Setting version to " << version -                    << " for new category " << category_id << LL_ENDL; +                    << " for category " << category_id << LL_ENDL;                  new_cat->setVersion(version);              }              uuid_int_map_t::const_iterator lookup_it = mCatDescendentsKnown.find(category_id); @@ -952,7 +968,7 @@ void AISUpdate::parseCategory(const LLSD& category_map)              {                  S32 descendent_count = lookup_it->second;                  LL_DEBUGS("Inventory") << "Setting descendents count to " << descendent_count -                    << " for new category " << category_id << LL_ENDL; +                    << " for category " << category_id << LL_ENDL;                  new_cat->setDescendentCount(descendent_count);              }              mCategoriesCreated[category_id] = new_cat; diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index 5ea8fe4cba..098ced4ec9 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -276,7 +276,7 @@ void LLInventoryModelBackgroundFetch::start(const LLUUID& id, bool recursive)                      // Not only root folder can be massive, but                      // most system folders will be requested independently                      // so request root folder and content separately -                    mRecursiveFetchQueue.push_back(FetchQueueInfo(gInventory.getRootFolderID(), RT_CONTENT)); +                    mFetchQueue.push_front(FetchQueueInfo(gInventory.getRootFolderID(), RT_CONTENT));                  }                  else                  { @@ -287,25 +287,18 @@ void LLInventoryModelBackgroundFetch::start(const LLUUID& id, bool recursive)  			if (! mRecursiveLibraryFetchStarted)  			{  				mRecursiveLibraryFetchStarted |= recursive; -                if (recursive && AISAPI::isAvailable()) -                { -                    mRecursiveFetchQueue.push_back(FetchQueueInfo(gInventory.getLibraryRootFolderID(), recursion_type)); -                } -                else -                { -                    mFetchQueue.push_back(FetchQueueInfo(gInventory.getLibraryRootFolderID(), recursion_type)); -                } +                mFetchQueue.push_back(FetchQueueInfo(gInventory.getLibraryRootFolderID(), recursion_type));  				gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL);  			}  		}  		else  		{ -            if (recursive && AISAPI::isAvailable()) +            if (AISAPI::isAvailable() && !recursive)              { -                // AIS does depth requests, recursive requests will need to be prioritizes -                if (mRecursiveFetchQueue.empty() || mRecursiveFetchQueue.back().mUUID != id) +                // Specific folder requests go to front of queue. +                if (mFetchQueue.empty() || mFetchQueue.back().mUUID != id)                  { -                    mRecursiveFetchQueue.push_back(FetchQueueInfo(id, recursion_type)); +                    mFetchQueue.push_back(FetchQueueInfo(id, recursion_type));                      gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL);                  }              } @@ -318,6 +311,7 @@ void LLInventoryModelBackgroundFetch::start(const LLUUID& id, bool recursive)                      gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL);                  }              } +  			if (id == gInventory.getLibraryRootFolderID())  			{  				mRecursiveLibraryFetchStarted |= recursive; @@ -409,7 +403,7 @@ void LLInventoryModelBackgroundFetch::onAISCalback(const LLUUID &request_id, con              // Try requesting folder and nested content separately              mBackgroundFetchActive = true;              mFolderFetchActive = true; -            mRecursiveFetchQueue.push_back(FetchQueueInfo(request_id, RT_CONTENT)); +            mFetchQueue.push_front(FetchQueueInfo(request_id, RT_CONTENT));              gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL);          }      } @@ -425,7 +419,13 @@ void LLInventoryModelBackgroundFetch::onAISCalback(const LLUUID &request_id, con                  it != categories->end();                  ++it)              { -                mRecursiveFetchQueue.push_back(FetchQueueInfo((*it)->getUUID(), RT_RECURSIVE)); +                mFetchQueue.push_back(FetchQueueInfo((*it)->getUUID(), RT_RECURSIVE)); +            } +            if (!mFetchQueue.empty()) +            { +                mBackgroundFetchActive = true; +                mFolderFetchActive = true; +                gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL);              }          }      } @@ -442,22 +442,13 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis()          return;      } -    static const S32 max_concurrent_fetches(12); +    static const S32 max_concurrent_fetches(50);      if (mFetchCount >= max_concurrent_fetches)      {          return;      } -    // Start with recursive queue since it can get multiple categories -    // in a single request and might contain what other requests want -    while (!mRecursiveFetchQueue.empty() && mFetchCount < max_concurrent_fetches) -    { -        const FetchQueueInfo & fetch_info(mRecursiveFetchQueue.front()); -        bulkFetchViaAis(fetch_info); -        mRecursiveFetchQueue.pop_front(); -    } -      while (!mFetchQueue.empty() && mFetchCount < max_concurrent_fetches)      {          const FetchQueueInfo & fetch_info(mFetchQueue.front()); @@ -522,7 +513,7 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis(const FetchQueueInfo& fetc                          it != categories->end();                          ++it)                      { -                        mRecursiveFetchQueue.push_back(FetchQueueInfo((*it)->getUUID(), fetch_info.mRecursive)); +                        mFetchQueue.push_back(FetchQueueInfo((*it)->getUUID(), fetch_info.mRecursive));                      }                  }              } @@ -598,13 +589,6 @@ void LLInventoryModelBackgroundFetch::bulkFetch()  	LLSD item_request_body;  	LLSD item_request_body_lib; -    if (!mRecursiveFetchQueue.empty()) -    { -        LL_DEBUGS(LOG_INV) << "Request was sheduled for AIS, using legacy" << LL_ENDL; -        mFetchQueue.insert(mFetchQueue.begin(), mRecursiveFetchQueue.begin(), mRecursiveFetchQueue.end()); -        mRecursiveFetchQueue.clear(); -    } -  	while (! mFetchQueue.empty()   			&& (item_count + folder_count) < max_batch_size)  	{ diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h index 4c4de6ac7c..14557ea92d 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.h +++ b/indra/newview/llinventorymodelbackgroundfetch.h @@ -114,7 +114,6 @@ private:  	LLFrameTimer mFetchTimer;  	F32 mMinTimeBetweenFetches;  	fetch_queue_t mFetchQueue; -    fetch_queue_t mRecursiveFetchQueue;  }; | 
