summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiaohong Bao <bao@lindenlab.com>2013-03-25 21:25:06 -0600
committerXiaohong Bao <bao@lindenlab.com>2013-03-25 21:25:06 -0600
commitaad93f4e52a745892612dee89ba72935e49dd099 (patch)
tree6d1ad19c072bec42972f24f803368f1f930f44ea
parent935dce7d6b0a343cef5b13f53d6da5d0c2dc6a73 (diff)
parent268ea2902d1108a1b30909340ca10ee0bea9f147 (diff)
Automated merge with ssh://hg.lindenlab.com/richard/viewer-interesting-metrics
-rw-r--r--indra/newview/llappviewer.cpp9
-rw-r--r--indra/newview/llscenemonitor.cpp42
-rw-r--r--indra/newview/llscenemonitor.h11
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