summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorXiaohong Bao <bao@lindenlab.com>2013-03-25 21:23:59 -0600
committerXiaohong Bao <bao@lindenlab.com>2013-03-25 21:23:59 -0600
commit268ea2902d1108a1b30909340ca10ee0bea9f147 (patch)
treefeb52214c0e010925929f1edda7b8cc28b7f056c /indra
parentccb8d6f2c59588bcb3b933c98831ee7da74eed03 (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.cpp9
-rw-r--r--indra/newview/llscenemonitor.cpp41
-rw-r--r--indra/newview/llscenemonitor.h11
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