diff options
author | Nat Goodspeed <nat@lindenlab.com> | 2024-09-13 16:01:05 -0400 |
---|---|---|
committer | Nat Goodspeed <nat@lindenlab.com> | 2024-09-13 16:01:05 -0400 |
commit | 6c226ac96c8ba01e62ea1085177b2859b74b85d8 (patch) | |
tree | c52e5996142c37d22d923fc453a6d65081028314 /indra/newview | |
parent | 7ced89435d702b8a6bc02908769bed47e20d6ec0 (diff) |
Add context info to Develop->Render Tests->Frame Profile stats file.
Specifically, add the viewer version, the machine ID, the grid, the region
name and ID, the parcel name and ID and the timestamp. This is both richer and
less fragile than trying to extract that information from the generated
filename: e.g. we now have region and parcel names.
Instead of making `LLGLSLShader::finishProfile()` mess with file I/O, pass it
a reference to a `boost::json::value` to be filled in with statistics, if it's
a `boost::json::object`. Otherwise it's `boost::json::null`, meaning no report.
Make llviewerdisplay.cpp's `display()` function instantiate a `boost::json::value`
to pass to `finishProfile()`. That lets llviewerdisplay.cpp also set the
`"context"` entry, with a new `getProfileStatsContext()` function quite
similar to `getProfileStatsFilename()`.
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llviewerdisplay.cpp | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index fdfe477a6c..aad11d9372 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -138,6 +138,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() @@ -1040,8 +1041,49 @@ 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; + } + } +} + +void getProfileStatsContext(boost::json::object& stats) +{ + auto contextit = stats.emplace("context", boost::json::object_kind).first; + auto& context = contextit->value().as_object(); + + auto& versionInfo = LLVersionInfo::instance(); + context.emplace("channel", versionInfo.getChannel()); + context.emplace("version", versionInfo.getVersion()); + unsigned char unique_id[MAC_ADDRESS_BYTES]{}; + LLMachineID::getUniqueID(unique_id, sizeof(unique_id)); + context.emplace("machine", stringize(LL::hexdump(unique_id, sizeof(unique_id)))); + context.emplace("grid", LLGridManager::instance().getGrid()); + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + context.emplace("region", region->getName()); + context.emplace("regionid", stringize(region->getRegionID())); + } + LLParcel* parcel = LLViewerParcelMgr::instance().getAgentParcel(); + if (parcel) + { + 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() |