diff options
| author | Richard Linden <none@none> | 2013-05-10 17:57:12 -0700 | 
|---|---|---|
| committer | Richard Linden <none@none> | 2013-05-10 17:57:12 -0700 | 
| commit | 3a0e45ff088278cba5314974be6539b05009b8da (patch) | |
| tree | e2c771660555596f3bee371caff106d7f38307a2 /indra/newview | |
| parent | 41b4374760dd060a7f51a4a837851d5a03b7242a (diff) | |
SH-3931 WIP Interesting: Add graphs to visualize scene load metrics
renamed LLView::handleVisibilityChange to onVisibilityChange to reflect
standard naming conventions for handlers vs. reactors
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 11 | ||||
| -rwxr-xr-x | indra/newview/llagent.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llagent.h | 1 | ||||
| -rw-r--r-- | indra/newview/llfloaterbuyland.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llfloaterland.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llfloaterland.h | 2 | ||||
| -rw-r--r-- | indra/newview/llimfloater.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llimfloater.h | 2 | ||||
| -rw-r--r-- | indra/newview/llmediactrl.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llmediactrl.h | 2 | ||||
| -rw-r--r-- | indra/newview/llpaneloutfitedit.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llpaneloutfitedit.h | 2 | ||||
| -rw-r--r-- | indra/newview/llpaneltopinfobar.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llpaneltopinfobar.h | 2 | ||||
| -rw-r--r-- | indra/newview/llpreviewgesture.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llpreviewgesture.h | 2 | ||||
| -rw-r--r-- | indra/newview/llscenemonitor.cpp | 183 | ||||
| -rw-r--r-- | indra/newview/llscenemonitor.h | 22 | ||||
| -rw-r--r-- | indra/newview/llsidepanelappearance.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llsidepanelappearance.h | 2 | 
20 files changed, 128 insertions, 141 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 8a1c37d242..ed8d0bf10d 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9469,6 +9469,17 @@        <key>Value</key>        <integer>0</integer>      </map> +    <key>SceneLoadingMonitorSampleTime</key> +    <map> +      <key>Comment</key> +      <string>Time between screen samples when monitor scene load (seconds)</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>F32</string> +      <key>Value</key> +      <real>1</real> +    </map>      <key>ScriptHelpFollowsCursor</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 2e0fc039c4..6b996edb76 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -1046,14 +1046,6 @@ const LLVector3d &LLAgent::getPositionGlobal() const  	return mPositionGlobal;  } -bool LLAgent::isPositionChanged() const -{ -	LLVector3d diff; -	diff = mPositionGlobal - mLastPositionGlobal; -	 -	return diff.lengthSquared() > 1.0; -} -  //-----------------------------------------------------------------------------  // getPositionAgent()  //----------------------------------------------------------------------------- diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index f8dcfb9789..46dad1dc20 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -252,7 +252,6 @@ public:  	const LLVector3d &getLastPositionGlobal() const { return mLastPositionGlobal; }  	void			setLastPositionGlobal(const LLVector3d &pos) { mLastPositionGlobal = pos; } -	bool            isPositionChanged() const;  private:  	std::set<U64>	mRegionsVisited;		// Stat - what distinct regions has the avatar been to?  	F64				mDistanceTraveled;		// Stat - how far has the avatar moved? diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 8223e89b64..c1cea58801 100644 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -202,7 +202,7 @@ public:  	virtual void draw();  	virtual BOOL canClose(); -	void onVisibilityChange ( const LLSD& new_visibility ); +	void onVisibilityChanged ( const LLSD& new_visibility );  }; @@ -1008,7 +1008,7 @@ BOOL LLFloaterBuyLandUI::canClose()  	return can_close;  } -void LLFloaterBuyLandUI::onVisibilityChange ( const LLSD& new_visibility ) +void LLFloaterBuyLandUI::onVisibilityChanged ( const LLSD& new_visibility )  {  	if (new_visibility.asBoolean())  	{ diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index be743d57d2..a2675d6d3e 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -225,7 +225,7 @@ void LLFloaterLand::onOpen(const LLSD& key)  	refresh();  } -void LLFloaterLand::onVisibilityChange(const LLSD& visible) +void LLFloaterLand::onVisibilityChanged(const LLSD& visible)  {  	if (!visible.asBoolean())  	{ @@ -255,7 +255,7 @@ LLFloaterLand::LLFloaterLand(const LLSD& seed)  BOOL LLFloaterLand::postBuild()  {	 -	setVisibleCallback(boost::bind(&LLFloaterLand::onVisibilityChange, this, _2)); +	setVisibleCallback(boost::bind(&LLFloaterLand::onVisibilityChanged, this, _2));  	LLTabContainer* tab = getChild<LLTabContainer>("landtab"); diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index 4f1c10274a..dccdfc9acb 100644 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -88,7 +88,7 @@ private:  	LLFloaterLand(const LLSD& seed);  	virtual ~LLFloaterLand(); -	void onVisibilityChange(const LLSD& visible); +	void onVisibilityChanged(const LLSD& visible);  protected: diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index f68012e306..f27eaba760 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -165,7 +165,7 @@ void LLIMFloater::newIMCallback(const LLSD& data){  	}  } -void LLIMFloater::onVisibilityChange(const LLSD& new_visibility) +void LLIMFloater::onVisibilityChanged(const LLSD& new_visibility)  {  	bool visible = new_visibility.asBoolean(); diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h index f7cd35b5eb..9bdcc113d6 100644 --- a/indra/newview/llimfloater.h +++ b/indra/newview/llimfloater.h @@ -88,7 +88,7 @@ public:  	// called when docked floater's position has been set by chiclet  	void setPositioned(bool b) { mPositioned = b; }; -	void onVisibilityChange(const LLSD& new_visibility); +	void onVisibilityChanged(const LLSD& new_visibility);  	void processIMTyping(const LLIMInfo* im_info, BOOL typing);  	void processAgentListUpdates(const LLSD& body);  	void processSessionUpdate(const LLSD& session_update); diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index b67ddf9b25..baf5a3a839 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -392,7 +392,7 @@ BOOL LLMediaCtrl::postBuild ()  	mContextMenu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>(  		"menu_media_ctrl.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance()); -	setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2)); +	setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChanged, this, _2));  	return TRUE;  } @@ -450,7 +450,7 @@ BOOL LLMediaCtrl::handleUnicodeCharHere(llwchar uni_char)  ////////////////////////////////////////////////////////////////////////////////  // -void LLMediaCtrl::onVisibilityChange ( const LLSD& new_visibility ) +void LLMediaCtrl::onVisibilityChanged ( const LLSD& new_visibility )  {  	// set state of frequent updates automatically if visibility changes  	if ( new_visibility.asBoolean() ) diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h index 964ae08530..db501cdb8c 100644 --- a/indra/newview/llmediactrl.h +++ b/indra/newview/llmediactrl.h @@ -171,7 +171,7 @@ public:  		void convertInputCoords(S32& x, S32& y);  	private: -		void onVisibilityChange ( const LLSD& new_visibility ); +		void onVisibilityChanged ( const LLSD& new_visibility );  		void onPopup(const LLSD& notification, const LLSD& response);  		const S32 mTextureDepthBytes; diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index 36234b9536..26496ec9e2 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -488,7 +488,7 @@ BOOL LLPanelOutfitEdit::postBuild()  	childSetCommitCallback("shop_btn_1", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);  	childSetCommitCallback("shop_btn_2", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL); -	setVisibleCallback(boost::bind(&LLPanelOutfitEdit::onVisibilityChange, this, _2)); +	setVisibleCallback(boost::bind(&LLPanelOutfitEdit::onVisibilityChanged, this, _2));  	mWearablesGearMenuBtn = getChild<LLMenuButton>("wearables_gear_menu_btn");  	mGearMenuBtn = getChild<LLMenuButton>("gear_menu_btn"); @@ -774,7 +774,7 @@ void LLPanelOutfitEdit::onPlusBtnClicked(void)  	}  } -void LLPanelOutfitEdit::onVisibilityChange(const LLSD &in_visible_chain) +void LLPanelOutfitEdit::onVisibilityChanged(const LLSD &in_visible_chain)  {  	showAddWearablesPanel(false);  	mWearableItemsList->resetSelection(); diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index 5d4b8d4644..30870daf40 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -145,7 +145,7 @@ public:  	void updatePlusButton();  	void onPlusBtnClicked(void); -	void onVisibilityChange(const LLSD &in_visible_chain); +	void onVisibilityChanged(const LLSD &in_visible_chain);  	void applyFolderViewFilter(EFolderViewItemType type);  	void applyListViewFilter(EListViewItemType type); diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp index 1830086da2..fa371bd0ca 100644 --- a/indra/newview/llpaneltopinfobar.cpp +++ b/indra/newview/llpaneltopinfobar.cpp @@ -169,7 +169,7 @@ BOOL LLPanelTopInfoBar::postBuild()  	mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(  			boost::bind(&LLPanelTopInfoBar::onAgentParcelChange, this)); -	setVisibleCallback(boost::bind(&LLPanelTopInfoBar::onVisibilityChange, this, _2)); +	setVisibleCallback(boost::bind(&LLPanelTopInfoBar::onVisibilityChanged, this, _2));  	return TRUE;  } @@ -186,7 +186,7 @@ void LLPanelTopInfoBar::onNavBarShowParcelPropertiesCtrlChanged()  // when panel is shown, all minimized floaters should be shifted downwards to prevent overlapping of  // PanelTopInfoBar. See EXT-7951. -void LLPanelTopInfoBar::onVisibilityChange(const LLSD& show) +void LLPanelTopInfoBar::onVisibilityChanged(const LLSD& show)  {  	// this height is used as a vertical offset for ALREADY MINIMIZED floaters  	// when PanelTopInfoBar visibility changes diff --git a/indra/newview/llpaneltopinfobar.h b/indra/newview/llpaneltopinfobar.h index d58d95be90..f37bd9c048 100644 --- a/indra/newview/llpaneltopinfobar.h +++ b/indra/newview/llpaneltopinfobar.h @@ -57,7 +57,7 @@ public:  	/**  	 * Called when the top info bar gets shown or hidden  	 */ -	void onVisibilityChange(const LLSD& show); +	void onVisibilityChanged(const LLSD& show);  	boost::signals2::connection setResizeCallback( const resize_signal_t::slot_type& cb ); diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index cbb4d5f964..bda603262d 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -253,7 +253,7 @@ void LLPreviewGesture::onUpdateSucceeded()  	refresh();  } -void LLPreviewGesture::onVisibilityChange ( const LLSD& new_visibility ) +void LLPreviewGesture::onVisibilityChanged ( const LLSD& new_visibility )  {  	if (new_visibility.asBoolean())  	{ @@ -333,7 +333,7 @@ LLPreviewGesture::~LLPreviewGesture()  BOOL LLPreviewGesture::postBuild()  { -	setVisibleCallback(boost::bind(&LLPreviewGesture::onVisibilityChange, this, _2)); +	setVisibleCallback(boost::bind(&LLPreviewGesture::onVisibilityChanged, this, _2));  	LLLineEditor* edit;  	LLComboBox* combo; diff --git a/indra/newview/llpreviewgesture.h b/indra/newview/llpreviewgesture.h index fd4fcf9d8f..7ce5706a0d 100644 --- a/indra/newview/llpreviewgesture.h +++ b/indra/newview/llpreviewgesture.h @@ -102,7 +102,7 @@ protected:  	// "Sound", "Chat", or "Wait"  	LLScrollListItem* addStep(const enum EStepType step_type); -	void onVisibilityChange ( const LLSD& new_visibility ); +	void onVisibilityChanged ( const LLSD& new_visibility );  	static std::string getLabel(std::vector<std::string> labels);  	static void updateLabel(LLScrollListItem* item); diff --git a/indra/newview/llscenemonitor.cpp b/indra/newview/llscenemonitor.cpp index 7f7e61cc88..5a5fd6f333 100644 --- a/indra/newview/llscenemonitor.cpp +++ b/indra/newview/llscenemonitor.cpp @@ -56,18 +56,16 @@ LLSceneMonitorView* gSceneMonitorView = NULL;  //  LLSceneMonitor::LLSceneMonitor() :  -	mEnabled(FALSE),  +	mEnabled(false),   	mDiff(NULL),  	mDiffResult(0.f),  	mDiffTolerance(0.1f), -	mCurTarget(NULL),  -	mNeedsUpdateDiff(FALSE), -	mHasNewDiff(FALSE), -	mHasNewQueryResult(FALSE), -	mDebugViewerVisible(FALSE), -	mQuitting(FALSE), +	mNeedsUpdateDiff(false), +	mHasNewDiff(false), +	mHasNewQueryResult(false), +	mDebugViewerVisible(false), +	mQuitting(false),  	mQueryObject(0), -	mSamplingTime(1.0f),  	mDiffPixelRatio(0.5f)  {  	mFrames[0] = NULL; @@ -79,7 +77,7 @@ LLSceneMonitor::LLSceneMonitor() :  LLSceneMonitor::~LLSceneMonitor()  { -	mQuitting = TRUE; +	mQuitting = true;  	destroyClass();  } @@ -101,7 +99,6 @@ void LLSceneMonitor::reset()  	mFrames[0] = NULL;  	mFrames[1] = NULL;  	mDiff = NULL; -	mCurTarget = NULL;  	unfreezeScene(); @@ -173,54 +170,15 @@ void LLSceneMonitor::generateDitheringTexture(S32 width, S32 height)  	mDitherScaleT = (F32)height / mDitherMatrixWidth;  } -void LLSceneMonitor::setDebugViewerVisible(BOOL visible)  +void LLSceneMonitor::setDebugViewerVisible(bool visible)   {  	mDebugViewerVisible = visible;  } -bool LLSceneMonitor::preCapture() +LLRenderTarget& LLSceneMonitor::getCaptureTarget()  { -	static LLCachedControl<bool> monitor_enabled(gSavedSettings,"SceneLoadingMonitorEnabled"); -	static LLFrameTimer timer;	 - -	mCurTarget = NULL; -	if (!LLGLSLShader::sNoFixedFunction) -	{ -		return false; -	} - -	BOOL enabled = (BOOL)monitor_enabled || mDebugViewerVisible; -	if(mEnabled != enabled) -	{ -		if(mEnabled) -		{ -			reset(); -			unfreezeScene(); -		} -		else -		{ -			freezeScene(); -		} - -		mEnabled = enabled; -	} - -	if(!mEnabled) -	{ -		return false; -	} - -	if(gAgent.isPositionChanged()) -	{ -		mRecording->reset(); -	} +	LLRenderTarget* cur_target = NULL; -	if(timer.getElapsedTimeF32() < mSamplingTime) -	{ -		return false; -	} -	timer.reset(); -	  	S32 width = gViewerWindow->getWorldViewWidthRaw();  	S32 height = gViewerWindow->getWorldViewHeightRaw(); @@ -232,7 +190,7 @@ bool LLSceneMonitor::preCapture()  		gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT);  		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); -		mCurTarget = mFrames[0]; +		cur_target = mFrames[0];  	}  	else if(!mFrames[1])  	{ @@ -242,21 +200,22 @@ bool LLSceneMonitor::preCapture()  		gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT);  		gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); -		mCurTarget = mFrames[1]; +		cur_target = mFrames[1];  	}  	else //swap  	{ -		mCurTarget = mFrames[0]; +		cur_target = mFrames[0];  		mFrames[0] = mFrames[1]; -		mFrames[1] = mCurTarget; +		mFrames[1] = cur_target;  	} -	if(mCurTarget->getWidth() != width || mCurTarget->getHeight() != height) //size changed +	if(cur_target->getWidth() != width || cur_target->getHeight() != height) //size changed  	{ -		mCurTarget->resize(width, height, GL_RGB); +		cur_target->resize(width, height, GL_RGB);  	} -	return true; +	// we're promising the target exists +	return *cur_target;  }  void LLSceneMonitor::freezeAvatar(LLCharacter* avatarp) @@ -308,33 +267,56 @@ void LLSceneMonitor::unfreezeScene()  void LLSceneMonitor::capture()  {  	static U32 last_capture_time = 0; +	static LLCachedControl<bool> monitor_enabled(gSavedSettings,"SceneLoadingMonitorEnabled"); +	static LLCachedControl<F32>  scene_load_sample_time(gSavedSettings, "SceneLoadingMonitorSampleTime"); +	static LLFrameTimer timer;	 -	if(last_capture_time == gFrameCount) +	LLTrace::Recording* last_frame_recording = LLTrace::get_frame_recording()->getPrevRecording(); +	if (last_frame_recording->getMax(LLViewerCamera::getVelocityStat()) > 0.001f +		|| last_frame_recording->getMax(LLViewerCamera::getAngularVelocityStat() > 0.01f)  	{ -		return; +		mRecording->reset();  	} -	last_capture_time = gFrameCount; -	preCapture(); - -	if(!mCurTarget) +	bool enabled = monitor_enabled || mDebugViewerVisible; +	if(mEnabled != enabled)  	{ -		return; +		if(mEnabled) +		{ +			reset(); +			unfreezeScene(); +		} +		else +		{ +			freezeScene(); +		} + +		mEnabled = enabled;  	} -	 -	U32 old_FBO = LLRenderTarget::sCurFBO; -	gGL.getTexUnit(0)->bind(mCurTarget); -	glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); //point to the main frame buffer. +	if(timer.getElapsedTimeF32() > scene_load_sample_time() +		&& mEnabled +		&& LLGLShader::sNoFixedFunction +		&& last_capture_time != gFrameCount) +	{ +		timer.reset(); +		last_capture_time = gFrameCount; + +		LLRenderTarget& cur_target = getCaptureTarget(); + +		U32 old_FBO = LLRenderTarget::sCurFBO; + +		gGL.getTexUnit(0)->bind(&cur_target); +		glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); //point to the main frame buffer. -	glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, mCurTarget->getWidth(), mCurTarget->getHeight()); //copy the content +		glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, cur_target.getWidth(), cur_target.getHeight()); //copy the content -	glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); -	glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);		 -	glBindFramebuffer(GL_FRAMEBUFFER, old_FBO); +		glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); +		glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);		 +		glBindFramebuffer(GL_FRAMEBUFFER, old_FBO); -	mCurTarget = NULL; -	mNeedsUpdateDiff = TRUE; +		mNeedsUpdateDiff = true; +	}  }  bool LLSceneMonitor::needsUpdate() const @@ -342,27 +324,33 @@ bool LLSceneMonitor::needsUpdate() const  	return mNeedsUpdateDiff;  } +static LLFastTimer::DeclareTimer FTM_GENERATE_SCENE_LOAD_DITHER_TEXTURE("Generate Scene Load Dither Texture"); +static LLFastTimer::DeclareTimer FTM_SCENE_LOAD_IMAGE_DIFF("Scene Load Image Diff"); +  void LLSceneMonitor::compare()  {  	if(!mNeedsUpdateDiff)  	{  		return;  	} -	mNeedsUpdateDiff = FALSE; +	mNeedsUpdateDiff = false;  	if(!mFrames[0] || !mFrames[1])  	{  		return;  	}  	if(mFrames[0]->getWidth() != mFrames[1]->getWidth() || mFrames[0]->getHeight() != mFrames[1]->getHeight()) -	{ -		return; //size does not match +	{	//size does not match +		return;   	} +	LLFastTimer _(FTM_SCENE_LOAD_IMAGE_DIFF); +  	S32 width = gViewerWindow->getWindowWidthRaw();  	S32 height = gViewerWindow->getWindowHeightRaw();  	if(!mDiff)  	{ +		LLFastTimer _(FTM_GENERATE_SCENE_LOAD_DITHER_TEXTURE);  		mDiff = new LLRenderTarget();  		mDiff->allocate(width, height, GL_RGBA, false, false, LLTexUnit::TT_TEXTURE, true); @@ -370,6 +358,7 @@ void LLSceneMonitor::compare()  	}  	else if(mDiff->getWidth() != width || mDiff->getHeight() != height)  	{ +		LLFastTimer _(FTM_GENERATE_SCENE_LOAD_DITHER_TEXTURE);  		mDiff->resize(width, height, GL_RGBA);  		generateDitheringTexture(width, height);  	} @@ -411,9 +400,8 @@ void LLSceneMonitor::compare()  	gGL.getTexUnit(2)->disable();  	gGL.getTexUnit(2)->unbind(LLTexUnit::TT_TEXTURE); -	mHasNewDiff = TRUE; +	mHasNewDiff = true; -	//send out the query request.  	queryDiff();  } @@ -430,6 +418,8 @@ void LLSceneMonitor::queryDiff()  //calculate Diff aggregate information in GPU, and enable gl occlusion query to capture it.  void LLSceneMonitor::calcDiffAggregate()  { +	LLFastTimer _(FTM_SCENE_LOAD_IMAGE_DIFF); +  	if(!mHasNewDiff && !mDebugViewerVisible)  	{  		return; @@ -462,8 +452,8 @@ void LLSceneMonitor::calcDiffAggregate()  	if(mHasNewDiff)  	{  		glEndQueryARB(GL_SAMPLES_PASSED_ARB); -		mHasNewDiff = FALSE;	 -		mHasNewQueryResult = TRUE; +		mHasNewDiff = false;	 +		mHasNewQueryResult = true;  	}  	gOneTextureFilterProgram.unbind(); @@ -482,11 +472,13 @@ void LLSceneMonitor::calcDiffAggregate()  static LLTrace::MeasurementStatHandle<> sFramePixelDiff("FramePixelDifference");  void LLSceneMonitor::fetchQueryResult()  { +	LLFastTimer _(FTM_SCENE_LOAD_IMAGE_DIFF); +  	if(!mHasNewQueryResult)  	{  		return;  	} -	mHasNewQueryResult = FALSE; +	mHasNewQueryResult = false;  	GLuint available = 0;  	glGetQueryObjectuivARB(mQueryObject, GL_QUERY_RESULT_AVAILABLE_ARB, &available); @@ -500,25 +492,22 @@ void LLSceneMonitor::fetchQueryResult()  	mDiffResult = count * 0.5f / (mDiff->getWidth() * mDiff->getHeight() * mDiffPixelRatio * mDiffPixelRatio); //0.5 -> (front face + back face) -	addMonitorResult(); -} +	sample(sFramePixelDiff, mDiffResult); -void LLSceneMonitor::addMonitorResult() -{  	const F32 diff_threshold = 0.001f; -	if(mDiffResult < diff_threshold) +	if(mDiffResult > diff_threshold)  	{ -		return; -	} -  		mRecording->extend(); -		sample(sFramePixelDiff, mDiffResult); +	} +} +void LLSceneMonitor::addMonitorResult() +{  	ll_monitor_result_t result;  	result.mTimeStamp = LLImageGL::sLastFrameTime;  	result.mDiff = mDiffResult;  	mMonitorResults.push_back(result); -	} +}  //dump results to a file _scene_monitor_results.csv  void LLSceneMonitor::dumpToFile(std::string file_name) @@ -563,12 +552,10 @@ void LLSceneMonitorView::onClickCloseBtn()  	setVisible(false);	  } -void LLSceneMonitorView::setVisible(BOOL visible) +void LLSceneMonitorView::onVisibilityChange(BOOL visible)  {  	visible = visible && LLGLSLShader::sNoFixedFunction;  	LLSceneMonitor::getInstance()->setDebugViewerVisible(visible); - -	LLView::setVisible(visible);  }  void LLSceneMonitorView::draw() @@ -608,7 +595,7 @@ void LLSceneMonitorView::draw()  	LLFontGL::getFontMonospace()->renderUTF8(num_str, 0, 5, getRect().getHeight() - line_height * lines, color, LLFontGL::LEFT, LLFontGL::TOP);  	lines++; -	num_str = llformat("Sampling time: %.3f seconds", LLSceneMonitor::getInstance()->getSamplingTime()); +	num_str = llformat("Sampling time: %.3f seconds", gSavedSettings->getF32("SceneLoadingMonitorSampleTime"));  	LLFontGL::getFontMonospace()->renderUTF8(num_str, 0, 5, getRect().getHeight() - line_height * lines, color, LLFontGL::LEFT, LLFontGL::TOP);  	lines++; diff --git a/indra/newview/llscenemonitor.h b/indra/newview/llscenemonitor.h index 45a5241924..08d2335a90 100644 --- a/indra/newview/llscenemonitor.h +++ b/indra/newview/llscenemonitor.h @@ -46,7 +46,7 @@ public:  	void destroyClass();  	void freezeAvatar(LLCharacter* avatarp); -	void setDebugViewerVisible(BOOL visible); +	void setDebugViewerVisible(bool visible);  	void capture(); //capture the main frame buffer  	void compare(); //compare the stored two buffers.	 @@ -58,7 +58,6 @@ public:  	const LLRenderTarget* getDiffTarget() const {return mDiff;}  	F32  getDiffTolerance() const {return mDiffTolerance;}  	F32  getDiffResult() const { return mDiffResult;} -	F32  getSamplingTime() const { return mSamplingTime;}  	F32  getDiffPixelRatio() const { return mDiffPixelRatio;}  	bool isEnabled()const {return mEnabled;}  	bool needsUpdate() const; @@ -71,27 +70,25 @@ private:  	void freezeScene();  	void unfreezeScene();  	void reset(); -	bool preCapture(); +	LLRenderTarget& getCaptureTarget();  	void generateDitheringTexture(S32 width, S32 height);  	void addMonitorResult();  private: -	BOOL mEnabled; -	BOOL mNeedsUpdateDiff; -	BOOL mHasNewDiff; -	BOOL mHasNewQueryResult; -	BOOL mDebugViewerVisible; -	BOOL mQuitting; +	bool mEnabled; +	bool mNeedsUpdateDiff; +	bool mHasNewDiff; +	bool mHasNewQueryResult; +	bool mDebugViewerVisible; +	bool mQuitting;  	LLRenderTarget* mFrames[2];  	LLRenderTarget* mDiff; -	LLRenderTarget* mCurTarget;  	GLuint  mQueryObject; //used for glQuery  	F32     mDiffResult;  //aggregate results of mDiff.  	F32     mDiffTolerance; //pixels are filtered out when R+G+B < mDiffTolerance -	F32     mSamplingTime; //time interval to capture frames, in seconds  	F32     mDiffPixelRatio; //ratio of pixels used for comparison against the original mDiff size along one dimension  	LLPointer<LLViewerTexture> mDitheringTexture; @@ -119,7 +116,8 @@ public:  	LLSceneMonitorView(const LLRect& rect);  	virtual void draw(); -	virtual void setVisible(BOOL visible); + +	virtual void onVisibilityChange(BOOL visible);  protected:  	virtual void onClickCloseBtn(); diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index d909a218e3..e0fb09d86d 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -142,7 +142,7 @@ BOOL LLSidepanelAppearance::postBuild()  	mCurrOutfitPanel = getChild<LLPanel>("panel_currentlook"); -	setVisibleCallback(boost::bind(&LLSidepanelAppearance::onVisibilityChange,this,_2)); +	setVisibleCallback(boost::bind(&LLSidepanelAppearance::onVisibilityChanged,this,_2));  	return TRUE;  } @@ -181,7 +181,7 @@ void LLSidepanelAppearance::onOpen(const LLSD& key)  	mOpened = true;  } -void LLSidepanelAppearance::onVisibilityChange(const LLSD &new_visibility) +void LLSidepanelAppearance::onVisibilityChanged(const LLSD &new_visibility)  {  	LLSD visibility;  	visibility["visible"] = new_visibility.asBoolean(); diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h index 6dd3520266..8564827a17 100644 --- a/indra/newview/llsidepanelappearance.h +++ b/indra/newview/llsidepanelappearance.h @@ -67,7 +67,7 @@ public:  private:  	void onFilterEdit(const std::string& search_string); -	void onVisibilityChange ( const LLSD& new_visibility ); +	void onVisibilityChanged ( const LLSD& new_visibility );  	void onOpenOutfitButtonClicked();  	void onEditAppearanceButtonClicked(); | 
