diff options
Diffstat (limited to 'indra/llcommon/llsys.cpp')
-rw-r--r-- | indra/llcommon/llsys.cpp | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index b3ab5008fb..74a9a68dc8 100644 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -51,6 +51,9 @@ #include <boost/foreach.hpp> #include <boost/lexical_cast.hpp> #include <boost/range.hpp> +#include <boost/utility/enable_if.hpp> +#include <boost/type_traits/is_integral.hpp> +#include <boost/type_traits/is_float.hpp> using namespace llsd; @@ -649,7 +652,24 @@ public: mStats(LLSD::emptyArray()) {} - void add(const LLSD::String& name, LLSD::Integer value) + // Store every integer type as LLSD::Integer. + template <class T> + void add(const LLSD::String& name, const T& value, + typename boost::enable_if<boost::is_integral<T> >::type* = 0) + { + mStats.append(LLSDArray(name)(LLSD::Integer(value))); + } + + // Store every floating-point type as LLSD::Real. + template <class T> + void add(const LLSD::String& name, const T& value, + typename boost::enable_if<boost::is_float<T> >::type* = 0) + { + mStats.append(LLSDArray(name)(LLSD::Real(value))); + } + + // Hope that LLSD::Date values are sufficiently unambiguous. + void add(const LLSD::String& name, const LLSD::Date& value) { mStats.append(LLSDArray(name)(value)); } @@ -847,9 +867,16 @@ void LLMemoryInfo::stream(std::ostream& s) const // Now stream stats BOOST_FOREACH(LLSD pair, inArray(mStatsArray)) { - s << pfx << std::setw(key_width+1) << (pair[0].asString() + ':') - << ' ' - << std::setw(12) << pair[1].asInteger() << std::endl; + s << pfx << std::setw(key_width+1) << (pair[0].asString() + ':') << ' '; + if (pair[1].isInteger()) + s << std::setw(12) << pair[1].asInteger(); + else if (pair[1].isReal()) + s << std::fixed << std::setprecision(1) << pair[1].asReal(); + else if (pair[1].isDate()) + pair[1].asDate().toStream(s); + else + s << pair[1]; // just use default LLSD formatting + s << std::endl; } } @@ -881,6 +908,9 @@ LLSD LLMemoryInfo::loadStatsArray() // This implementation is derived from stream() code (as of 2011-06-29). StatsArray stats; + // associate timestamp for analysis over time + stats.add("timestamp", LLDate::now()); + #if LL_WINDOWS MEMORYSTATUSEX state; state.dwLength = sizeof(state); |