MeshKit  1.0
StopWatch.hpp
Go to the documentation of this file.
00001 #ifndef RCOUNTER_H
00002 #define RCOUNTER_H
00003 
00004 #include <sys/time.h>
00005 
00006 class RegisterCounter
00007 {
00008  public:
00009   typedef unsigned long long int   register_counter_t;
00010   RegisterCounter() { rtotal = 0; }
00011 
00012   void  reset() { rtotal  = 0; }
00013   void  start() { rbegin = rdtsc(); }
00014 
00015   void  stop()
00016     {
00017       rend  = rdtsc();
00018       rtotal +=  rend-rbegin;
00019     }
00020   register_counter_t  getCount() { return rtotal; }
00021 
00022  private:
00023   register_counter_t  rtotal, rbegin, rend;
00024   register_counter_t rdtsc()
00025     {
00026       register_counter_t x;
00027       __asm__ volatile(".byte 0x0f,0x31" : "=A" (x));
00028       return x;
00029     }
00030 };
00031 
00032 class StopWatch
00033 {
00034  public:
00035   StopWatch(){ rtotal = 0; }
00036 
00037   void  reset(){ rtotal  = 0; }
00038 
00039   void  start() {
00040     gettimeofday(&tp, 0);
00041     rbegin = (double)tp.tv_sec + (1.E-06)*tp.tv_usec;
00042   }
00043 
00044   void  stop()
00045     {
00046       gettimeofday(&tp, 0);
00047       rend  = (double)tp.tv_sec + (1.E-06)*tp.tv_usec;
00048       rtotal +=  rend-rbegin;
00049     }
00050 
00051   double getSeconds() { return rtotal; }
00052 
00053  private:
00054   struct  timeval tp;
00055   double  rtotal, rbegin, rend;
00056 };
00057 
00058 
00059 #endif
00060                      
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines