00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #if !defined( _TIME_METER_HPP_ )
00033 #define _TIME_METER_HPP_
00034
00035 #include <string>
00036 #include <ctime>
00037
00038 namespace oess_1
00039 {
00040
00041 namespace debug
00042 {
00043
00044 class time_accumulator_t
00045 {
00046 private :
00047 std::string m_name;
00048 double m_value;
00049 double m_max_delta;
00050 unsigned int m_count;
00051
00052 public :
00053 inline time_accumulator_t(
00054 const std::string & name )
00055 : m_name( name )
00056 , m_value( 0 )
00057 , m_max_delta( 0 )
00058 , m_count( 0 )
00059 {}
00060
00061 inline ~time_accumulator_t()
00062 {
00063 std::cout << m_name << ": " << m_value
00064 << " (max: " << std::fixed << m_max_delta
00065 << ", avg: " << std::fixed << ( m_count ? m_value / m_count : 0.0 )
00066 << ", cnt: " << m_count << ")" << std::endl;
00067 }
00068
00069 inline void
00070 operator+=( double delta )
00071 {
00072 if( delta < 0.00000001 )
00073 delta = 0.00000001;
00074
00075 m_value += delta;
00076 ++m_count;
00077 if( m_max_delta < delta )
00078 m_max_delta = delta;
00079 }
00080 };
00081
00082 class time_meter_t
00083 {
00084 private :
00085 time_accumulator_t & m_accumulator;
00086 std::clock_t m_start;
00087
00088 public :
00089 inline time_meter_t(
00090 time_accumulator_t & accumulator )
00091 : m_accumulator( accumulator )
00092 , m_start( std::clock() )
00093 {}
00094
00095 inline ~time_meter_t()
00096 {
00097 std::clock_t finish = std::clock();
00098 m_accumulator += double( finish - m_start ) / CLOCKS_PER_SEC;
00099 }
00100 };
00101
00102 }
00103
00104 }
00105
00106 #endif