diff options
author | Xiaohong Bao <bao@lindenlab.com> | 2013-03-25 21:23:59 -0600 |
---|---|---|
committer | Xiaohong Bao <bao@lindenlab.com> | 2013-03-25 21:23:59 -0600 |
commit | 268ea2902d1108a1b30909340ca10ee0bea9f147 (patch) | |
tree | feb52214c0e010925929f1edda7b8cc28b7f056c /indra | |
parent | ccb8d6f2c59588bcb3b933c98831ee7da74eed03 (diff) |
for SH-3833: dump frame diff values from the scene loading monitor to a log file
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/llappviewer.cpp | 9 | ||||
-rw-r--r-- | indra/newview/llscenemonitor.cpp | 41 | ||||
-rw-r--r-- | indra/newview/llscenemonitor.h | 11 |
3 files changed, 58 insertions, 3 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 0cb7c7b030..fb1ef3ff3b 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" @@ -1561,6 +1562,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 0145f6f37e..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 //------------------------------------------------------------------------------------------------------------- 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 |