From 5b48107dbf969529267874bff9a0a4b892b348cf Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Tue, 4 Jun 2013 08:33:11 -0700 Subject: SH-3931 WIP Interesting: Add graphs to visualize scene load metrics added labels to LLUnit types added memstat dumps to llscenemonitor --- indra/llcommon/lltrace.h | 4 +-- indra/llcommon/llunit.h | 65 ++++++++++++++++++++++------------------ indra/newview/llscenemonitor.cpp | 58 ++++++++++------------------------- 3 files changed, 54 insertions(+), 73 deletions(-) diff --git a/indra/llcommon/lltrace.h b/indra/llcommon/lltrace.h index d6b51a63ee..c485552061 100644 --- a/indra/llcommon/lltrace.h +++ b/indra/llcommon/lltrace.h @@ -656,7 +656,7 @@ class EventStatHandle : public TraceType { public: - typedef typename LLUnits::HighestPrecisionType::type_t storage_t; + typedef typename F64 storage_t; typedef TraceType trace_t; EventStatHandle(const char* name, const char* description = NULL) @@ -696,7 +696,7 @@ class CountStatHandle : public TraceType { public: - typedef typename LLUnits::HighestPrecisionType::type_t storage_t; + typedef typename F64 storage_t; typedef TraceType trace_t; CountStatHandle(const char* name, const char* description = NULL) diff --git a/indra/llcommon/llunit.h b/indra/llcommon/llunit.h index e2803c74b0..c617d2a87f 100644 --- a/indra/llcommon/llunit.h +++ b/indra/llcommon/llunit.h @@ -423,11 +423,13 @@ struct HighestPrecisionType > typedef typename HighestPrecisionType::type_t type_t; }; -#define LL_DECLARE_DERIVED_UNIT(conversion_factor, base_unit_name, unit_name) \ +#define LL_DECLARE_DERIVED_UNIT(conversion_factor, base_unit_name, unit_name, unit_label) \ struct unit_name \ { \ typedef base_unit_name base_unit_t; \ + static const char* sUnitLabel; \ }; \ +const char* unit_name::sUnitLabel = unit_label; \ template \ struct ConversionFactor \ { \ @@ -446,34 +448,39 @@ struct ConversionFactor \ } \ } -struct Bytes { typedef Bytes base_unit_t; }; -LL_DECLARE_DERIVED_UNIT(1024, Bytes, Kilobytes); -LL_DECLARE_DERIVED_UNIT(1024 * 1024, Bytes, Megabytes); -LL_DECLARE_DERIVED_UNIT(1024 * 1024 * 1024, Bytes, Gigabytes); -LL_DECLARE_DERIVED_UNIT(1.0 / 8.0, Bytes, Bits); -LL_DECLARE_DERIVED_UNIT(1024 / 8, Bytes, Kilobits); -LL_DECLARE_DERIVED_UNIT(1024 / 8, Bytes, Megabits); -LL_DECLARE_DERIVED_UNIT(1024 * 1024 * 1024 / 8, Bytes, Gigabits); - -struct Seconds { typedef Seconds base_unit_t; }; -LL_DECLARE_DERIVED_UNIT(60, Seconds, Minutes); -LL_DECLARE_DERIVED_UNIT(60 * 60, Seconds, Hours); -LL_DECLARE_DERIVED_UNIT(1.0 / 1000.0, Seconds, Milliseconds); -LL_DECLARE_DERIVED_UNIT(1.0 / 1000000.0, Seconds, Microseconds); -LL_DECLARE_DERIVED_UNIT(1.0 / 1000000000.0, Seconds, Nanoseconds); - -struct Meters { typedef Meters base_unit_t; }; -LL_DECLARE_DERIVED_UNIT(1000, Meters, Kilometers); -LL_DECLARE_DERIVED_UNIT(1.0 / 100.0, Meters, Centimeters); -LL_DECLARE_DERIVED_UNIT(1.0 / 1000.0, Meters, Millimeters); - -struct Hertz { typedef Hertz base_unit_t; }; -LL_DECLARE_DERIVED_UNIT(1000, Hertz, Kilohertz); -LL_DECLARE_DERIVED_UNIT(1000 * 1000, Hertz, Megahertz); -LL_DECLARE_DERIVED_UNIT(1000 * 1000 * 1000, Hertz, Gigahertz); - -struct Radians { typedef Radians base_unit_t; }; -LL_DECLARE_DERIVED_UNIT(DEG_TO_RAD, Radians, Degrees); +struct Bytes { typedef Bytes base_unit_t; static const char* sUnitLabel;}; +const char* Bytes::sUnitLabel = "B"; +LL_DECLARE_DERIVED_UNIT(1024, Bytes, Kilobytes, "KiB"); +LL_DECLARE_DERIVED_UNIT(1024 * 1024, Bytes, Megabytes, "MiB"); +LL_DECLARE_DERIVED_UNIT(1024 * 1024 * 1024, Bytes, Gigabytes, "GiB"); +LL_DECLARE_DERIVED_UNIT(1.0 / 8.0, Bytes, Bits, "b"); +LL_DECLARE_DERIVED_UNIT(1024 / 8, Bytes, Kilobits, "Kib"); +LL_DECLARE_DERIVED_UNIT(1024 / 8, Bytes, Megabits, "Mib"); +LL_DECLARE_DERIVED_UNIT(1024 * 1024 * 1024 / 8, Bytes, Gigabits, "Gib"); + +struct Seconds { typedef Seconds base_unit_t; static const char* sUnitLabel; }; +const char* Seconds::sUnitLabel = "s"; +LL_DECLARE_DERIVED_UNIT(60, Seconds, Minutes, "min"); +LL_DECLARE_DERIVED_UNIT(60 * 60, Seconds, Hours, "h"); +LL_DECLARE_DERIVED_UNIT(1.0 / 1000.0, Seconds, Milliseconds, "ms"); +LL_DECLARE_DERIVED_UNIT(1.0 / 1000000.0, Seconds, Microseconds, "\x09\x3cs"); +LL_DECLARE_DERIVED_UNIT(1.0 / 1000000000.0, Seconds, Nanoseconds, "ns"); + +struct Meters { typedef Meters base_unit_t; static const char* sUnitLabel; }; +const char* Meters::sUnitLabel = "m"; +LL_DECLARE_DERIVED_UNIT(1000, Meters, Kilometers, "km"); +LL_DECLARE_DERIVED_UNIT(1.0 / 100.0, Meters, Centimeters, "cm"); +LL_DECLARE_DERIVED_UNIT(1.0 / 1000.0, Meters, Millimeters, "mm"); + +struct Hertz { typedef Hertz base_unit_t; static const char* sUnitLabel; }; +const char* Hertz::sUnitLabel = "Hz"; +LL_DECLARE_DERIVED_UNIT(1000, Hertz, Kilohertz, "KHz"); +LL_DECLARE_DERIVED_UNIT(1000 * 1000, Hertz, Megahertz, "MHz"); +LL_DECLARE_DERIVED_UNIT(1000 * 1000 * 1000, Hertz, Gigahertz, "GHz"); + +struct Radians { typedef Radians base_unit_t; static const char* sUnitLabel;}; +const char* Radians::sUnitLabel = "rad"; +LL_DECLARE_DERIVED_UNIT(DEG_TO_RAD, Radians, Degrees, "deg"); } // namespace LLUnits #endif // LL_LLUNIT_H diff --git a/indra/newview/llscenemonitor.cpp b/indra/newview/llscenemonitor.cpp index 1bbd6ae2b9..1a5b43c703 100644 --- a/indra/newview/llscenemonitor.cpp +++ b/indra/newview/llscenemonitor.cpp @@ -492,18 +492,18 @@ void LLSceneMonitor::fetchQueryResult() //dump results to a file _scene_xmonitor_results.csv void LLSceneMonitor::dumpToFile(std::string file_name) -{ - using namespace LLTrace; +{ using namespace LLTrace; + if (!hasResults()) return; LL_INFOS("SceneMonitor") << "Saving scene load stats to " << file_name << LL_ENDL; std::ofstream os(file_name.c_str()); - os << std::setprecision(4); + os << std::setprecision(3); PeriodicRecording& scene_load_recording = mSceneLoadRecording.getAcceptedRecording(); - U32 frame_count = scene_load_recording.getNumPeriods(); + const U32 frame_count = scene_load_recording.getNumPeriods(); LLUnit frame_time; @@ -515,7 +515,8 @@ void LLSceneMonitor::dumpToFile(std::string file_name) } os << std::endl; - for (CountStatHandle::instance_iter it = CountStatHandle::beginInstances(), end_it = CountStatHandle::endInstances(); + typedef TraceType trace_count; + for (trace_count::instance_iter it = trace_count::beginInstances(), end_it = trace_count::endInstances(); it != end_it; ++it) { @@ -538,30 +539,9 @@ void LLSceneMonitor::dumpToFile(std::string file_name) } } - for (CountStatHandle::instance_iter it = CountStatHandle::beginInstances(), end_it = CountStatHandle::endInstances(); - it != end_it; - ++it) - { - std::ostringstream row; - row << it->getName(); - - S32 samples = 0; - - for (S32 i = frame_count - 1; i >= 0; --i) - { - samples += scene_load_recording.getPrevRecording(i).getSampleCount(*it); - row << ", " << scene_load_recording.getPrevRecording(i).getSum(*it); - } - - row << std::endl; - - if (samples > 0) - { - os << row.str(); - } - } + typedef TraceType trace_event; - for (EventStatHandle::instance_iter it = EventStatHandle::beginInstances(), end_it = EventStatHandle::endInstances(); + for (trace_event::instance_iter it = trace_event::beginInstances(), end_it = trace_event::endInstances(); it != end_it; ++it) { @@ -584,7 +564,9 @@ void LLSceneMonitor::dumpToFile(std::string file_name) } } - for (EventStatHandle::instance_iter it = EventStatHandle::beginInstances(), end_it = EventStatHandle::endInstances(); + typedef TraceType trace_sample; + + for (trace_sample::instance_iter it = trace_sample::beginInstances(), end_it = trace_sample::endInstances(); it != end_it; ++it) { @@ -607,27 +589,19 @@ void LLSceneMonitor::dumpToFile(std::string file_name) } } - for (TraceType::instance_iter it = TraceType::beginInstances(), end_it = TraceType::endInstances(); + typedef TraceType trace_mem; + for (trace_mem::instance_iter it = trace_mem::beginInstances(), end_it = trace_mem::endInstances(); it != end_it; ++it) { - std::ostringstream row; - row << it->getName(); - - S32 samples = 0; + os << it->getName(); for (S32 i = frame_count - 1; i >= 0; --i) { - samples += scene_load_recording.getPrevRecording(i).getSampleCount(*it); - row << ", " << scene_load_recording.getPrevRecording(i).getMean(*it); + os << ", " << scene_load_recording.getPrevRecording(i).getSum(*it).as().value(); } - row << std::endl; - - if (samples > 0) - { - os << row.str(); - } + os << std::endl; } os.flush(); -- cgit v1.2.3