Reapply commit f4b6563 -- cherry-picking lost parts of it?!
parent
f0300cf8b3
commit
8c40e6f0a9
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Reference in New Issue