diff options
| author | Xiaohong Bao <bao@lindenlab.com> | 2010-05-04 16:49:10 -0600 | 
|---|---|---|
| committer | Xiaohong Bao <bao@lindenlab.com> | 2010-05-04 16:49:10 -0600 | 
| commit | bd8183f3249b760fb51c195579f5c9deef57e84f (patch) | |
| tree | 3111323471191401f8b87e187c35a1d16c406df9 /indra | |
| parent | 1fa673fa168821698f1f278190f19ad179c2667f (diff) | |
| parent | 402c4cc9032b17df63c2a1a0395815eff9b9f906 (diff) | |
Automated merge with ssh://hg.lindenlab.com/dessie/viewer-public
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llcommon/llworkerthread.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/lltexturefetch.cpp | 42 | ||||
| -rw-r--r-- | indra/newview/lltexturefetch.h | 4 | ||||
| -rw-r--r-- | indra/newview/llviewertexture.cpp | 26 | ||||
| -rw-r--r-- | indra/newview/llviewertexture.h | 4 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.cpp | 1 | 
6 files changed, 60 insertions, 19 deletions
| diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp index 2629237f7e..a29e9a348e 100644 --- a/indra/llcommon/llworkerthread.cpp +++ b/indra/llcommon/llworkerthread.cpp @@ -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); diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 3d447dd411..7fa04ce574 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -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; diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h index ef2ec520bf..634e590fe0 100644 --- a/indra/newview/lltexturefetch.h +++ b/indra/newview/lltexturefetch.h @@ -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() ; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index c883087cf2..d925ab0d90 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -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(); diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index a09a711cc7..74c46f3070 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -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.		 diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 674e4b6d82..4ed2147d3b 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -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);  } | 
