diff options
| -rw-r--r-- | indra/llrender/llglslshader.cpp | 21 | ||||
| -rw-r--r-- | indra/llrender/llglslshader.h | 10 | ||||
| -rw-r--r-- | indra/newview/llviewerdisplay.cpp | 18 | 
3 files changed, 26 insertions, 23 deletions
| diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index 56f1533708..6ba5463acd 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -41,8 +41,6 @@  #include "OpenGL/OpenGL.h"  #endif -#include <fstream> -   // Print-print list of shader included source files that are linked together via glAttachShader()   // i.e. On macOS / OSX the AMD GLSL linker will display an error if a varying is left in an undefined state.  #define DEBUG_SHADER_INCLUDES 0 @@ -65,7 +63,7 @@ U64 LLGLSLShader::sTotalTimeElapsed = 0;  U32 LLGLSLShader::sTotalTrianglesDrawn = 0;  U64 LLGLSLShader::sTotalSamplesDrawn = 0;  U32 LLGLSLShader::sTotalBinds = 0; -std::string LLGLSLShader::sDefaultReportName; +boost::json::value LLGLSLShader::sDefaultStats;  //UI shader -- declared here so llui_libtest will link properly  LLGLSLShader    gUIProgram; @@ -120,16 +118,16 @@ struct LLGLSLShaderCompareTimeElapsed  };  //static -void LLGLSLShader::finishProfile(const std::string& report_name) +void LLGLSLShader::finishProfile(boost::json::value& statsv)  {      sProfileEnabled = false; -    if (! report_name.empty()) +    if (! statsv.is_null())      {          std::vector<LLGLSLShader*> sorted(sInstances.begin(), sInstances.end());          std::sort(sorted.begin(), sorted.end(), LLGLSLShaderCompareTimeElapsed()); -        boost::json::object stats; +        auto& stats = statsv.as_object();          auto shadersit = stats.emplace("shaders", boost::json::array_kind).first;          auto& shaders = shadersit->value().as_array();          bool unbound = false; @@ -174,17 +172,6 @@ void LLGLSLShader::finishProfile(const std::string& report_name)                  }              }          } - -        std::ofstream outf(report_name); -        if (! outf) -        { -            LL_WARNS() << "Couldn't write to " << std::quoted(report_name) << LL_ENDL; -        } -        else -        { -            outf << stats; -            LL_INFOS() << "(also dumped to " << std::quoted(report_name) << ")" << LL_ENDL; -        }      }  } diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h index a9b9bfafa8..2d669c70a9 100644 --- a/indra/llrender/llglslshader.h +++ b/indra/llrender/llglslshader.h @@ -170,7 +170,7 @@ public:      static U32 sMaxGLTFNodes;      static void initProfile(); -    static void finishProfile(const std::string& report_name=sDefaultReportName); +    static void finishProfile(boost::json::value& stats=sDefaultStats);      static void startProfile();      static void stopProfile(); @@ -365,10 +365,10 @@ public:  private:      void unloadInternal();      // This must be static because finishProfile() is called at least once -    // within a __try block. If we default its report_name parameter to a -    // temporary std::string, that temporary must be destroyed when the stack -    // is unwound, which __try forbids. -    static std::string sDefaultReportName; +    // within a __try block. If we default its stats parameter to a temporary +    // json::value, that temporary must be destroyed when the stack is +    // unwound, which __try forbids. +    static boost::json::value sDefaultStats;  };  //UI shader (declared here so llui_libtest will link properly) diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index ae0579f5f7..f722d0bd1d 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -139,6 +139,7 @@ void render_ui_3d();  void render_ui_2d();  void render_disconnected_background(); +void getProfileStatsContext(boost::json::object& stats);  std::string getProfileStatsFilename();  void display_startup() @@ -1041,7 +1042,21 @@ void display(bool rebuild, F32 zoom_factor, int subfield, bool for_snapshot)      if (gShaderProfileFrame)      {          gShaderProfileFrame = false; -        LLGLSLShader::finishProfile(getProfileStatsFilename()); +        boost::json::value stats{ boost::json::object_kind }; +        getProfileStatsContext(stats.as_object()); +        LLGLSLShader::finishProfile(stats); + +        auto report_name = getProfileStatsFilename(); +        std::ofstream outf(report_name); +        if (! outf) +        { +            LL_WARNS() << "Couldn't write to " << std::quoted(report_name) << LL_ENDL; +        } +        else +        { +            outf << stats; +            LL_INFOS() << "(also dumped to " << std::quoted(report_name) << ")" << LL_ENDL; +        }      }  } @@ -1068,6 +1083,7 @@ void getProfileStatsContext(boost::json::object& stats)          context.emplace("parcel", parcel->getName());          context.emplace("parcelid", parcel->getLocalID());      } +    context.emplace("time", LLDate::now().toHTTPDateString("%Y-%m-%dT%H:%M:%S"));  }  std::string getProfileStatsFilename() | 
