src/work/marci/time_measure.h
author jacint
Mon, 23 Feb 2004 13:23:53 +0000
changeset 121 9d5a99b282c0
parent 118 38e16c594a4f
child 124 8d24100ad408
permissions -rw-r--r--
include unistd
marci@73
     1
// -*- c++ -*-
marci@73
     2
#ifndef TIME_MEASURE_H
marci@73
     3
#define TIME_MEASURE_H
marci@73
     4
marci@73
     5
#include <sys/time.h>
alpar@117
     6
#include <sys/times.h>
alpar@117
     7
#include <fstream>
alpar@117
     8
#include <iostream>
jacint@121
     9
#include <unistd.h>
marci@73
    10
marci@73
    11
double currTime() {
marci@73
    12
  timeval tv;
marci@73
    13
  //timezone tz;
marci@73
    14
  gettimeofday(&tv, 0);
marci@73
    15
  return double(tv.tv_sec)+double(tv.tv_usec)/1000000.0;
marci@73
    16
}
marci@73
    17
alpar@117
    18
class TimeStamp
alpar@117
    19
{
alpar@117
    20
  tms ts;
alpar@118
    21
  double real_time;
alpar@118
    22
  
alpar@117
    23
public:
alpar@117
    24
alpar@117
    25
  tms &getTms() {return ts;}
alpar@117
    26
  const tms &getTms() const {return ts;}
alpar@118
    27
  double getRealTime() const {return real_time;}
alpar@118
    28
  void stamp()
alpar@118
    29
  {
alpar@118
    30
    timeval tv;
alpar@118
    31
    times(&ts);
alpar@118
    32
    gettimeofday(&tv, 0);real_time=tv.tv_sec+double(tv.tv_usec)/1e6;
alpar@118
    33
  }
alpar@118
    34
  
alpar@118
    35
  TimeStamp()
alpar@118
    36
  { ts.tms_utime=ts.tms_stime=ts.tms_cutime=ts.tms_cstime=0; real_time=0;}
alpar@118
    37
  
alpar@117
    38
  TimeStamp(void *) { stamp();}
alpar@117
    39
  
alpar@117
    40
  TimeStamp &operator+=(const TimeStamp &b)
alpar@117
    41
  {
alpar@117
    42
    ts.tms_utime+=b.ts.tms_utime;
alpar@117
    43
    ts.tms_stime+=b.ts.tms_stime;
alpar@117
    44
    ts.tms_cutime+=b.ts.tms_cutime;
alpar@117
    45
    ts.tms_cstime+=b.ts.tms_cstime;
alpar@118
    46
    real_time+=b.real_time;
alpar@117
    47
    return *this;
alpar@117
    48
  }
alpar@117
    49
  TimeStamp operator+(const TimeStamp &b) const
alpar@117
    50
  {
alpar@117
    51
    TimeStamp t(*this);
alpar@117
    52
    return t+=b;
alpar@117
    53
  }
alpar@117
    54
  TimeStamp &operator-=(const TimeStamp &b)
alpar@117
    55
  {
alpar@117
    56
    ts.tms_utime-=b.ts.tms_utime;
alpar@117
    57
    ts.tms_stime-=b.ts.tms_stime;
alpar@117
    58
    ts.tms_cutime-=b.ts.tms_cutime;
alpar@117
    59
    ts.tms_cstime-=b.ts.tms_cstime;
alpar@118
    60
    real_time-=b.real_time;
alpar@117
    61
    return *this;
alpar@117
    62
  }
alpar@117
    63
  TimeStamp operator-(const TimeStamp &b) const
alpar@117
    64
  {
alpar@117
    65
    TimeStamp t(*this);
alpar@117
    66
    return t-=b;
alpar@117
    67
  }
alpar@117
    68
alpar@117
    69
  TimeStamp Ellapsed() const
alpar@117
    70
  {
alpar@117
    71
    TimeStamp t(NULL);
alpar@117
    72
    return t-*this;
alpar@117
    73
  }
alpar@117
    74
  
alpar@117
    75
  friend std::ostream& operator<<(std::ostream& os,const TimeStamp &t);
alpar@117
    76
  
alpar@118
    77
  double getUserTime() const
alpar@118
    78
  {
alpar@118
    79
    long cls = sysconf(_SC_CLK_TCK);
alpar@118
    80
    return double(ts.tms_utime)/cls;
alpar@118
    81
  }
alpar@118
    82
  double getSystemTime() const
alpar@118
    83
  {
alpar@118
    84
    long cls = sysconf(_SC_CLK_TCK);
alpar@118
    85
    return double(ts.tms_stime)/cls;
alpar@118
    86
  }
alpar@118
    87
  double getCUserTime() const
alpar@118
    88
  {
alpar@118
    89
    long cls = sysconf(_SC_CLK_TCK);
alpar@118
    90
    return double(ts.tms_cutime)/cls;
alpar@118
    91
  }
alpar@118
    92
  double getCSystemTime() const
alpar@118
    93
  {
alpar@118
    94
    long cls = sysconf(_SC_CLK_TCK);
alpar@118
    95
    return double(ts.tms_cstime)/cls;
alpar@118
    96
  }
alpar@117
    97
};
alpar@117
    98
alpar@117
    99
class Timer
alpar@117
   100
{
alpar@117
   101
  TimeStamp start_time;
alpar@117
   102
alpar@117
   103
public: 
alpar@117
   104
  void reset() {start_time.stamp();}
alpar@117
   105
  Timer() {reset();}
alpar@117
   106
alpar@117
   107
  operator TimeStamp ()
alpar@117
   108
  {
alpar@117
   109
    TimeStamp t;
alpar@117
   110
    t.stamp();
alpar@117
   111
    return t-start_time;
alpar@117
   112
  }  
alpar@117
   113
};
alpar@117
   114
alpar@117
   115
inline std::ostream& operator<<(std::ostream& os,const TimeStamp &t)
alpar@117
   116
{
alpar@117
   117
  long cls = sysconf(_SC_CLK_TCK);
alpar@118
   118
  os << "u: " << double(t.getTms().tms_utime)/cls <<
alpar@117
   119
    "s, s: " << double(t.getTms().tms_stime)/cls <<
alpar@117
   120
    "s, cu: " << double(t.getTms().tms_cutime)/cls <<
alpar@118
   121
    "s, cs: " << double(t.getTms().tms_cstime)/cls <<
alpar@118
   122
    "s, real: " << t.getRealTime() << "s";
alpar@117
   123
  return os;
alpar@117
   124
}
alpar@117
   125
marci@73
   126
#endif //TIME_MEASURE_H