]> Creatis software - clitk.git/blob - common/clitkTimer.cxx
Merge branch 'master' of git://git.creatis.insa-lyon.fr/clitk
[clitk.git] / common / clitkTimer.cxx
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to:
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://www.centreleonberard.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
8
9   This software is distributed WITHOUT ANY WARRANTY; without even
10   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11   PURPOSE.  See the copyright notices for more information.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ===========================================================================**/
18 #ifndef CLITKTIMER_CXX
19 #define CLITKTIMER_CXX
20 /**
21    =================================================
22    * @file   clitkTimer.cxx
23    * @author David Sarrut <david.sarrut@creatis.insa-lyon.fr>
24    * @date   18 Jul 2007 16:27:45
25    *
26    * @brief
27    *
28    *
29    =================================================*/
30
31 // #ifdef UNIX
32
33 #include "clitkTimer.h"
34
35 //====================================================================
36 /// Constructs the class
37 clitk::Timer::Timer()
38 {
39   Reset();
40 #if defined(WIN32)
41   QueryPerformanceFrequency((LARGE_INTEGER*)&mFrequency);
42 #endif
43 }
44 //====================================================================
45
46 //====================================================================
47 void clitk::Timer::Start()
48 {
49 #if defined(unix) || defined(__APPLE__)
50   getrusage(RUSAGE_SELF, &mBegin);
51 #elif defined(WIN32)
52   QueryPerformanceCounter((LARGE_INTEGER*)&mBegin);
53 #endif
54   mNumberOfCall++;
55 }
56 //====================================================================
57
58 //====================================================================
59 void clitk::Timer::Stop(bool accumulate)
60 {
61 #if defined(unix) || defined (__APPLE__)
62   getrusage(RUSAGE_SELF, &mEnd);
63   if (accumulate) {
64     mElapsed += (mEnd.ru_utime.tv_usec - mBegin.ru_utime.tv_usec)+
65                 (mEnd.ru_utime.tv_sec - mBegin.ru_utime.tv_sec)*1000000;
66   }
67 #elif defined(WIN32)
68   QueryPerformanceCounter((LARGE_INTEGER*)&mEnd);
69   if (accumulate) {
70     mElapsed += ((mEnd-mBegin)*1000000)/(long double)mFrequency;
71   }
72 #endif
73   else {
74     mNumberOfCall--;
75   }
76 }
77 //====================================================================
78
79 //====================================================================
80 void clitk::Timer::Print(std::ostream & os) const
81 {
82   if (mNumberOfCall != 1) {
83     os << "Timer #     = " << mNumberOfCall << std::endl;
84     os << "Timer total = " << mElapsed << " usec \t" << mElapsed/1000000.0 << " sec." << mElapsed/1000000.0/60 << " min."
85        << mElapsed/1000000.0/60/60 << " hours." << std::endl;
86   }
87   long double tus = mElapsed/mNumberOfCall;
88   long double ts = tus/1000000.0;
89   long double tm = ts/60.0;
90   long double th = tm/60.0;
91   os << "Timer = " << tus << " usec\t" << ts << " sec.\t" << tm << " min.\t" << th << " hours." << std::endl;
92   // os << "\tmBegin.ru_utime.tv_sec = " << mBegin.ru_utime.tv_sec << std::endl;
93 //   os << "\tmEnd.ru_utime.tv_sec = " << mEnd.ru_utime.tv_sec << std::endl;
94 //   os << "\tmBegin.ru_utime.tv_usec = " << mBegin.ru_utime.tv_usec << std::endl;
95 //   os << "\tmEnd.ru_utime.tv_usec = " << mEnd.ru_utime.tv_usec << std::endl;
96 }
97 //====================================================================
98
99 //====================================================================
100 void clitk::Timer::Print(std::string text, std::ostream & os) const
101 {
102   os << text.c_str();
103   Print(os);
104 }
105 //====================================================================
106
107 //====================================================================
108 void clitk::Timer::Reset()
109 {
110   mNumberOfCall = 0;
111   mElapsed = 0;
112 }
113 //====================================================================
114
115 // #endif // If UNIX
116 #endif /* end #define CLITKTIMER_CXX */
117