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