diff options
author | Xiaohong Bao <bao@lindenlab.com> | 2013-03-25 21:25:06 -0600 |
---|---|---|
committer | Xiaohong Bao <bao@lindenlab.com> | 2013-03-25 21:25:06 -0600 |
commit | aad93f4e52a745892612dee89ba72935e49dd099 (patch) | |
tree | 6d1ad19c072bec42972f24f803368f1f930f44ea | |
parent | 935dce7d6b0a343cef5b13f53d6da5d0c2dc6a73 (diff) | |
parent | 268ea2902d1108a1b30909340ca10ee0bea9f147 (diff) |
Automated merge with ssh://hg.lindenlab.com/richard/viewer-interesting-metrics
-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 |