]> Creatis software - clitk.git/blob - common/clitkTimer.cxx
Initial revision
[clitk.git] / common / clitkTimer.cxx
1 #ifndef CLITKTIMER_CXX
2 #define CLITKTIMER_CXX
3
4 /**
5    =================================================
6    * @file   clitkTimer.cxx
7    * @author David Sarrut <david.sarrut@creatis.insa-lyon.fr>
8    * @date   18 Jul 2007 16:27:45
9    * 
10    * @brief  
11    * 
12    * 
13    =================================================*/
14
15 // #ifdef UNIX
16
17 #include "clitkTimer.h"
18
19 //====================================================================
20 /// Constructs the class 
21 clitk::Timer::Timer() { 
22   Reset(); 
23 }
24 //====================================================================
25
26 //====================================================================
27 void clitk::Timer::Start() {
28   getrusage(RUSAGE_SELF, &mBegin);
29   mNumberOfCall++;
30 }
31 //====================================================================
32
33 //====================================================================
34 void clitk::Timer::Stop(bool accumulate) {
35   getrusage(RUSAGE_SELF, &mEnd);
36   if (accumulate) {
37     mElapsed += (mEnd.ru_utime.tv_usec - mBegin.ru_utime.tv_usec)+
38       (mEnd.ru_utime.tv_sec - mBegin.ru_utime.tv_sec)*1000000;
39   }
40   else {
41     mNumberOfCall--;
42   }
43 }
44 //====================================================================
45
46 //====================================================================
47 void clitk::Timer::Print(std::ostream & os) const {
48   if (mNumberOfCall != 1) {
49     os << "Timer #     = " << mNumberOfCall << std::endl;
50     os << "Timer total = " << mElapsed << " usec \t" << mElapsed/1000000.0 << " sec." << mElapsed/1000000.0/60 << " min."
51        << mElapsed/1000000.0/60/60 << " hours." << std::endl;
52   }
53   long double tus = mElapsed/mNumberOfCall;
54   long double ts = tus/1000000.0;
55   long double tm = ts/60.0;
56   long double th = tm/60.0;
57   os << "Timer = " << tus << " usec\t" << ts << " sec.\t" << tm << " min.\t" << th << " hours." << std::endl;
58   // os << "\tmBegin.ru_utime.tv_sec = " << mBegin.ru_utime.tv_sec << std::endl;
59 //   os << "\tmEnd.ru_utime.tv_sec = " << mEnd.ru_utime.tv_sec << std::endl;
60 //   os << "\tmBegin.ru_utime.tv_usec = " << mBegin.ru_utime.tv_usec << std::endl;
61 //   os << "\tmEnd.ru_utime.tv_usec = " << mEnd.ru_utime.tv_usec << std::endl;  
62 }
63 //====================================================================
64
65 //====================================================================
66 void clitk::Timer::Print(std::string text, std::ostream & os) const {
67   os << text;
68   Print(os);
69 }  
70 //====================================================================
71
72 //====================================================================
73 void clitk::Timer::Reset() {
74   mNumberOfCall = 0;
75   mElapsed = 0;
76 }
77 //====================================================================
78
79 // #endif // If UNIX
80 #endif /* end #define CLITKTIMER_CXX */
81