diff options
| -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); | 
