1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
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
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.
13 It is distributed under dual licence
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
21 =================================================
22 * @file clitkTimer.cxx
23 * @author David Sarrut <david.sarrut@creatis.insa-lyon.fr>
24 * @date 18 Jul 2007 16:27:45
29 =================================================*/
33 #include "clitkTimer.h"
35 //====================================================================
36 /// Constructs the class
41 QueryPerformanceFrequency((LARGE_INTEGER*)&mFrequency);
44 //====================================================================
46 //====================================================================
47 void clitk::Timer::Start()
49 #if defined(unix) || defined(__APPLE__)
50 getrusage(RUSAGE_SELF, &mBegin);
52 QueryPerformanceCounter((LARGE_INTEGER*)&mBegin);
56 //====================================================================
58 //====================================================================
59 void clitk::Timer::Stop(bool accumulate)
61 #if defined(unix) || defined (__APPLE__)
62 getrusage(RUSAGE_SELF, &mEnd);
64 mElapsed += (mEnd.ru_utime.tv_usec - mBegin.ru_utime.tv_usec)+
65 (mEnd.ru_utime.tv_sec - mBegin.ru_utime.tv_sec)*1000000;
69 QueryPerformanceCounter((LARGE_INTEGER*)&mEnd);
71 mElapsed += ((mEnd-mBegin)*1000000)/(long double)mFrequency;
79 //====================================================================
81 //====================================================================
82 void clitk::Timer::Print(std::ostream & os) const
84 if (mNumberOfCall != 1) {
85 os << "Timer # = " << mNumberOfCall << std::endl;
86 os << "Timer total = " << mElapsed << " usec \t" << mElapsed/1000000.0 << " sec." << mElapsed/1000000.0/60 << " min."
87 << mElapsed/1000000.0/60/60 << " hours." << std::endl;
89 long double tus = mElapsed/mNumberOfCall;
90 long double ts = tus/1000000.0;
91 long double tm = ts/60.0;
92 long double th = tm/60.0;
93 os << "Timer = " << tus << " usec\t" << ts << " sec.\t" << tm << " min.\t" << th << " hours." << std::endl;
94 // os << "\tmBegin.ru_utime.tv_sec = " << mBegin.ru_utime.tv_sec << std::endl;
95 // os << "\tmEnd.ru_utime.tv_sec = " << mEnd.ru_utime.tv_sec << std::endl;
96 // os << "\tmBegin.ru_utime.tv_usec = " << mBegin.ru_utime.tv_usec << std::endl;
97 // os << "\tmEnd.ru_utime.tv_usec = " << mEnd.ru_utime.tv_usec << std::endl;
99 //====================================================================
101 //====================================================================
102 void clitk::Timer::Print(std::string text, std::ostream & os) const
107 //====================================================================
109 //====================================================================
110 void clitk::Timer::Reset()
115 //====================================================================
118 #endif /* end #define CLITKTIMER_CXX */