diff options
| author | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2012-02-06 15:08:41 -0500 | 
|---|---|---|
| committer | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2012-02-06 15:08:41 -0500 | 
| commit | 344c46a20c8055daada15d70bf2dbd2cd5555be8 (patch) | |
| tree | d7ff514786aa3b1347ad768a64b68bfd08e99f90 /indra/newview | |
| parent | 127f6d14050bd1d10b3a4b4b8a4c315da43e9f92 (diff) | |
| parent | 289d756ea86bd3898f41592146d8f549cd056846 (diff) | |
merge, conflicts in llvertexbuffer.{h,cpp}
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 22 | ||||
| -rwxr-xr-x | indra/newview/llagent.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llagentwearables.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/llagentwearablesfetch.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llagentwearablesfetch.h | 2 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.cpp | 9 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 2 | ||||
| -rwxr-xr-x[-rw-r--r--] | indra/newview/llmeshrepository.cpp | 127 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.h | 4 | ||||
| -rw-r--r-- | indra/newview/lltexlayer.h | 2 | ||||
| -rwxr-xr-x[-rw-r--r--] | indra/newview/llviewerwindow.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.h | 2 | ||||
| -rw-r--r-- | indra/newview/llvoavatarself.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/llvoavatarself.h | 3 | ||||
| -rw-r--r-- | indra/newview/llxmlrpctransaction.cpp | 19 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_viewer.xml | 7 | 
17 files changed, 199 insertions, 56 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 7df92e5276..0e26013152 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1828,6 +1828,28 @@        <key>Value</key>        <integer>0</integer>      </map> +  <key>CurlMaximumNumberOfHandles</key> +  <map> +    <key>Comment</key> +    <string>Maximum number of handles curl can use (requires restart)</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>S32</string> +    <key>Value</key> +    <integer>256</integer> +  </map> +  <key>CurlRequestTimeOut</key> +  <map> +    <key>Comment</key> +    <string>Max idle time of a curl request before killed (requires restart)</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>F32</string> +    <key>Value</key> +    <real>120.0</real> +  </map>    <key>CurlUseMultipleThreads</key>    <map>      <key>Comment</key> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 54ad3cd187..ab9b5ff436 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -3314,6 +3314,7 @@ void LLAgent::processAgentCachedTextureResponse(LLMessageSystem *mesgsys, void *  	}  	llinfos << "Received cached texture response for " << num_results << " textures." << llendl; +	gAgentAvatarp->outputRezTiming("Fetched agent wearables textures from cache. Will now load them");  	gAgentAvatarp->updateMeshTextures(); diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 13b62cb019..09305a5b4d 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -185,6 +185,7 @@ void LLAgentWearables::setAvatarObject(LLVOAvatarSelf *avatar)  {   	if (avatar)  	{ +		avatar->outputRezTiming("Sending wearables request");  		sendAgentWearablesRequest();  	}  } @@ -949,6 +950,11 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs  	if (mInitialWearablesUpdateReceived)  		return; +	if (isAgentAvatarValid()) +	{ +		gAgentAvatarp->outputRezTiming("Received initial wearables update"); +	} +  	// notify subscribers that wearables started loading. See EXT-7777  	// *TODO: find more proper place to not be called from deprecated method.  	// Seems such place is found: LLInitialWearablesFetch::processContents() @@ -1619,6 +1625,11 @@ void LLAgentWearables::queryWearableCache()  	//VWR-22113: gAgent.getRegion() can return null if invalid, seen here on logout  	if(gAgent.getRegion())  	{ +		if (isAgentAvatarValid()) +		{ +			gAgentAvatarp->outputRezTiming("Fetching textures from cache"); +		} +  		llinfos << "Requesting texture cache entry for " << num_queries << " baked textures" << llendl;  		gMessageSystem->sendReliable(gAgent.getRegion()->getHost());  		gAgentQueryManager.mNumPendingQueries++; diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp index 4097ff707c..8cba54347e 100644 --- a/indra/newview/llagentwearablesfetch.cpp +++ b/indra/newview/llagentwearablesfetch.cpp @@ -87,6 +87,10 @@ public:  LLInitialWearablesFetch::LLInitialWearablesFetch(const LLUUID& cof_id) :  	LLInventoryFetchDescendentsObserver(cof_id)  { +	if (isAgentAvatarValid()) +	{ +		gAgentAvatarp->outputRezTiming("Initial wearables fetch started"); +	}  }  LLInitialWearablesFetch::~LLInitialWearablesFetch() @@ -101,6 +105,10 @@ void LLInitialWearablesFetch::done()  	// idle tick instead.  	gInventory.removeObserver(this);  	doOnIdleOneTime(boost::bind(&LLInitialWearablesFetch::processContents,this)); +	if (isAgentAvatarValid()) +	{ +		gAgentAvatarp->outputRezTiming("Initial wearables fetch done"); +	}  }  void LLInitialWearablesFetch::add(InitialWearableData &data) diff --git a/indra/newview/llagentwearablesfetch.h b/indra/newview/llagentwearablesfetch.h index 7dafab4a33..bedc445c0e 100644 --- a/indra/newview/llagentwearablesfetch.h +++ b/indra/newview/llagentwearablesfetch.h @@ -40,6 +40,8 @@  //--------------------------------------------------------------------  class LLInitialWearablesFetch : public LLInventoryFetchDescendentsObserver  { +	LOG_CLASS(LLInitialWearablesFetch); +  public:  	LLInitialWearablesFetch(const LLUUID& cof_id);  	~LLInitialWearablesFetch(); diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 663257042e..33f5373d7e 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -268,6 +268,8 @@ struct LLFoundData  class LLWearableHoldingPattern  { +	LOG_CLASS(LLWearableHoldingPattern); +  public:  	LLWearableHoldingPattern();  	~LLWearableHoldingPattern(); @@ -436,6 +438,11 @@ void LLWearableHoldingPattern::checkMissingWearables()  void LLWearableHoldingPattern::onAllComplete()  { +	if (isAgentAvatarValid()) +	{ +		gAgentAvatarp->outputRezTiming("Agent wearables fetch complete"); +	} +  	if (!isMostRecent())  	{  		llwarns << "skipping because LLWearableHolding pattern is invalid (superceded by later outfit request)" << llendl; @@ -2363,6 +2370,8 @@ void LLAppearanceMgr::autopopulateOutfits()  // Handler for anything that's deferred until avatar de-clouds.  void LLAppearanceMgr::onFirstFullyVisible()  { +	gAgentAvatarp->outputRezTiming("Avatar fully loaded"); +	gAgentAvatarp->reportAvatarRezTime();  	gAgentAvatarp->debugAvatarVisible();  	// The auto-populate is failing at the point of generating outfits diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index a455d359bf..49fbdbf1df 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -722,7 +722,9 @@ bool LLAppViewer::init()      // *NOTE:Mani - LLCurl::initClass is not thread safe.       // Called before threads are created. -    LLCurl::initClass(gSavedSettings.getBOOL("CurlUseMultipleThreads")); +    LLCurl::initClass(gSavedSettings.getF32("CurlRequestTimeOut"),  +						gSavedSettings.getS32("CurlMaximumNumberOfHandles"),  +						gSavedSettings.getBOOL("CurlUseMultipleThreads"));  	LL_INFOS("InitInfo") << "LLCurl initialized." << LL_ENDL ;      LLMachineID::init(); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index c0065a94e6..cebe93f042 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -73,7 +73,7 @@  #include "llwearablelist.h"  // Marketplace outbox current disabled -#define ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU	1 +#define ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU	0  #define ENABLE_MERCHANT_SEND_TO_MARKETPLACE_CONTEXT_MENU 0  #define BLOCK_WORN_ITEMS_IN_OUTBOX 1 diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index f2a24bf18a..bd20210190 100644..100755 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -514,9 +514,11 @@ void LLMeshRepoThread::run()  					mLODReqQ.pop();  					LLMeshRepository::sLODProcessing--;  					mMutex->unlock(); -					if (fetchMeshLOD(req.mMeshParams, req.mLOD)) +					if (!fetchMeshLOD(req.mMeshParams, req.mLOD, count))//failed, resubmit  					{ -						count++; +						mMutex->lock(); +						mLODReqQ.push(req) ;  +						mMutex->unlock();  					}  				}  			} @@ -528,9 +530,11 @@ void LLMeshRepoThread::run()  					HeaderRequest req = mHeaderReqQ.front();  					mHeaderReqQ.pop();  					mMutex->unlock(); -					if (fetchMeshHeader(req.mMeshParams)) +					if (!fetchMeshHeader(req.mMeshParams, count))//failed, resubmit  					{ -						count++; +						mMutex->lock(); +						mHeaderReqQ.push(req) ; +						mMutex->unlock();  					}  				}  			} @@ -675,6 +679,7 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)  		return false;  	} +	bool ret = true ;  	U32 header_size = mMeshHeaderSize[mesh_id];  	if (header_size > 0) @@ -690,7 +695,7 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)  			//check VFS for mesh skin info  			LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH);  			if (file.getSize() >= offset+size) -			{ +			{				  				LLMeshRepository::sCacheBytesRead += size;  				file.seek(offset);  				U8* buffer = new U8[size]; @@ -706,7 +711,7 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)  				if (!zero)  				{ //attempt to parse  					if (skinInfoReceived(mesh_id, buffer, size)) -					{ +					{						  						delete[] buffer;  						return true;  					} @@ -721,10 +726,13 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)  			std::string http_url = constructUrl(mesh_id);  			if (!http_url.empty()) -			{ -				LLMeshRepository::sHTTPRequestCount++; -				mCurlRequest->getByteRange(constructUrl(mesh_id), headers, offset, size, -										   new LLMeshSkinInfoResponder(mesh_id, offset, size)); +			{				 +				ret = mCurlRequest->getByteRange(http_url, headers, offset, size, +												 new LLMeshSkinInfoResponder(mesh_id, offset, size)); +				if(ret) +				{ +					LLMeshRepository::sHTTPRequestCount++; +				}  			}  		}  	} @@ -734,7 +742,7 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)  	}  	//early out was not hit, effectively fetched -	return true; +	return ret;  }  bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id) @@ -748,7 +756,8 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)  	}  	U32 header_size = mMeshHeaderSize[mesh_id]; - +	bool ret = true ; +	  	if (header_size > 0)  	{  		S32 version = mMeshHeader[mesh_id]["version"].asInteger(); @@ -764,6 +773,7 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)  			if (file.getSize() >= offset+size)  			{  				LLMeshRepository::sCacheBytesRead += size; +  				file.seek(offset);  				U8* buffer = new U8[size];  				file.read(buffer, size); @@ -793,10 +803,13 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)  			std::string http_url = constructUrl(mesh_id);  			if (!http_url.empty()) -			{ -				LLMeshRepository::sHTTPRequestCount++; -				mCurlRequest->getByteRange(http_url, headers, offset, size, -										   new LLMeshDecompositionResponder(mesh_id, offset, size)); +			{				 +				ret = mCurlRequest->getByteRange(http_url, headers, offset, size, +												 new LLMeshDecompositionResponder(mesh_id, offset, size)); +				if(ret) +				{ +					LLMeshRepository::sHTTPRequestCount++; +				}  			}  		}  	} @@ -806,7 +819,7 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)  	}  	//early out was not hit, effectively fetched -	return true; +	return ret;  }  bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id) @@ -820,6 +833,7 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)  	}  	U32 header_size = mMeshHeaderSize[mesh_id]; +	bool ret = true ;  	if (header_size > 0)  	{ @@ -865,10 +879,14 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)  			std::string http_url = constructUrl(mesh_id);  			if (!http_url.empty()) -			{ -				LLMeshRepository::sHTTPRequestCount++; -				mCurlRequest->getByteRange(http_url, headers, offset, size, -										   new LLMeshPhysicsShapeResponder(mesh_id, offset, size)); +			{				 +				ret = mCurlRequest->getByteRange(http_url, headers, offset, size, +												 new LLMeshPhysicsShapeResponder(mesh_id, offset, size)); + +				if(ret) +				{ +					LLMeshRepository::sHTTPRequestCount++; +				}  			}  		}  		else @@ -882,13 +900,12 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)  	}  	//early out was not hit, effectively fetched -	return true; +	return ret;  } -bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params) +//return false if failed to get header +bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params, U32& count)  { -	bool retval = false; -  	{  		//look for mesh in asset in vfs  		LLVFile file(gVFS, mesh_params.getSculptID(), LLAssetType::AT_MESH); @@ -903,35 +920,39 @@ bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params)  			file.read(buffer, bytes);  			if (headerReceived(mesh_params, buffer, bytes))  			{ //did not do an HTTP request, return false -				return false; +				return true;  			}  		}  	} -	//either cache entry doesn't exist or is corrupt, request header from simulator - +	//either cache entry doesn't exist or is corrupt, request header from simulator	 +	bool retval = true ;  	std::vector<std::string> headers;  	headers.push_back("Accept: application/octet-stream");  	std::string http_url = constructUrl(mesh_params.getSculptID());  	if (!http_url.empty())  	{ -		retval = true;  		//grab first 4KB if we're going to bother with a fetch.  Cache will prevent future fetches if a full mesh fits  		//within the first 4KB -		//NOTE -- this will break of headers ever exceed 4KB -		LLMeshRepository::sHTTPRequestCount++; -		mCurlRequest->getByteRange(http_url, headers, 0, 4096, new LLMeshHeaderResponder(mesh_params)); +		//NOTE -- this will break of headers ever exceed 4KB		 +		retval = mCurlRequest->getByteRange(http_url, headers, 0, 4096, new LLMeshHeaderResponder(mesh_params)); +		if(retval) +		{ +			LLMeshRepository::sHTTPRequestCount++; +		} +		count++;  	}  	return retval;  } -bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod) +//return false if failed to get mesh lod. +bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod, U32& count)  { //protected by mMutex  	mHeaderMutex->lock(); -	bool retval = false; +	bool retval = true;  	LLUUID mesh_id = mesh_params.getSculptID(); @@ -968,7 +989,7 @@ bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod)  					if (lodReceived(mesh_params, lod, buffer, size))  					{  						delete[] buffer; -						return false; +						return true;  					}  				} @@ -981,11 +1002,15 @@ bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod)  			std::string http_url = constructUrl(mesh_id);  			if (!http_url.empty()) -			{ -				retval = true; -				LLMeshRepository::sHTTPRequestCount++; -				mCurlRequest->getByteRange(constructUrl(mesh_id), headers, offset, size, +			{				 +				retval = mCurlRequest->getByteRange(constructUrl(mesh_id), headers, offset, size,  										   new LLMeshLODResponder(mesh_params, lod, offset, size)); + +				if(retval) +				{ +					LLMeshRepository::sHTTPRequestCount++; +				} +				count++;  			}  			else  			{ @@ -1555,8 +1580,17 @@ void LLMeshUploadThread::doWholeModelUpload()  		LLSD body = full_model_data["asset_resources"];  		dump_llsd_to_file(body,make_dump_name("whole_model_body_",dump_num));  		LLCurlRequest::headers_t headers; -		mCurlRequest->post(mWholeModelUploadURL, headers, body, -						   new LLWholeModelUploadResponder(this, full_model_data, mUploadObserverHandle), mMeshUploadTimeOut); + +		{ +			LLCurl::ResponderPtr responder = new LLWholeModelUploadResponder(this, full_model_data, mUploadObserverHandle) ; + +			while(!mCurlRequest->post(mWholeModelUploadURL, headers, body, responder, mMeshUploadTimeOut)) +			{ +				//sleep for 10ms to prevent eating a whole core +				apr_sleep(10000); +			} +		} +  		do  		{  			mCurlRequest->process(); @@ -1586,8 +1620,15 @@ void LLMeshUploadThread::requestWholeModelFee()  	mPendingUploads++;  	LLCurlRequest::headers_t headers; -	mCurlRequest->post(mWholeModelFeeCapability, headers, model_data, -					   new LLWholeModelFeeResponder(this,model_data, mFeeObserverHandle), mMeshUploadTimeOut); + +	{ +		LLCurl::ResponderPtr responder = new LLWholeModelFeeResponder(this,model_data, mFeeObserverHandle) ; +		while(!mCurlRequest->post(mWholeModelFeeCapability, headers, model_data, responder, mMeshUploadTimeOut)) +		{ +			//sleep for 10ms to prevent eating a whole core +			apr_sleep(10000); +		} +	}  	do  	{ diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index 1bdbc2856b..da81bb057b 100644 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -323,8 +323,8 @@ public:  	virtual void run();  	void loadMeshLOD(const LLVolumeParams& mesh_params, S32 lod); -	bool fetchMeshHeader(const LLVolumeParams& mesh_params); -	bool fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod); +	bool fetchMeshHeader(const LLVolumeParams& mesh_params, U32& count); +	bool fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod, U32& count);  	bool headerReceived(const LLVolumeParams& mesh_params, U8* data, S32 data_size);  	bool lodReceived(const LLVolumeParams& mesh_params, S32 lod, U8* data, S32 data_size);  	bool skinInfoReceived(const LLUUID& mesh_id, U8* data, S32 data_size); diff --git a/indra/newview/lltexlayer.h b/indra/newview/lltexlayer.h index 85dadb213c..4f43547dae 100644 --- a/indra/newview/lltexlayer.h +++ b/indra/newview/lltexlayer.h @@ -261,6 +261,8 @@ private:  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  class LLTexLayerSetBuffer : public LLViewerDynamicTexture  { +	LOG_CLASS(LLTexLayerSetBuffer); +  public:  	LLTexLayerSetBuffer(LLTexLayerSet* const owner, S32 width, S32 height);  	virtual ~LLTexLayerSetBuffer(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 5f64dba100..8a713ae22c 100644..100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1960,33 +1960,42 @@ void LLViewerWindow::shutdownViews()  	// clean up warning logger  	LLError::removeRecorder(RecordToChatConsole::getInstance()); +	llinfos << "Warning logger is cleaned." << llendl ; +  	delete mDebugText;  	mDebugText = NULL; +	llinfos << "DebugText deleted." << llendl ; +  	// Cleanup global views  	if (gMorphView)  	{  		gMorphView->setVisible(FALSE);  	} +	llinfos << "Global views cleaned." << llendl ;  	// DEV-40930: Clear sModalStack. Otherwise, any LLModalDialog left open  	// will crump with LL_ERRS.  	LLModalDialog::shutdownModals(); -	 +	llinfos << "LLModalDialog shut down." << llendl;  +  	// destroy the nav bar, not currently part of gViewerWindow  	// *TODO: Make LLNavigationBar part of gViewerWindow  	if (LLNavigationBar::instanceExists())  	{  		delete LLNavigationBar::getInstance();  	} +	llinfos << "LLNavigationBar destroyed." << llendl ;  	// destroy menus after instantiating navbar above, as it needs  	// access to gMenuHolder  	cleanup_menus(); +	llinfos << "menus destroyed." << llendl ;  	// Delete all child views.  	delete mRootView;  	mRootView = NULL; +	llinfos << "RootView deleted." << llendl ;  	// Automatically deleted as children of mRootView.  Fix the globals.  	gStatusBar = NULL; diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 4cd61cecf9..dd0317f555 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -78,6 +78,8 @@ class LLVOAvatar :  	public LLCharacter,  	public boost::signals2::trackable  { +	LOG_CLASS(LLVOAvatar); +  public:  	friend class LLVOAvatarSelf;  protected: diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 581912f844..f1df67494f 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -1574,7 +1574,7 @@ void LLVOAvatarSelf::invalidateAll()  	{  		invalidateComposite(mBakedTextureDatas[i].mTexLayerSet, TRUE);  	} -	mDebugSelfLoadTimer.reset(); +	//mDebugSelfLoadTimer.reset();  }  //----------------------------------------------------------------------------- @@ -1896,11 +1896,13 @@ BOOL LLVOAvatarSelf::getIsCloud()  		gAgentWearables.getWearableCount(LLWearableType::WT_EYES) == 0 ||  		gAgentWearables.getWearableCount(LLWearableType::WT_SKIN) == 0)	  	{ +		lldebugs << "No body parts" << llendl;  		return TRUE;  	}  	if (!isTextureDefined(TEX_HAIR, 0))  	{ +		lldebugs << "No hair texture" << llendl;  		return TRUE;  	} @@ -1909,12 +1911,14 @@ BOOL LLVOAvatarSelf::getIsCloud()  		if (!isLocalTextureDataAvailable(mBakedTextureDatas[BAKED_LOWER].mTexLayerSet) &&  			(!isTextureDefined(TEX_LOWER_BAKED, 0)))  		{ +			lldebugs << "Lower textures not baked" << llendl;  			return TRUE;  		}  		if (!isLocalTextureDataAvailable(mBakedTextureDatas[BAKED_UPPER].mTexLayerSet) &&  			(!isTextureDefined(TEX_UPPER_BAKED, 0)))  		{ +			lldebugs << "Upper textures not baked" << llendl;  			return TRUE;  		} @@ -1931,10 +1935,12 @@ BOOL LLVOAvatarSelf::getIsCloud()  			const LLViewerTexture* baked_img = getImage( texture_data.mTextureIndex, 0 );  			if (!baked_img || !baked_img->hasGLTexture())  			{ +				lldebugs << "Texture at index " << i << " (texture index is " << texture_data.mTextureIndex << ") is not loaded" << llendl;  				return TRUE;  			}  		} +		lldebugs << "Avatar de-clouded" << llendl;  	}  	return FALSE;  } @@ -2258,6 +2264,7 @@ void LLVOAvatarSelf::setNewBakedTexture( ETextureIndex te, const LLUUID& uuid )  	}  } +// FIXME: This is never called. Something may be broken.  void LLVOAvatarSelf::outputRezDiagnostics() const  {  	if(!gSavedSettings.getBOOL("DebugAvatarLocalTexLoadedTime")) @@ -2315,6 +2322,18 @@ void LLVOAvatarSelf::outputRezDiagnostics() const  	}  } +void LLVOAvatarSelf::outputRezTiming(const std::string& msg) const +{ +	LL_DEBUGS("Avatar Rez") +		<< llformat("%s. Time from avatar creation: %.2f", msg.c_str(), mDebugSelfLoadTimer.getElapsedTimeF32()) +		<< llendl; +} + +void LLVOAvatarSelf::reportAvatarRezTime() const +{ +	// TODO: report mDebugSelfLoadTimer.getElapsedTimeF32() somehow. +} +  //-----------------------------------------------------------------------------  // setCachedBakedTexture()  // A baked texture id was received from a cache query, make it active diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 74ff47a3e4..54dbe81993 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -41,6 +41,7 @@ struct LocalTextureData;  class LLVOAvatarSelf :  	public LLVOAvatar  { +	LOG_CLASS(LLVOAvatarSelf);  /********************************************************************************   **                                                                            ** @@ -358,6 +359,8 @@ public:  	void 					debugWearablesLoaded() { mDebugTimeWearablesLoaded = mDebugSelfLoadTimer.getElapsedTimeF32(); }  	void 					debugAvatarVisible() { mDebugTimeAvatarVisible = mDebugSelfLoadTimer.getElapsedTimeF32(); }  	void 					outputRezDiagnostics() const; +	void					outputRezTiming(const std::string& msg) const; +	void					reportAvatarRezTime() const;  	void 					debugBakedTextureUpload(LLVOAvatarDefines::EBakedTextureIndex index, BOOL finished);  	static void				debugOnTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata); diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp index 920a9a3752..0da70d398b 100644 --- a/indra/newview/llxmlrpctransaction.cpp +++ b/indra/newview/llxmlrpctransaction.cpp @@ -305,6 +305,15 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)  	{  		mCurlRequest = new LLCurlEasyRequest();  	} +	if(!mCurlRequest->isValid()) +	{ +		llwarns << "mCurlRequest is invalid." << llendl ; + +		delete mCurlRequest ; +		mCurlRequest = NULL ; +		return ; +	} +  	mErrorCert = NULL;  //	mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // useful for debugging @@ -357,10 +366,20 @@ LLXMLRPCTransaction::Impl::~Impl()  	}  	delete mCurlRequest; +	mCurlRequest = NULL ;  }  bool LLXMLRPCTransaction::Impl::process()  { +	if(!mCurlRequest || !mCurlRequest->isValid()) +	{ +		llwarns << "transaction failed." << llendl ; + +		delete mCurlRequest ; +		mCurlRequest = NULL ; +		return true ; //failed, quit. +	} +  	switch(mStatus)  	{  		case LLXMLRPCTransaction::StatusComplete: diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 1d11abcf73..cd8550b00d 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -153,13 +153,6 @@           function="BuyCurrency" />        </menu_item_call>        <menu_item_call -         label="Merchant Outbox..." -         name="MerchantOutbox"> -        <menu_item_call.on_click -         function="Floater.ToggleOrBringToFront" -         parameter="outbox" /> -      </menu_item_call> -      <menu_item_call             label="Account dashboard..."             name="Manage My Account">          <menu_item_call.on_click | 
