diff options
| -rw-r--r-- | autobuild.xml | 4 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llsidepanelappearance.cpp | 4 | ||||
| -rwxr-xr-x | indra/newview/lltexturefetch.cpp | 139 | ||||
| -rwxr-xr-x[-rw-r--r--] | indra/newview/llviewerassetstats.cpp | 39 | ||||
| -rwxr-xr-x[-rw-r--r--] | indra/newview/llviewerassetstats.h | 6 | ||||
| -rw-r--r-- | indra/newview/llviewertexture.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/llvoavatarself.cpp | 5 | ||||
| -rwxr-xr-x[-rw-r--r--] | indra/newview/tests/llviewerassetstats_test.cpp | 51 | 
9 files changed, 126 insertions, 134 deletions
| diff --git a/autobuild.xml b/autobuild.xml index 22de4a7047..80a44ec75d 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -1290,9 +1290,9 @@              <key>archive</key>              <map>                <key>hash</key> -              <string>088a1c30e499289e94bc1738fd3d6a25</string> +              <string>5bc44db15eb3cca021382e40e04a9a38</string>                <key>url</key> -              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llappearanceutility-source/rev/270564/arch/Linux/installer/llappearanceutility_source-0.1-linux-20130219.tar.bz2</string> +              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llappearanceutility-source/rev/271972/arch/Linux/installer/llappearanceutility_source-0.1-linux-20130315.tar.bz2</string>              </map>              <key>name</key>              <string>linux</string> diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index dac268ec92..3adf956ae3 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -4392,7 +4392,6 @@ void LLAppViewer::idle()  			// The 5-second interval is nice for this purpose.  If the object debug  			// bit moves or is disabled, please give this a suitable home.  			LLViewerAssetStatsFF::record_fps_main(gFPSClamped); -			LLViewerAssetStatsFF::record_avatar_stats();  		}  	} diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 025b20d676..d25d203feb 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -375,7 +375,7 @@ void LLSidepanelAppearance::toggleOutfitEditPanel(BOOL visible, BOOL disable_cam  		if (!disable_camera_switch)   // if we're just switching between outfit and wearable editing, don't end customization.  		{  			LLVOAvatarSelf::onCustomizeEnd(disable_camera_switch); -			LLAppearanceMgr::getInstance()->setOutfitDirty( FALSE ); +			LLAppearanceMgr::getInstance()->updateIsDirty();  		}  	}  } @@ -410,7 +410,7 @@ void LLSidepanelAppearance::toggleWearableEditPanel(BOOL visible, LLViewerWearab  	{  		// Save changes if closing.  		mEditWearable->saveChanges(); -		LLAppearanceMgr::getInstance()->setOutfitDirty( FALSE ); +		LLAppearanceMgr::getInstance()->updateIsDirty();  		if (!disable_camera_switch)   // if we're just switching between outfit and wearable editing, don't end customization.  		{  			LLVOAvatarSelf::onCustomizeEnd(disable_camera_switch); diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index d526e17553..ce07f629b9 100755 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -502,6 +502,7 @@ private:  	};  	static const char* sStateDescs[];  	e_state mState; +	void setState(e_state new_state);  	e_write_to_cache_state mWriteToCacheState;  	LLTextureFetch* mFetcher;  	LLPointer<LLImageFormatted> mFormattedImage; @@ -1028,7 +1029,7 @@ void LLTextureFetchWorker::setDesiredDiscard(S32 discard, S32 size)  	mDesiredSize = llmax(mDesiredSize, TEXTURE_CACHE_ENTRY_SIZE);  	if ((prioritize && mState == INIT) || mState == DONE)  	{ -		mState = INIT; +		setState(INIT);  		U32 work_priority = mWorkPriority | LLWorkerThread::PRIORITY_HIGH;  		setPriority(work_priority);  	} @@ -1092,12 +1093,14 @@ bool LLTextureFetchWorker::doWork(S32 param)  	{  		if (mState == INIT || mState == LOAD_FROM_NETWORK || mState == LOAD_FROM_SIMULATOR)  		{ +			LL_DEBUGS("Texture") << mID << " abort: mImagePriority < F_ALMOST_ZERO" << llendl;  			return true; // abort  		}  	}  	if(mState > CACHE_POST && !mCanUseNET && !mCanUseHTTP)  	{  		//nowhere to get data, abort. +		LL_WARNS("Texture") << mID << " abort, nowhere to get data" << llendl;  		return true ;  	} @@ -1140,7 +1143,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  		clearPackets(); // TODO: Shouldn't be necessary  		mCacheReadHandle = LLTextureCache::nullHandle();  		mCacheWriteHandle = LLTextureCache::nullHandle(); -		mState = LOAD_FROM_TEXTURE_CACHE; +		setState(LOAD_FROM_TEXTURE_CACHE);  		mInCache = FALSE;  		mDesiredSize = llmax(mDesiredSize, TEXTURE_CACHE_ENTRY_SIZE); // min desired size is TEXTURE_CACHE_ENTRY_SIZE  		LL_DEBUGS("Texture") << mID << ": Priority: " << llformat("%8.0f",mImagePriority) @@ -1157,7 +1160,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  			S32 size = mDesiredSize - offset;  			if (size <= 0)  			{ -				mState = CACHE_POST; +				setState(CACHE_POST);  				return false;  			}  			mFileSize = 0; @@ -1175,7 +1178,9 @@ bool LLTextureFetchWorker::doWork(S32 param)  																		  offset, size, responder);  				mCacheReadTimer.reset();  			} -			else if ((mUrl.empty()||mFTType==FTT_SERVER_BAKE) && mFetcher->canLoadFromCache()) +/* SH-3980 - disabling caching of server bakes until we can fix the blurring problems */ +/*			else if ((mUrl.empty()||mFTType==FTT_SERVER_BAKE) && mFetcher->canLoadFromCache()) */ +			else if (mUrl.empty() && mFetcher->canLoadFromCache())  			{  				setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it @@ -1188,12 +1193,12 @@ bool LLTextureFetchWorker::doWork(S32 param)  			else if(!mUrl.empty() && mCanUseHTTP)  			{  				setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); -				mState = WAIT_HTTP_RESOURCE; +				setState(WAIT_HTTP_RESOURCE);  			}  			else  			{  				setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); -				mState = LOAD_FROM_NETWORK; +				setState(LOAD_FROM_NETWORK);  			}  		} @@ -1203,7 +1208,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  			if (mFetcher->mTextureCache->readComplete(mCacheReadHandle, false))  			{  				mCacheReadHandle = LLTextureCache::nullHandle(); -				mState = CACHE_POST; +				setState(CACHE_POST);  				// fall through  			}  			else @@ -1211,6 +1216,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  				//  				//This should never happen  				// +				LL_DEBUGS("Texture") << mID << " this should never happen" << llendl;  				return false;  			}  		} @@ -1229,7 +1235,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  			// we have enough data, decode it  			llassert_always(mFormattedImage->getDataSize() > 0);  			mLoadedDiscard = mDesiredDiscard; -			mState = DECODE_IMAGE; +			setState(DECODE_IMAGE);  			mInCache = TRUE;  			mWriteToCacheState = NOT_WRITE ;  			LL_DEBUGS("Texture") << mID << ": Cached. Bytes: " << mFormattedImage->getDataSize() @@ -1242,13 +1248,14 @@ bool LLTextureFetchWorker::doWork(S32 param)  			if (mUrl.compare(0, 7, "file://") == 0)  			{  				// failed to load local file, we're done. +				LL_WARNS("Texture") << mID << ": abort, failed to load local file " << mUrl << LL_ENDL;  				return true;  			}  			// need more data  			else  			{  				LL_DEBUGS("Texture") << mID << ": Not in Cache" << LL_ENDL; -				mState = LOAD_FROM_NETWORK; +				setState(LOAD_FROM_NETWORK);  			}  			// fall through @@ -1289,13 +1296,15 @@ bool LLTextureFetchWorker::doWork(S32 param)  				mCanUseHTTP = false;  			}  		} +#if 0 /* SH-3980 - disabling caching of server bakes until we can fix the blurring problems */  		if (mFTType == FTT_SERVER_BAKE)  		{  			mWriteToCacheState = CAN_WRITE;  		} +#endif  		if (mCanUseHTTP && !mUrl.empty())  		{ -			mState = WAIT_HTTP_RESOURCE; +			setState(WAIT_HTTP_RESOURCE);  			setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);  			if(mWriteToCacheState != NOT_WRITE)  			{ @@ -1325,6 +1334,8 @@ bool LLTextureFetchWorker::doWork(S32 param)  			//mFetcher->addToNetworkQueue(this);  			//recordTextureStart(false);  			//setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); + +			LL_DEBUGS("Texture") << mID << " does this happen?" << llendl;  			return false;  		}  	} @@ -1343,10 +1354,11 @@ bool LLTextureFetchWorker::doWork(S32 param)  			{  				// processSimulatorPackets() failed  // 				llwarns << "processSimulatorPackets() failed to load buffer" << llendl; +				LL_WARNS("Texture") << mID << " processSimulatorPackets() failed to load buffer" << llendl;  				return true; // failed  			}  			setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); -			mState = DECODE_IMAGE; +			setState(DECODE_IMAGE);  			mWriteToCacheState = SHOULD_WRITE;  			recordTextureDone(false);  		} @@ -1370,14 +1382,14 @@ bool LLTextureFetchWorker::doWork(S32 param)  		// Otherwise, advance into the HTTP states.  		if (mFetcher->getHttpWaitersCount() || ! acquireHttpSemaphore())  		{ -			mState = WAIT_HTTP_RESOURCE2; +			setState(WAIT_HTTP_RESOURCE2);  			setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);  			mFetcher->addHttpWaiter(this->mID);  			++mResourceWaitCount;  			return false;  		} -		mState = SEND_HTTP_REQ; +		setState(SEND_HTTP_REQ);  		// *NOTE:  You must invoke releaseHttpSemaphore() if you transition  		// to a state other than SEND_HTTP_REQ or WAIT_HTTP_REQ or abort  		// the request. @@ -1394,6 +1406,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  		if (! mCanUseHTTP)  		{  			releaseHttpSemaphore(); +			LL_WARNS("Texture") << mID << " abort: SEND_HTTP_REQ but !mCanUseHTTP" << llendl;  			return true; // abort  		} @@ -1410,13 +1423,14 @@ bool LLTextureFetchWorker::doWork(S32 param)  					// We already have all the data, just decode it  					mLoadedDiscard = mFormattedImage->getDiscardLevel();  					setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); -					mState = DECODE_IMAGE; +					setState(DECODE_IMAGE);  					releaseHttpSemaphore();  					return false;  				}  				else  				{  					releaseHttpSemaphore(); +					LL_WARNS("Texture") << mID << " SEND_HTTP_REQ abort: cur_size " << cur_size << " <=0" << llendl;  					return true; // abort.  				}  			} @@ -1474,7 +1488,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  		mFetcher->addToHTTPQueue(mID);  		recordTextureStart(true);  		setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); -		mState = WAIT_HTTP_REQ;	 +		setState(WAIT_HTTP_REQ);	  		// fall through  	} @@ -1492,8 +1506,9 @@ bool LLTextureFetchWorker::doWork(S32 param)  				{  					if(mWriteToCacheState == NOT_WRITE) //map tiles  					{ -						mState = DONE; +						setState(DONE);  						releaseHttpSemaphore(); +						LL_DEBUGS("Texture") << mID << " abort: WAIT_HTTP_REQ not found" << llendl;  						return true; // failed, means no map tile on the empty region.  					} @@ -1502,7 +1517,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  					// roll back to try UDP  					if (mCanUseNET)  					{ -						mState = INIT; +						setState(INIT);  						mCanUseHTTP = false;  						mUrl.clear();  						setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); @@ -1533,15 +1548,16 @@ bool LLTextureFetchWorker::doWork(S32 param)  					// Use available data  					mLoadedDiscard = mFormattedImage->getDiscardLevel();  					setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); -					mState = DECODE_IMAGE; +					setState(DECODE_IMAGE);  					releaseHttpSemaphore();  					return false;   				}  				// Fail harder  				resetFormattedData(); -				mState = DONE; +				setState(DONE);  				releaseHttpSemaphore(); +				LL_WARNS("Texture") << mID << " abort: fail harder" << llendl;  				return true; // failed  			} @@ -1550,6 +1566,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  			// next time the texture is requested, even if the data have already been fetched.  			if(mWriteToCacheState != NOT_WRITE)  			{ +				// Why do we want to keep url if NOT_WRITE - is this a proxy for map tiles?  				mUrl.clear();  			} @@ -1563,7 +1580,8 @@ bool LLTextureFetchWorker::doWork(S32 param)  				}  				// abort. -				mState = DONE; +				setState(DONE); +				LL_WARNS("Texture") << mID << " abort: no data received" << llendl;  				releaseHttpSemaphore();  				return true;  			} @@ -1581,7 +1599,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  				{  					LL_WARNS("Texture") << "Partial HTTP response produces break in image data for texture "  										<< mID << ".  Aborting load."  << LL_ENDL; -					mState = DONE; +					setState(DONE);  					releaseHttpSemaphore();  					return true;  				} @@ -1629,7 +1647,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  			mHttpReplyOffset = 0;  			mLoadedDiscard = mRequestedDiscard; -			mState = DECODE_IMAGE; +			setState(DECODE_IMAGE);  			if (mWriteToCacheState != NOT_WRITE)  			{  				mWriteToCacheState = SHOULD_WRITE ; @@ -1660,31 +1678,34 @@ bool LLTextureFetchWorker::doWork(S32 param)  		if (textures_decode_disabled)  		{  			// for debug use, don't decode -			mState = DONE; +			setState(DONE);  			return true;  		}  		if (mDesiredDiscard < 0)  		{  			// We aborted, don't decode -			mState = DONE; +			setState(DONE); +			LL_DEBUGS("Texture") << mID << " DECODE_IMAGE abort: desired discard " << mDesiredDiscard << "<0" << llendl;  			return true;  		}  		if (mFormattedImage->getDataSize() <= 0)  		{ -			//llerrs << "Decode entered with invalid mFormattedImage. ID = " << mID << llendl; +			llwarns << "Decode entered with invalid mFormattedImage. ID = " << mID << llendl;  			//abort, don't decode -			mState = DONE; +			setState(DONE); +			LL_DEBUGS("Texture") << mID << " DECODE_IMAGE abort: (mFormattedImage->getDataSize() <= 0)" << llendl;  			return true;  		}  		if (mLoadedDiscard < 0)  		{ -			//llerrs << "Decode entered with invalid mLoadedDiscard. ID = " << mID << llendl; +			llwarns << "Decode entered with invalid mLoadedDiscard. ID = " << mID << llendl;  			//abort, don't decode -			mState = DONE; +			setState(DONE); +			LL_DEBUGS("Texture") << mID << " DECODE_IMAGE abort: mLoadedDiscard < 0" << llendl;  			return true;  		} @@ -1694,7 +1715,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  		S32 discard = mHaveAllData ? 0 : mLoadedDiscard;  		U32 image_priority = LLWorkerThread::PRIORITY_NORMAL | mWorkPriority;  		mDecoded  = FALSE; -		mState = DECODE_IMAGE_UPDATE; +		setState(DECODE_IMAGE_UPDATE);  		LL_DEBUGS("Texture") << mID << ": Decoding. Bytes: " << mFormattedImage->getDataSize() << " Discard: " << discard  				<< " All Data: " << mHaveAllData << LL_ENDL;  		mDecodeHandle = mFetcher->mImageDecodeThread->decodeImage(mFormattedImage, image_priority, discard, mNeedsAux, @@ -1722,13 +1743,13 @@ bool LLTextureFetchWorker::doWork(S32 param)  					mFormattedImage = NULL;  					++mRetryAttempt;  					setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); -					mState = INIT; +					setState(INIT);  					return false;  				}  				else  				{  // 					llwarns << "UNABLE TO LOAD TEXTURE: " << mID << " RETRIES: " << mRetryAttempt << llendl; -					mState = DONE; // failed +					setState(DONE); // failed  				}  			}  			else @@ -1737,7 +1758,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  				LL_DEBUGS("Texture") << mID << ": Decoded. Discard: " << mDecodedDiscard  						<< " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;  				setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); -				mState = WRITE_TO_CACHE; +				setState(WRITE_TO_CACHE);  			}  			// fall through  		} @@ -1753,7 +1774,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  		{  			// If we're in a local cache or we didn't actually receive any new data,  			// or we failed to load anything, skip -			mState = DONE; +			setState(DONE);  			return false;  		}  		S32 datasize = mFormattedImage->getDataSize(); @@ -1772,7 +1793,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  		setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it  		U32 cache_priority = mWorkPriority;  		mWritten = FALSE; -		mState = WAIT_ON_WRITE; +		setState(WAIT_ON_WRITE);  		++mCacheWriteCount;  		CacheWriteResponder* responder = new CacheWriteResponder(mFetcher, mID);  		mCacheWriteHandle = mFetcher->mTextureCache->writeToCache(mID, cache_priority, @@ -1785,7 +1806,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  	{  		if (writeToCacheComplete())  		{ -			mState = DONE; +			setState(DONE);  			// fall through  		}  		else @@ -1806,7 +1827,10 @@ bool LLTextureFetchWorker::doWork(S32 param)  		if (mDecodedDiscard >= 0 && mDesiredDiscard < mDecodedDiscard)  		{  			// More data was requested, return to INIT -			mState = INIT; +			setState(INIT); +			LL_DEBUGS("Texture") << mID << " more data requested, returning to INIT: "  +								 << " mDecodedDiscard " << mDecodedDiscard << ">= 0 && mDesiredDiscard " << mDesiredDiscard +								 << "<" << " mDecodedDiscard " << mDecodedDiscard << llendl;  			setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);  			return false;  		} @@ -1846,10 +1870,10 @@ void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRe  	bool partial = false;  	LLCore::HttpStatus status(response->getStatus()); -	lldebugs << "HTTP COMPLETE: " << mID -			 << " status: " << status.toHex() -			 << " '" << status.toString() << "'" -			 << llendl; +	LL_DEBUGS("Texture") << "HTTP COMPLETE: " << mID +						 << " status: " << status.toHex() +						 << " '" << status.toString() << "'" +						 << llendl;  //	unsigned int offset(0), length(0), full_length(0);  //	response->getRange(&offset, &length, &full_length);  // 	llwarns << "HTTP COMPLETE: " << mID << " handle: " << handle @@ -2434,6 +2458,7 @@ bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const  	std::string exten = gDirUtilp->getExtension(url);  	if (!url.empty() && (!exten.empty() && LLImageBase::getCodecFromExtension(exten) != IMG_CODEC_J2C))  	{ +		LL_DEBUGS("Texture") << "full request for " << id << " exten is not J2C: " << exten << llendl;  		// Only do partial requests for J2C at the moment  		desired_size = MAX_IMAGE_DATA_SIZE;  		desired_discard = 0; @@ -2476,7 +2501,7 @@ bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const  		worker->setCanUseHTTP(can_use_http) ;  		if (!worker->haveWork())  		{ -			worker->mState = LLTextureFetchWorker::INIT; +			worker->setState(LLTextureFetchWorker::INIT);  			worker->unlockWorkMutex();									// -Mw  			worker->addWork(0, LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority); @@ -2500,7 +2525,7 @@ bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const  		worker->unlockWorkMutex();										// -Mw  	} -// 	llinfos << "REQUESTED: " << id << " Discard: " << desired_discard << llendl; + 	LL_DEBUGS("Texture") << "REQUESTED: " << id << " Discard: " << desired_discard << " size " << desired_size << llendl;  	return true;  } @@ -3169,6 +3194,30 @@ bool LLTextureFetchWorker::insertPacket(S32 index, U8* data, S32 size)  	return true;  } +void LLTextureFetchWorker::setState(e_state new_state) +{ +	static const char* e_state_name[] = +	{ +		"INVALID", +		"INIT", +		"LOAD_FROM_TEXTURE_CACHE", +		"CACHE_POST", +		"LOAD_FROM_NETWORK", +		"LOAD_FROM_SIMULATOR", +		"WAIT_HTTP_RESOURCE", +		"WAIT_HTTP_RESOURCE2", +		"SEND_HTTP_REQ", +		"WAIT_HTTP_REQ", +		"DECODE_IMAGE", +		"DECODE_IMAGE_UPDATE", +		"WRITE_TO_CACHE", +		"WAIT_ON_WRITE", +		"DONE" +	}; +	LL_DEBUGS("Texture") << "id: " << mID << " FTType: " << mFTType << " disc: " << mDesiredDiscard << " sz: " << mDesiredSize << " state: " << e_state_name[mState] << " => " << e_state_name[new_state] << llendl; +	mState = new_state; +} +  // Threads:  T*  bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8 codec, U16 packets, U32 totalbytes,  										U16 data_size, U8* data) @@ -3225,7 +3274,7 @@ bool LLTextureFetch::receiveImageHeader(const LLHost& host, const LLUUID& id, U8  	llassert_always(data_size == FIRST_PACKET_SIZE || data_size == worker->mFileSize);  	res = worker->insertPacket(0, data, data_size);  	worker->setPriority(LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority); -	worker->mState = LLTextureFetchWorker::LOAD_FROM_SIMULATOR; +	worker->setState(LLTextureFetchWorker::LOAD_FROM_SIMULATOR);  	worker->unlockWorkMutex();											// -Mw  	return res;  } @@ -3275,7 +3324,7 @@ bool LLTextureFetch::receiveImagePacket(const LLHost& host, const LLUUID& id, U1  		(worker->mState == LLTextureFetchWorker::LOAD_FROM_NETWORK))  	{  		worker->setPriority(LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority); -		worker->mState = LLTextureFetchWorker::LOAD_FROM_SIMULATOR; +		worker->setState(LLTextureFetchWorker::LOAD_FROM_SIMULATOR);  	}  	else  	{ @@ -3538,7 +3587,7 @@ void LLTextureFetch::releaseHttpWaiters()  			break;  		} -		worker->mState = LLTextureFetchWorker::SEND_HTTP_REQ; +		worker->setState(LLTextureFetchWorker::SEND_HTTP_REQ);  		worker->setPriority(LLWorkerThread::PRIORITY_HIGH | worker->mWorkPriority);  		worker->unlockWorkMutex();										// -Mw diff --git a/indra/newview/llviewerassetstats.cpp b/indra/newview/llviewerassetstats.cpp index 4c59fd0371..aaa81c57d4 100644..100755 --- a/indra/newview/llviewerassetstats.cpp +++ b/indra/newview/llviewerassetstats.cpp @@ -160,9 +160,7 @@ LLViewerAssetStats::LLViewerAssetStats()  LLViewerAssetStats::LLViewerAssetStats(const LLViewerAssetStats & src)  	: mRegionHandle(src.mRegionHandle), -	  mResetTimestamp(src.mResetTimestamp), -	  mPhaseStats(src.mPhaseStats), -	  mAvatarRezStates(src.mAvatarRezStates) +	  mResetTimestamp(src.mResetTimestamp)  {  	const PerRegionContainer::const_iterator it_end(src.mRegionStats.end());  	for (PerRegionContainer::const_iterator it(src.mRegionStats.begin()); it_end != it; ++it) @@ -258,17 +256,6 @@ LLViewerAssetStats::recordFPS(F32 fps)  	mCurRegionStats->mFPS.record(fps);  } -void -LLViewerAssetStats::recordAvatarStats() -{ -	std::vector<S32> rez_counts; -	LLVOAvatar::getNearbyRezzedStats(rez_counts); -	mAvatarRezStates = rez_counts; -	mPhaseStats.clear(); -	mPhaseStats["cloud"] = LLViewerStats::PhaseMap::getPhaseStats("cloud"); -	mPhaseStats["cloud-or-gray"] = LLViewerStats::PhaseMap::getPhaseStats("cloud-or-gray"); -} -  LLSD  LLViewerAssetStats::asLLSD(bool compact_output)  { @@ -299,11 +286,6 @@ LLViewerAssetStats::asLLSD(bool compact_output)  	static const LLSD::String max_tag("max");  	static const LLSD::String mean_tag("mean"); -	// Avatar sub-tags -	static const LLSD::String avatar_tag("avatar"); -	static const LLSD::String avatar_nearby_tag("nearby"); -	static const LLSD::String avatar_phase_stats_tag("phase_stats"); -	  	const duration_t now = LLViewerAssetStatsFF::get_timestamp();  	mCurRegionStats->accumulateTime(now); @@ -362,16 +344,6 @@ LLViewerAssetStats::asLLSD(bool compact_output)  	LLSD ret = LLSD::emptyMap();  	ret["regions"] = regions;  	ret["duration"] = LLSD::Real((now - mResetTimestamp) * 1.0e-6); -	LLSD avatar_info; -	avatar_info[avatar_nearby_tag] = LLSD::emptyArray(); -	for (S32 rez_stat=0; rez_stat < mAvatarRezStates.size(); ++rez_stat) -	{ -		std::string rez_status_name = LLVOAvatar::rezStatusToString(rez_stat); -		avatar_info[avatar_nearby_tag][rez_status_name] = mAvatarRezStates[rez_stat]; -	} -	avatar_info[avatar_phase_stats_tag]["cloud"] = mPhaseStats["cloud"].getData(); -	avatar_info[avatar_phase_stats_tag]["cloud-or-gray"] = mPhaseStats["cloud-or-gray"].getData(); -	ret[avatar_tag] = avatar_info;  	return ret;  } @@ -470,15 +442,6 @@ record_fps_main(F32 fps)  	gViewerAssetStatsMain->recordFPS(fps);  } -void -record_avatar_stats() -{ -	if (! gViewerAssetStatsMain) -		return; - -	gViewerAssetStatsMain->recordAvatarStats(); -} -  // 'thread1' - should be for TextureFetch thread  void diff --git a/indra/newview/llviewerassetstats.h b/indra/newview/llviewerassetstats.h index 8319752230..e4581d2120 100644..100755 --- a/indra/newview/llviewerassetstats.h +++ b/indra/newview/llviewerassetstats.h @@ -256,10 +256,6 @@ protected:  	// Time of last reset  	duration_t mResetTimestamp; - -	// Nearby avatar stats -	std::vector<S32> mAvatarRezStates; -	LLViewerStats::phase_stats_t mPhaseStats;  }; @@ -318,8 +314,6 @@ void record_response_main(LLViewerAssetType::EType at, bool with_http, bool is_t  void record_fps_main(F32 fps); -void record_avatar_stats(); -  /**   * Region context, event and duration loggers for Thread 1.   */ diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 1d0bda34a7..236b95253c 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1819,7 +1819,10 @@ bool LLViewerFetchedTexture::updateFetch()  				// We finished but received no data  				if (current_discard < 0)  				{ -					llwarns << "!mIsFetching, setting as missing" << llendl; +					llwarns << "!mIsFetching, setting as missing, decode_priority " << decode_priority +							<< " mRawDiscardLevel " << mRawDiscardLevel +							<< " current_discard " << current_discard +							<< llendl;  					setIsMissingAsset();  					desired_discard = -1;  				} @@ -1952,11 +1955,13 @@ bool LLViewerFetchedTexture::updateFetch()  	}  	else if (mHasFetcher && !mIsFetching)  	{ -		// Only delete requests that haven't receeived any network data for a while +		// Only delete requests that haven't received any network data +		// for a while.  Note - this is the normal mechanism for +		// deleting requests, not just a place to handle timeouts.  		const F32 FETCH_IDLE_TIME = 5.f;  		if (mLastPacketTimer.getElapsedTimeF32() > FETCH_IDLE_TIME)  		{ -// 			llinfos << "Deleting request: " << getID() << " Discard: " << current_discard << " <= min:" << mMinDiscardLevel << " or priority == 0: " << decode_priority << llendl; + 			LL_DEBUGS("Texture") << "exceeded idle time " << FETCH_IDLE_TIME << ", deleting request: " << getID() << llendl;  			LLAppViewer::getTextureFetch()->deleteRequest(getID(), true);  			mHasFetcher = FALSE;  		} diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 6d12cd2f01..9e68378fb8 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -2988,7 +2988,10 @@ void LLVOAvatarSelf::onCustomizeEnd(bool disable_camera_switch)  			gAgentCamera.resetView();  		} -		LLAppearanceMgr::instance().updateAppearanceFromCOF(); +		if (gAgent.getRegion() && gAgent.getRegion()->getCentralBakeVersion()) +		{ +			LLAppearanceMgr::instance().requestServerAppearanceUpdate(); +		}  	}  } diff --git a/indra/newview/tests/llviewerassetstats_test.cpp b/indra/newview/tests/llviewerassetstats_test.cpp index f8923b9868..a331d9aa9e 100644..100755 --- a/indra/newview/tests/llviewerassetstats_test.cpp +++ b/indra/newview/tests/llviewerassetstats_test.cpp @@ -37,30 +37,6 @@  #include "llregionhandle.h"  #include "../llvoavatar.h" -void LLVOAvatar::getNearbyRezzedStats(std::vector<S32>& counts) -{ -	counts.resize(3); -	counts[0] = 0; -	counts[1] = 0; -	counts[2] = 1; -} - -// static -std::string LLVOAvatar::rezStatusToString(S32 rez_status) -{ -	if (rez_status==0) return "cloud"; -	if (rez_status==1) return "gray"; -	if (rez_status==2) return "textured"; -	return "unknown"; -} - -// static -LLViewerStats::StatsAccumulator& LLViewerStats::PhaseMap::getPhaseStats(const std::string& phase_name) -{ -	static LLViewerStats::StatsAccumulator junk; -	return junk; -} -  static const char * all_keys[] =   {  	"duration", @@ -123,31 +99,34 @@ is_empty_map(const LLSD & sd)  {  	return sd.isMap() && 0 == sd.size();  } +#endif +#if 0  static bool  is_single_key_map(const LLSD & sd, const std::string & key)  {  	return sd.isMap() && 1 == sd.size() && sd.has(key);  } +#endif  static bool  is_double_key_map(const LLSD & sd, const std::string & key1, const std::string & key2)  {  	return sd.isMap() && 2 == sd.size() && sd.has(key1) && sd.has(key2);  } -#endif +#if 0  static bool  is_triple_key_map(const LLSD & sd, const std::string & key1, const std::string & key2, const std::string& key3)  {  	return sd.isMap() && 3 == sd.size() && sd.has(key1) && sd.has(key2) && sd.has(key3);  } - +#endif  static bool  is_no_stats_map(const LLSD & sd)  { -	return is_triple_key_map(sd, "duration", "regions", "avatar"); +	return is_double_key_map(sd, "duration", "regions");  }  static bool @@ -258,7 +237,7 @@ namespace tut  		// Once the region is set, we will get a response even with no data collection  		it->setRegion(region1_handle);  		sd_full = it->asLLSD(false); -		ensure("Correct single-key LLSD map root", is_triple_key_map(sd_full, "duration", "regions", "avatar")); +		ensure("Correct single-key LLSD map root", is_double_key_map(sd_full, "duration", "regions"));  		ensure("Correct single-slot LLSD array regions", is_single_slot_array(sd_full["regions"], region1_handle));  		LLSD sd = sd_full["regions"][0]; @@ -299,7 +278,7 @@ namespace tut  		it->setRegion(region1_handle);  		LLSD sd = it->asLLSD(false); -		ensure("Correct single-key LLSD map root", is_triple_key_map(sd, "regions", "duration", "avatar")); +		ensure("Correct single-key LLSD map root", is_double_key_map(sd, "regions", "duration"));  		ensure("Correct single-slot LLSD array regions", is_single_slot_array(sd["regions"], region1_handle));  		sd = sd[0]; @@ -324,7 +303,7 @@ namespace tut  		LLViewerAssetStatsFF::record_dequeue_main(LLViewerAssetType::AT_BODYPART, false, false);  		LLSD sd = gViewerAssetStatsMain->asLLSD(false); -		ensure("Correct single-key LLSD map root", is_triple_key_map(sd, "regions", "duration", "avatar")); +		ensure("Correct single-key LLSD map root", is_double_key_map(sd, "regions", "duration"));  		ensure("Correct single-slot LLSD array regions", is_single_slot_array(sd["regions"], region1_handle));  		sd = sd["regions"][0]; @@ -364,7 +343,7 @@ namespace tut  		LLSD sd = gViewerAssetStatsThread1->asLLSD(false);  		ensure("Other collector is empty", is_no_stats_map(sd));  		sd = gViewerAssetStatsMain->asLLSD(false); -		ensure("Correct single-key LLSD map root", is_triple_key_map(sd, "regions", "duration", "avatar")); +		ensure("Correct single-key LLSD map root", is_double_key_map(sd, "regions", "duration"));  		ensure("Correct single-slot LLSD array regions", is_single_slot_array(sd["regions"], region1_handle));  		sd = sd["regions"][0]; @@ -414,7 +393,7 @@ namespace tut  		// std::cout << sd << std::endl; -		ensure("Correct double-key LLSD map root", is_triple_key_map(sd, "duration", "regions", "avatar")); +		ensure("Correct double-key LLSD map root", is_double_key_map(sd, "duration", "regions"));  		ensure("Correct double-slot LLSD array regions", is_double_slot_array(sd["regions"], region1_handle, region2_handle));  		LLSD sd1 = get_region(sd, region1_handle);  		LLSD sd2 = get_region(sd, region2_handle); @@ -437,7 +416,7 @@ namespace tut  		// Reset leaves current region in place  		gViewerAssetStatsMain->reset();  		sd = gViewerAssetStatsMain->asLLSD(false); -		ensure("Correct single-key LLSD map root", is_triple_key_map(sd, "regions", "duration", "avatar")); +		ensure("Correct single-key LLSD map root", is_double_key_map(sd, "regions", "duration"));  		ensure("Correct single-slot LLSD array regions (p2)", is_single_slot_array(sd["regions"], region2_handle));  		sd2 = sd["regions"][0]; @@ -486,7 +465,7 @@ namespace tut  		LLSD sd = gViewerAssetStatsMain->asLLSD(false); -		ensure("Correct double-key LLSD map root", is_triple_key_map(sd, "duration", "regions", "avatar")); +		ensure("Correct double-key LLSD map root", is_double_key_map(sd, "duration", "regions"));  		ensure("Correct double-slot LLSD array regions", is_double_slot_array(sd["regions"], region1_handle, region2_handle));  		LLSD sd1 = get_region(sd, region1_handle);  		LLSD sd2 = get_region(sd, region2_handle); @@ -509,7 +488,7 @@ namespace tut  		// Reset leaves current region in place  		gViewerAssetStatsMain->reset();  		sd = gViewerAssetStatsMain->asLLSD(false); -		ensure("Correct single-key LLSD map root", is_triple_key_map(sd, "duration", "regions", "avatar")); +		ensure("Correct single-key LLSD map root", is_double_key_map(sd, "duration", "regions"));  		ensure("Correct single-slot LLSD array regions (p2)", is_single_slot_array(sd["regions"], region2_handle));  		sd2 = get_region(sd, region2_handle);  		ensure("Region2 is present in results", sd2.isMap()); @@ -555,7 +534,7 @@ namespace tut  		LLSD sd = gViewerAssetStatsThread1->asLLSD(false);  		ensure("Other collector is empty", is_no_stats_map(sd));  		sd = gViewerAssetStatsMain->asLLSD(false); -		ensure("Correct single-key LLSD map root", is_triple_key_map(sd, "regions", "duration", "avatar")); +		ensure("Correct single-key LLSD map root", is_double_key_map(sd, "regions", "duration"));  		ensure("Correct single-slot LLSD array regions", is_single_slot_array(sd["regions"], region1_handle));  		sd = get_region(sd, region1_handle);  		ensure("Region1 is present in results", sd.isMap()); | 
