Automated merge with ssh://hg.lindenlab.com/dessie/viewer-public
commit
bd8183f324
|
|
@ -404,7 +404,7 @@ void LLWorkerClass::scheduleDelete()
|
|||
void LLWorkerClass::setPriority(U32 priority)
|
||||
{
|
||||
mMutex.lock();
|
||||
if (mRequestHandle != LLWorkerThread::nullHandle())
|
||||
if (mRequestHandle != LLWorkerThread::nullHandle() && mRequestPriority != priority)
|
||||
{
|
||||
mRequestPriority = priority;
|
||||
mWorkerThread->setPriority(mRequestHandle, priority);
|
||||
|
|
|
|||
|
|
@ -166,6 +166,9 @@ public:
|
|||
mGetReason = reason;
|
||||
}
|
||||
|
||||
void setCanUseHTTP(bool can_use_http) {mCanUseHTTP = can_use_http;}
|
||||
bool getCanUseHTTP()const {return mCanUseHTTP ;}
|
||||
|
||||
protected:
|
||||
LLTextureFetchWorker(LLTextureFetch* fetcher, const std::string& url, const LLUUID& id, const LLHost& host,
|
||||
F32 priority, S32 discard, S32 size);
|
||||
|
|
@ -247,15 +250,16 @@ private:
|
|||
S32 mRequestedSize;
|
||||
S32 mDesiredSize;
|
||||
S32 mFileSize;
|
||||
S32 mCachedSize;
|
||||
BOOL mLoaded;
|
||||
S32 mCachedSize;
|
||||
e_request_state mSentRequest;
|
||||
handle_t mDecodeHandle;
|
||||
BOOL mLoaded;
|
||||
BOOL mDecoded;
|
||||
BOOL mWritten;
|
||||
BOOL mNeedsAux;
|
||||
BOOL mHaveAllData;
|
||||
BOOL mInLocalCache;
|
||||
bool mCanUseHTTP ;
|
||||
S32 mHTTPFailCount;
|
||||
S32 mRetryAttempt;
|
||||
S32 mActiveCount;
|
||||
|
|
@ -411,6 +415,7 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
|
|||
mNeedsAux(FALSE),
|
||||
mHaveAllData(FALSE),
|
||||
mInLocalCache(FALSE),
|
||||
mCanUseHTTP(true),
|
||||
mHTTPFailCount(0),
|
||||
mRetryAttempt(0),
|
||||
mActiveCount(0),
|
||||
|
|
@ -640,11 +645,12 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
return false;
|
||||
}
|
||||
mFileSize = 0;
|
||||
mLoaded = FALSE;
|
||||
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
|
||||
mLoaded = FALSE;
|
||||
|
||||
if (mUrl.compare(0, 7, "file://") == 0)
|
||||
{
|
||||
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
|
||||
|
||||
// read file from local disk
|
||||
std::string filename = mUrl.substr(7, std::string::npos);
|
||||
CacheReadResponder* responder = new CacheReadResponder(mFetcher, mID, mFormattedImage);
|
||||
|
|
@ -653,11 +659,13 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
}
|
||||
else if (mUrl.empty())
|
||||
{
|
||||
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
|
||||
|
||||
CacheReadResponder* responder = new CacheReadResponder(mFetcher, mID, mFormattedImage);
|
||||
mCacheReadHandle = mFetcher->mTextureCache->readFromCache(mID, cache_priority,
|
||||
offset, size, responder);
|
||||
}
|
||||
else
|
||||
else if(mCanUseHTTP)
|
||||
{
|
||||
if (!(mUrl.compare(0, 7, "http://") == 0))
|
||||
{
|
||||
|
|
@ -667,6 +675,11 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
mState = SEND_HTTP_REQ;
|
||||
}
|
||||
else
|
||||
{
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
mState = LOAD_FROM_NETWORK;
|
||||
}
|
||||
}
|
||||
|
||||
if (mLoaded)
|
||||
|
|
@ -727,7 +740,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
static LLCachedControl<bool> use_http(gSavedSettings,"ImagePipelineUseHTTP");
|
||||
|
||||
// if (mHost != LLHost::invalid) get_url = false;
|
||||
if ( use_http && mUrl.empty())//get http url.
|
||||
if ( use_http && mCanUseHTTP && mUrl.empty())//get http url.
|
||||
{
|
||||
LLViewerRegion* region = NULL;
|
||||
if (mHost == LLHost::invalid)
|
||||
|
|
@ -750,7 +763,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
//llwarns << "Region not found for host: " << mHost << llendl;
|
||||
}
|
||||
}
|
||||
if (!mUrl.empty())
|
||||
if (mCanUseHTTP && !mUrl.empty())
|
||||
{
|
||||
mState = LLTextureFetchWorker::SEND_HTTP_REQ;
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
|
|
@ -891,7 +904,13 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
|||
if (mGetStatus == HTTP_NOT_FOUND)
|
||||
{
|
||||
mHTTPFailCount = max_attempts = 1; // Don't retry
|
||||
llinfos << "Texture missing from server (404): " << mUrl << llendl;
|
||||
//llinfos << "Texture missing from server (404): " << mUrl << llendl;
|
||||
|
||||
//roll back to try UDP
|
||||
mState = INIT ;
|
||||
mCanUseHTTP = false ;
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
return false ;
|
||||
}
|
||||
else if (mGetStatus == HTTP_SERVICE_UNAVAILABLE)
|
||||
{
|
||||
|
|
@ -1471,7 +1490,7 @@ LLTextureFetch::~LLTextureFetch()
|
|||
}
|
||||
|
||||
bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, const LLHost& host, F32 priority,
|
||||
S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux)
|
||||
S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux, bool can_use_http)
|
||||
{
|
||||
if (mDebugPause)
|
||||
{
|
||||
|
|
@ -1533,6 +1552,7 @@ bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, con
|
|||
worker->mNeedsAux = needs_aux;
|
||||
worker->setImagePriority(priority);
|
||||
worker->setDesiredDiscard(desired_discard, desired_size);
|
||||
worker->setCanUseHTTP(can_use_http) ;
|
||||
if (!worker->haveWork())
|
||||
{
|
||||
worker->mState = LLTextureFetchWorker::INIT;
|
||||
|
|
@ -1555,6 +1575,7 @@ bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, con
|
|||
worker->lockWorkMutex();
|
||||
worker->mActiveCount++;
|
||||
worker->mNeedsAux = needs_aux;
|
||||
worker->setCanUseHTTP(can_use_http) ;
|
||||
worker->unlockWorkMutex();
|
||||
}
|
||||
|
||||
|
|
@ -2215,7 +2236,7 @@ BOOL LLTextureFetch::isFromLocalCache(const LLUUID& id)
|
|||
}
|
||||
|
||||
S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& requested_priority_p,
|
||||
U32& fetch_priority_p, F32& fetch_dtime_p, F32& request_dtime_p)
|
||||
U32& fetch_priority_p, F32& fetch_dtime_p, F32& request_dtime_p, bool& can_use_http)
|
||||
{
|
||||
S32 state = LLTextureFetchWorker::INVALID;
|
||||
F32 data_progress = 0.0f;
|
||||
|
|
@ -2253,6 +2274,7 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r
|
|||
requested_priority = worker->mImagePriority;
|
||||
}
|
||||
fetch_priority = worker->getPriority();
|
||||
can_use_http = worker->getCanUseHTTP() ;
|
||||
worker->unlockWorkMutex();
|
||||
}
|
||||
data_progress_p = data_progress;
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ public:
|
|||
void shutDownImageDecodeThread() ; //called in the main thread after the ImageDecodeThread shuts down.
|
||||
|
||||
bool createRequest(const std::string& url, const LLUUID& id, const LLHost& host, F32 priority,
|
||||
S32 w, S32 h, S32 c, S32 discard, bool needs_aux);
|
||||
S32 w, S32 h, S32 c, S32 discard, bool needs_aux, bool can_use_http);
|
||||
void deleteRequest(const LLUUID& id, bool cancel);
|
||||
bool getRequestFinished(const LLUUID& id, S32& discard_level,
|
||||
LLPointer<LLImageRaw>& raw, LLPointer<LLImageRaw>& aux);
|
||||
|
|
@ -77,7 +77,7 @@ public:
|
|||
// Debug
|
||||
BOOL isFromLocalCache(const LLUUID& id);
|
||||
S32 getFetchState(const LLUUID& id, F32& decode_progress_p, F32& requested_priority_p,
|
||||
U32& fetch_priority_p, F32& fetch_dtime_p, F32& request_dtime_p);
|
||||
U32& fetch_priority_p, F32& fetch_dtime_p, F32& request_dtime_p, bool& can_use_http);
|
||||
void dump();
|
||||
S32 getNumRequests() ;
|
||||
S32 getNumHTTPRequests() ;
|
||||
|
|
|
|||
|
|
@ -492,6 +492,7 @@ void LLViewerTexture::init(bool firstinit)
|
|||
|
||||
mTextureState = NO_DELETE ;
|
||||
mDontDiscard = FALSE;
|
||||
mCanResetMaxVirtualSize = true ;
|
||||
mMaxVirtualSize = 0.f;
|
||||
mNeedsGLTexture = FALSE ;
|
||||
mNeedsResetMaxVirtualSize = FALSE ;
|
||||
|
|
@ -540,6 +541,11 @@ void LLViewerTexture::setBoostLevel(S32 level)
|
|||
if(mBoostLevel != LLViewerTexture::BOOST_NONE)
|
||||
{
|
||||
setNoDelete() ;
|
||||
|
||||
if(LLViewerTexture::BOOST_AVATAR_BAKED_SELF == mBoostLevel || LLViewerTexture::BOOST_AVATAR_BAKED == mBoostLevel)
|
||||
{
|
||||
mCanResetMaxVirtualSize = false ;
|
||||
}
|
||||
}
|
||||
if(gAuditTexture)
|
||||
{
|
||||
|
|
@ -613,7 +619,7 @@ void LLViewerTexture::addTextureStats(F32 virtual_size, BOOL needs_gltexture) co
|
|||
|
||||
void LLViewerTexture::resetTextureStats()
|
||||
{
|
||||
mMaxVirtualSize = 0.0f;
|
||||
mMaxVirtualSize = 0.0f ;
|
||||
mAdditionalDecodePriority = 0.f ;
|
||||
mNeedsResetMaxVirtualSize = FALSE ;
|
||||
}
|
||||
|
|
@ -1071,6 +1077,7 @@ void LLViewerFetchedTexture::init(bool firstinit)
|
|||
mRequestedDiscardLevel = -1;
|
||||
mRequestedDownloadPriority = 0.f;
|
||||
mFullyLoaded = FALSE;
|
||||
mCanUseHTTP = true ;
|
||||
mDesiredDiscardLevel = MAX_DISCARD_LEVEL + 1;
|
||||
mMinDesiredDiscardLevel = MAX_DISCARD_LEVEL + 1;
|
||||
|
||||
|
|
@ -1665,7 +1672,11 @@ void LLViewerFetchedTexture::updateVirtualSize()
|
|||
setAdditionalDecodePriority(facep->getImportanceToCamera()) ;
|
||||
}
|
||||
}
|
||||
mNeedsResetMaxVirtualSize = TRUE ;
|
||||
|
||||
if(mCanResetMaxVirtualSize)
|
||||
{
|
||||
mNeedsResetMaxVirtualSize = TRUE ;
|
||||
}
|
||||
reorganizeFaceList() ;
|
||||
reorganizeVolumeList();
|
||||
}
|
||||
|
|
@ -1746,7 +1757,7 @@ bool LLViewerFetchedTexture::updateFetch()
|
|||
else
|
||||
{
|
||||
mFetchState = LLAppViewer::getTextureFetch()->getFetchState(mID, mDownloadProgress, mRequestedDownloadPriority,
|
||||
mFetchPriority, mFetchDeltaTime, mRequestDeltaTime);
|
||||
mFetchPriority, mFetchDeltaTime, mRequestDeltaTime, mCanUseHTTP);
|
||||
}
|
||||
|
||||
// We may have data ready regardless of whether or not we are finished (e.g. waiting on write)
|
||||
|
|
@ -1886,7 +1897,7 @@ bool LLViewerFetchedTexture::updateFetch()
|
|||
// bypass texturefetch directly by pulling from LLTextureCache
|
||||
bool fetch_request_created = false;
|
||||
fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mUrl, getID(),getTargetHost(), decode_priority,
|
||||
w, h, c, desired_discard, needsAux());
|
||||
w, h, c, desired_discard, needsAux(), mCanUseHTTP);
|
||||
|
||||
if (fetch_request_created)
|
||||
{
|
||||
|
|
@ -1894,7 +1905,7 @@ bool LLViewerFetchedTexture::updateFetch()
|
|||
mIsFetching = TRUE;
|
||||
mRequestedDiscardLevel = desired_discard;
|
||||
mFetchState = LLAppViewer::getTextureFetch()->getFetchState(mID, mDownloadProgress, mRequestedDownloadPriority,
|
||||
mFetchPriority, mFetchDeltaTime, mRequestDeltaTime);
|
||||
mFetchPriority, mFetchDeltaTime, mRequestDeltaTime, mCanUseHTTP);
|
||||
}
|
||||
|
||||
// if createRequest() failed, we're finishing up a request for this UUID,
|
||||
|
|
@ -3291,7 +3302,10 @@ F32 LLViewerMediaTexture::getMaxVirtualSize()
|
|||
}
|
||||
}
|
||||
|
||||
mNeedsResetMaxVirtualSize = TRUE ;
|
||||
if(mCanResetMaxVirtualSize)
|
||||
{
|
||||
mNeedsResetMaxVirtualSize = TRUE ;
|
||||
}
|
||||
reorganizeFaceList() ;
|
||||
reorganizeVolumeList();
|
||||
|
||||
|
|
|
|||
|
|
@ -263,6 +263,7 @@ protected:
|
|||
S32 mFullHeight;
|
||||
BOOL mUseMipMaps ;
|
||||
S8 mComponents;
|
||||
bool mCanResetMaxVirtualSize;
|
||||
mutable F32 mMaxVirtualSize; // The largest virtual size of the image, in pixels - how much data to we need?
|
||||
mutable S8 mNeedsGLTexture;
|
||||
mutable BOOL mNeedsResetMaxVirtualSize ;
|
||||
|
|
@ -456,6 +457,8 @@ public:
|
|||
BOOL isFullyLoaded() const;
|
||||
|
||||
BOOL hasFetcher() const { return mHasFetcher;}
|
||||
void setCanUseHTTP(bool can_use_http) {mCanUseHTTP = can_use_http;}
|
||||
|
||||
protected:
|
||||
/*virtual*/ void switchToCachedImage();
|
||||
S32 getCurrentDiscardLevelForFetching() ;
|
||||
|
|
@ -505,6 +508,7 @@ protected:
|
|||
S8 mIsRawImageValid;
|
||||
S8 mHasFetcher; // We've made a fecth request
|
||||
S8 mIsFetching; // Fetch request is active
|
||||
bool mCanUseHTTP ; //This texture can be fetched through http if true.
|
||||
|
||||
mutable S8 mIsMissingAsset; // True if we know that there is no image asset with this image id in the database.
|
||||
|
||||
|
|
|
|||
|
|
@ -4093,6 +4093,7 @@ void LLVOAvatar::addBakedTextureStats( LLViewerFetchedTexture* imagep, F32 pixel
|
|||
{
|
||||
mMaxPixelArea = llmax(pixel_area, mMaxPixelArea);
|
||||
mMinPixelArea = llmin(pixel_area, mMinPixelArea);
|
||||
imagep->resetTextureStats();
|
||||
imagep->addTextureStats(pixel_area / texel_area_ratio);
|
||||
imagep->setBoostLevel(boost_level);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue