diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llappviewer.cpp | 9 | ||||
| -rw-r--r-- | indra/newview/llscenemonitor.cpp | 42 | ||||
| -rw-r--r-- | indra/newview/llscenemonitor.h | 11 | 
3 files changed, 59 insertions, 3 deletions
| diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 3e61787c13..cca94cdfd8 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -97,6 +97,7 @@  #include "llcallfloater.h"  #include "llfloatertexturefetchdebugger.h"  #include "llspellcheck.h" +#include "llscenemonitor.h"  // Linden library includes  #include "llavatarnamecache.h" @@ -1566,6 +1567,14 @@ bool LLAppViewer::cleanup()  	// workaround for DEV-35406 crash on shutdown  	LLEventPumps::instance().reset(); +	//dump scene loading monitor results +	if(LLSceneMonitor::getInstance()->hasResults()) +	{ +		std::string file_name = "scene_monitor_results.csv"; +		LLSceneMonitor::getInstance()->dumpToFile( +			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, file_name)); +	} +  	if (LLFastTimerView::sAnalyzePerformance)  	{  		llinfos << "Analyzing performance" << llendl; diff --git a/indra/newview/llscenemonitor.cpp b/indra/newview/llscenemonitor.cpp index c69f276aa2..5cde573855 100644 --- a/indra/newview/llscenemonitor.cpp +++ b/indra/newview/llscenemonitor.cpp @@ -486,11 +486,46 @@ void LLSceneMonitor::fetchQueryResult()  	if(mDiffResult > 0.01f)  	{ -		mRecording->extend(); -		sample(sFramePixelDiff, mDiffResult); +		addMonitorResult();  	} -	//llinfos << count << " : " << mDiffResult << llendl;  } + +void LLSceneMonitor::addMonitorResult() +{ +	mRecording->extend(); +	sample(sFramePixelDiff, mDiffResult); + +	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) +{ +	if(mMonitorResults.empty()) +	{ +		return; //nothing to dump +	} + +	std::ofstream os(file_name.c_str()); + +	//total scene loading time +	os << llformat("Scene Loading time: %.4f seconds\n", (F32)getRecording()->getAcceptedRecording().getDuration().value()); + +	S32 num_results = mMonitorResults.size(); +	for(S32 i = 0; i < num_results; i++) +	{ +		os << llformat("%.4f %.4f\n", mMonitorResults[i].mTimeStamp, mMonitorResults[i].mDiff); +	} + +	os.flush(); +	os.close(); + +	mMonitorResults.clear(); +} +  //-------------------------------------------------------------------------------------------------------------  //definition of class LLSceneMonitorView  //------------------------------------------------------------------------------------------------------------- @@ -511,6 +546,7 @@ void LLSceneMonitorView::onClickCloseBtn()  void LLSceneMonitorView::setVisible(BOOL visible)  { +	visible = visible && LLGLSLShader::sNoFixedFunction;  	LLSceneMonitor::getInstance()->setDebugViewerVisible(visible);  	LLView::setVisible(visible); diff --git a/indra/newview/llscenemonitor.h b/indra/newview/llscenemonitor.h index 709650e206..b2bc4763cf 100644 --- a/indra/newview/llscenemonitor.h +++ b/indra/newview/llscenemonitor.h @@ -64,6 +64,8 @@ public:  	bool needsUpdate() const;  	LLTrace::ExtendableRecording* getRecording() const {return mRecording;} +	void dumpToFile(std::string file_name); +	bool hasResults() const { return !mMonitorResults.empty();}  private:  	void freezeScene(); @@ -72,6 +74,7 @@ private:  	bool preCapture();  	void generateDitheringTexture(S32 width, S32 height); +	void addMonitorResult();  private:  	BOOL mEnabled;  	BOOL mNeedsUpdateDiff; @@ -99,6 +102,14 @@ private:  	std::vector<LLAnimPauseRequest> mAvatarPauseHandles;  	LLTrace::ExtendableRecording* mRecording; + +	//--------------------------------------- +	typedef struct _monitor_result +	{ +		F32 mTimeStamp; +		F32 mDiff; +	} ll_monitor_result_t; +	std::vector<ll_monitor_result_t> mMonitorResults;  };  class LLSceneMonitorView : public LLFloater | 
