Merge branch 'DRTVWR-503-maint' of https://bitbucket.org/lindenlab/viewer
commit
6239f5b5d6
|
|
@ -191,8 +191,13 @@ LLUUID LLCoprocedureManager::enqueueCoprocedure(const std::string &pool, const s
|
|||
|
||||
void LLCoprocedureManager::setPropertyMethods(SettingQuery_t queryfn, SettingUpdate_t updatefn)
|
||||
{
|
||||
// functions to discover and store the pool sizes
|
||||
mPropertyQueryFn = queryfn;
|
||||
mPropertyDefineFn = updatefn;
|
||||
|
||||
// workaround until we get mutex into initializePool
|
||||
initializePool("VAssetStorage");
|
||||
initializePool("Upload");
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -39,6 +39,11 @@
|
|||
// Globals
|
||||
LLLandmarkList gLandmarkList;
|
||||
|
||||
// number is mostly arbitrary, but it should be below DEFAULT_QUEUE_SIZE pool size,
|
||||
// which is 4096, to not overfill the pool if user has more than 4K of landmarks,
|
||||
// and low number helps with not flooding server with requests
|
||||
const S32 MAX_SIMULTANEOUS_REQUESTS = 512;
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// LLLandmarkList
|
||||
|
|
@ -69,6 +74,11 @@ LLLandmark* LLLandmarkList::getAsset(const LLUUID& asset_uuid, loaded_callback_t
|
|||
{
|
||||
return NULL;
|
||||
}
|
||||
if ( mWaitList.find(asset_uuid) != mWaitList.end() )
|
||||
{
|
||||
// Landmark is sheduled for download, but not requested yet
|
||||
return NULL;
|
||||
}
|
||||
|
||||
landmark_requested_list_t::iterator iter = mRequestedList.find(asset_uuid);
|
||||
if (iter != mRequestedList.end())
|
||||
|
|
@ -86,6 +96,13 @@ LLLandmark* LLLandmarkList::getAsset(const LLUUID& asset_uuid, loaded_callback_t
|
|||
mLoadedCallbackMap.insert(vt);
|
||||
}
|
||||
|
||||
if (mRequestedList.size() > MAX_SIMULTANEOUS_REQUESTS)
|
||||
{
|
||||
// Postpone download till queu is emptier
|
||||
mWaitList.insert(asset_uuid);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gAssetStorage->getAssetData(asset_uuid,
|
||||
LLAssetType::AT_LANDMARK,
|
||||
LLLandmarkList::processGetAssetReply,
|
||||
|
|
@ -155,8 +172,22 @@ void LLLandmarkList::processGetAssetReply(
|
|||
}
|
||||
|
||||
gLandmarkList.mBadList.insert(uuid);
|
||||
gLandmarkList.mRequestedList.erase(uuid); //mBadList effectively blocks any load, so no point keeping id in requests
|
||||
// todo: this should clean mLoadedCallbackMap!
|
||||
}
|
||||
|
||||
if (!gLandmarkList.mWaitList.empty())
|
||||
{
|
||||
// start new download from wait list
|
||||
landmark_uuid_list_t::iterator iter = gLandmarkList.mWaitList.begin();
|
||||
LLUUID asset_uuid = *iter;
|
||||
gLandmarkList.mWaitList.erase(iter);
|
||||
gAssetStorage->getAssetData(asset_uuid,
|
||||
LLAssetType::AT_LANDMARK,
|
||||
LLLandmarkList::processGetAssetReply,
|
||||
NULL);
|
||||
gLandmarkList.mRequestedList[asset_uuid] = gFrameTimeSeconds;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL LLLandmarkList::isAssetInLoadedCallbackMap(const LLUUID& asset_uuid)
|
||||
|
|
|
|||
|
|
@ -70,9 +70,10 @@ protected:
|
|||
typedef std::map<LLUUID, LLLandmark*> landmark_list_t;
|
||||
landmark_list_t mList;
|
||||
|
||||
typedef std::set<LLUUID> landmark_bad_list_t;
|
||||
landmark_bad_list_t mBadList;
|
||||
|
||||
typedef std::set<LLUUID> landmark_uuid_list_t;
|
||||
landmark_uuid_list_t mBadList;
|
||||
landmark_uuid_list_t mWaitList;
|
||||
|
||||
typedef std::map<LLUUID,F32> landmark_requested_list_t;
|
||||
landmark_requested_list_t mRequestedList;
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@
|
|||
/// LLViewerAssetRequest
|
||||
///----------------------------------------------------------------------------
|
||||
|
||||
// There is also PoolSizeVAssetStorage value in setting that should mirror this name
|
||||
static const std::string VIEWER_ASSET_STORAGE_CORO_POOL = "VAssetStorage";
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue