diff options
| author | Xiaohong Bao <bao@lindenlab.com> | 2013-08-16 17:59:24 -0600 | 
|---|---|---|
| committer | Xiaohong Bao <bao@lindenlab.com> | 2013-08-16 17:59:24 -0600 | 
| commit | 4290365ebbf5505bee4fbed8043996fa7687fd03 (patch) | |
| tree | 06d2acc5d5397ed6f5ce26d597aadf26fe75ccb5 | |
| parent | f8e3a34348ab98ecd56d53360b8f2b6512ad6bba (diff) | |
| parent | 28151dd8367d558fa2622832eb3819624e19705d (diff) | |
Automated merge with http://bitbucket.org/lindenlab/viewer-interesting
| -rwxr-xr-x | indra/newview/llviewerregion.cpp | 36 | ||||
| -rwxr-xr-x | indra/newview/llviewertexturelist.cpp | 24 | ||||
| -rwxr-xr-x | indra/newview/pipeline.cpp | 4 | 
3 files changed, 42 insertions, 22 deletions
| diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 24c56df8db..ba0402344e 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -72,6 +72,8 @@  #include "llsdserialize.h"  #include "llvieweroctree.h"  #include "llviewerdisplay.h" +#include "llviewerwindow.h" +#include "llprogressview.h"  #ifdef LL_WINDOWS  	#pragma warning(disable:4355) @@ -90,7 +92,7 @@ const U32 DEFAULT_MAX_REGION_WIDE_PRIM_COUNT = 15000;  BOOL LLViewerRegion::sVOCacheCullingEnabled = FALSE;  S32  LLViewerRegion::sLastCameraUpdated = 0; -S32  LLViewerRegion::sNewObjectCreationThrottle = 0; +S32  LLViewerRegion::sNewObjectCreationThrottle = -1;  typedef std::map<std::string, std::string> CapabilityMap; @@ -1205,7 +1207,12 @@ BOOL LLViewerRegion::idleUpdate(F32 max_update_time)  	max_update_time -= update_timer.getElapsedTimeF32();	 -	if(max_update_time < 0.f) +	if(gViewerWindow->getProgressView()->getVisible()) +	{ +		//in case rendering pipeline is not started yet. +		mImpl->mVOCachePartition->cull(*(LLViewerCamera::getInstance()), false); +	} +	else if(max_update_time < 0.f)  	{  		return did_update;  	} @@ -1226,23 +1233,28 @@ BOOL LLViewerRegion::idleUpdate(F32 max_update_time)  void LLViewerRegion::calcNewObjectCreationThrottle()  {  	static LLCachedControl<S32> new_object_creation_throttle(gSavedSettings,"NewObjectCreationThrottle"); +	static LLFrameTimer timer; + +	// +	//sNewObjectCreationThrottle = +	//-2: throttle is disabled because either the screen is showing progress view, or immediate after the screen is not black +	//-1: throttle is disabled by the debug setting +	//0:  no new object creation is allowed +	//>0: valid throttling number +	// -	sNewObjectCreationThrottle = new_object_creation_throttle; -	if(LLStartUp::getStartupState() < STATE_STARTED || gTeleportDisplay) +	if(gViewerWindow->getProgressView()->getVisible())  	{ -		sNewObjectCreationThrottle = -1; //cancel the throttling		 +		sNewObjectCreationThrottle = -2; //cancel the throttling +		timer.reset();  	}	  	else if(sNewObjectCreationThrottle < 0) //just recoved from the login/teleport screen  	{ -		if(new_object_creation_throttle > 0) +		if(new_object_creation_throttle > 0 && timer.getElapsedTimeF32() > 2.0f) //wait for two seconds to reset the throttle  		{ -			sNewObjectCreationThrottle = 4096; //a big number +			sNewObjectCreationThrottle = new_object_creation_throttle; //reset  		}  	} -	else -	{ -		sNewObjectCreationThrottle = llmax((S32)new_object_creation_throttle, (S32)(sNewObjectCreationThrottle >> 1)); -	}  }  BOOL LLViewerRegion::isViewerCameraStatic() @@ -1295,7 +1307,7 @@ F32 LLViewerRegion::killInvisibleObjects(F32 max_time)  		mLastVisitedEntry = *iter;  	} -	mInvisibilityCheckHistory <<= 2; +	mInvisibilityCheckHistory <<= 1;  	if(!delete_list.empty())  	{  		mInvisibilityCheckHistory |= 1; diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index f4dc04bd51..046dfd6eaf 100755 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -59,7 +59,8 @@  #include "llxuiparser.h"  #include "lltracerecording.h"  #include "llviewerdisplay.h" -#include "llstartup.h" +#include "llviewerwindow.h" +#include "llprogressview.h"  ////////////////////////////////////////////////////////////////////////////  void (*LLViewerTextureList::sUUIDCallback)(void **, const LLUUID&) = NULL; @@ -756,12 +757,9 @@ void LLViewerTextureList::updateImagesDecodePriorities()  		F32 lazy_flush_timeout = 30.f; // stop decoding  		F32 max_inactive_time  = 20.f; // actually delete  		S32 min_refs = 3; // 1 for mImageList, 1 for mUUIDMap, 1 for local reference -		if(LLStartUp::getStartupState() < STATE_STARTED) -		{ -			//do not remove pre-fetched images if viewer does not finish logging in. -			lazy_flush_timeout = 30000.f; -			max_inactive_time = 20000.f; -		} + +		//reset imagep->getLastReferencedTimer() when screen is showing the progress view to avoid removing pre-fetched textures too soon. +		bool reset_timer = gViewerWindow->getProgressView()->getVisible();          static const S32 MAX_PRIO_UPDATES = gSavedSettings.getS32("TextureFetchUpdatePriorities");         // default: 32  		const size_t max_update_count = llmin((S32) (MAX_PRIO_UPDATES*MAX_PRIO_UPDATES*gFrameIntervalSeconds.value()) + 1, MAX_PRIO_UPDATES); @@ -789,7 +787,11 @@ void LLViewerTextureList::updateImagesDecodePriorities()  			S32 num_refs = imagep->getNumRefs();  			if (num_refs == min_refs)  			{ -				if (imagep->getLastReferencedTimer()->getElapsedTimeF32() > lazy_flush_timeout) +				if(reset_timer) +				{ +					imagep->getLastReferencedTimer()->reset(); +				} +				else if (imagep->getLastReferencedTimer()->getElapsedTimeF32() > lazy_flush_timeout)  				{  					// Remove the unused image from the image list  					deleteImage(imagep); @@ -818,7 +820,11 @@ void LLViewerTextureList::updateImagesDecodePriorities()  				}  				else if(imagep->isInactive())  				{ -					if (imagep->getLastReferencedTimer()->getElapsedTimeF32() > max_inactive_time) +					if(reset_timer) +					{ +						imagep->getLastReferencedTimer()->reset(); +					} +					else if (imagep->getLastReferencedTimer()->getElapsedTimeF32() > max_inactive_time)  					{  						imagep->setDeletionCandidate() ;  					} diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 6754918149..8d70629206 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -112,6 +112,7 @@  #include "llfloaterpathfindingcharacters.h"  #include "llpathfindingpathtool.h"  #include "llscenemonitor.h" +#include "llprogressview.h"  #ifdef _DEBUG  // Debug indices is disabled for now for debug performance - djs 4/24/02 @@ -2535,7 +2536,8 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl  		LLVOCachePartition* vo_part = region->getVOCachePartition();  		if(vo_part)  		{ -			vo_part->cull(camera, can_use_occlusion && use_occlusion && !gUseWireframe); +			bool do_occlusion_cull = can_use_occlusion && use_occlusion && !gUseWireframe && !gViewerWindow->getProgressView()->getVisible(); +			vo_part->cull(camera, do_occlusion_cull);  		}  	} | 
