diff options
Diffstat (limited to 'indra/llcommon/lltrace.h')
-rw-r--r-- | indra/llcommon/lltrace.h | 62 |
1 files changed, 55 insertions, 7 deletions
diff --git a/indra/llcommon/lltrace.h b/indra/llcommon/lltrace.h index 39de79e4c1..6a889f74df 100644 --- a/indra/llcommon/lltrace.h +++ b/indra/llcommon/lltrace.h @@ -35,6 +35,7 @@ #include "lltimer.h" #include "llrefcount.h" #include "lltracerecording.h" +#include "llunit.h" #include <list> @@ -42,11 +43,8 @@ #define TOKEN_PASTE(x, y) TOKEN_PASTE_ACTUAL(x, y) #define RECORD_BLOCK_TIME(block_timer) LLTrace::BlockTimer::Recorder TOKEN_PASTE(block_time_recorder, __COUNTER__)(block_timer); - namespace LLTrace { - class Recording; - void init(); void cleanup(); @@ -325,10 +323,10 @@ namespace LLTrace U32 mNumSamples; }; - template <typename T> + template <typename T, typename IS_UNIT = void> class LL_COMMON_API Measurement : public TraceType<MeasurementAccumulator<T> >, - public LLInstanceTracker<Measurement<T>, std::string> + public LLInstanceTracker<Measurement<T, IS_UNIT>, std::string> { public: Measurement(const std::string& name) @@ -343,13 +341,37 @@ namespace LLTrace }; template <typename T> + class LL_COMMON_API Measurement <T, typename T::is_unit_t> + : public Measurement<typename T::value_t> + { + public: + typedef Measurement<typename T::value_t> base_measurement_t; + Measurement(const std::string& name) + : Measurement<typename T::value_t>(name) + {} + + template<typename UNIT_T> + void sample(UNIT_T value) + { + base_measurement_t::sample(value.get()); + } + + template<typename UNIT_T> + typename T::value_t get() + { + UNIT_T value(*this); + return value.get(); + } + }; + + template <typename T, typename IS_UNIT = void> class LL_COMMON_API Rate - : public TraceType<RateAccumulator<T> >, + : public TraceType<RateAccumulator<T> >, public LLInstanceTracker<Rate<T>, std::string> { public: Rate(const std::string& name) - : TraceType(name), + : TraceType(name), LLInstanceTracker(name) {} @@ -359,6 +381,30 @@ namespace LLTrace } }; + template <typename T> + class LL_COMMON_API Rate <T, typename T::is_unit_t> + : public Rate<typename T::value_t> + { + public: + Rate(const std::string& name) + : Rate<typename T::value_t>(name) + {} + + template<typename UNIT_T> + void add(UNIT_T value) + { + getPrimaryAccumulator().add(value.get()); + } + + template<typename UNIT_T> + typename T::value_t get() + { + UNIT_T value(*this); + return value.get(); + } + + }; + class LL_COMMON_API TimerAccumulator { public: @@ -482,6 +528,8 @@ namespace LLTrace static Recorder::StackEntry sCurRecorder; }; + class Recording; + class LL_COMMON_API ThreadRecorder { public: |