libzypp
12.16.5
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
Measure.cc
Go to the documentation of this file.
1
/*---------------------------------------------------------------------\
2
| ____ _ __ __ ___ |
3
| |__ / \ / / . \ . \ |
4
| / / \ V /| _/ _/ |
5
| / /__ | | | | | | |
6
| /_____||_| |_| |_| |
7
| |
8
\---------------------------------------------------------------------*/
12
extern
"C"
13
{
14
#include <sys/times.h>
15
#include <unistd.h>
16
}
17
#include <iostream>
18
19
#include "
zypp/base/Logger.h
"
20
#include "
zypp/base/Measure.h
"
21
#include "
zypp/base/String.h
"
22
23
using
std::endl;
24
25
#undef ZYPP_BASE_LOGGER_LOGGROUP
26
#define ZYPP_BASE_LOGGER_LOGGROUP "Measure"
27
29
namespace
zypp
30
{
31
32
namespace
debug
33
{
34
36
struct
Tm
37
{
38
Tm
()
39
:
_real
( 0 )
40
,
_proc
(
tmsEmpty
)
41
{}
42
43
void
get
()
44
{
45
_real
= ::time(NULL);
46
::times( &
_proc
);
47
}
48
49
Tm
operator-
(
const
Tm
& rhs )
const
50
{
51
Tm
ret( *
this
);
52
ret.
_real
-= rhs.
_real
;
53
ret.
_proc
.tms_utime -= rhs.
_proc
.tms_utime;
54
ret.
_proc
.tms_stime -= rhs.
_proc
.tms_stime;
55
ret.
_proc
.tms_cutime -= rhs.
_proc
.tms_cutime;
56
ret.
_proc
.tms_cstime -= rhs.
_proc
.tms_cstime;
57
return
ret;
58
}
59
60
std::string
asString
()
const
61
{
62
std::string ret(
timeStr
(
_real
) );
63
ret +=
" (u "
;
64
ret +=
timeStr
(
asSec
(
_proc
.tms_utime ) );
65
ret +=
" s "
;
66
ret +=
timeStr
(
asSec
(
_proc
.tms_stime ) );
67
ret +=
" c "
;
68
ret +=
timeStr
(
asSec
(
_proc
.tms_cutime +
_proc
.tms_cstime ) );
69
ret +=
")"
;
70
return
ret;
71
}
72
73
std::string
stringIf
( clock_t ticks_r,
const
std::string & tag_r )
const
74
{
75
std::string ret;
76
if
( ticks_r )
77
{
78
ret += tag_r;
79
ret +=
timeStr
(
asSec
( ticks_r ) );
80
}
81
return
ret;
82
}
83
84
double
asSec
( clock_t ticks_r )
const
85
{
return
double(ticks_r) /
ticks
; }
86
87
std::string
timeStr
( time_t sec_r )
const
88
{
89
time_t h = sec_r/3600;
90
sec_r -= h*3600;
91
time_t m = sec_r/60;
92
sec_r -= m*60;
93
if
( h )
94
return
str::form
(
"%lu:%02lu:%02lu"
, h, m, sec_r );
95
if
( m )
96
return
str::form
(
"%lu:%02lu"
, m, sec_r );
97
return
str::form
(
"%lu"
, sec_r );
98
}
99
100
std::string
timeStr
(
double
sec_r )
const
101
{
102
time_t h = time_t(sec_r)/3600;
103
sec_r -= h*3600;
104
time_t m = time_t(sec_r)/60;
105
sec_r -= m*60;
106
if
( h )
107
return
str::form
(
"%lu:%02lu:%05.2lf"
, h, m, sec_r );
108
if
( m )
109
return
str::form
(
"%lu:%05.2lf"
, m, sec_r );
110
return
str::form
(
"%.2lf"
, sec_r );
111
}
112
114
static
const
long
ticks
;
116
static
const
struct
tms
tmsEmpty
;
118
time_t
_real
;
120
struct
tms
_proc
;
121
};
122
123
const
struct
tms
Tm
::
tmsEmpty
= { 0, 0, 0, 0 };
124
const
long
Tm::ticks
= sysconf(_SC_CLK_TCK);
125
127
std::ostream &
operator<<
( std::ostream & str,
const
Tm
& obj )
128
{
129
return
str << obj.
asString
();
130
}
131
132
134
//
135
// CLASS NAME : Measure::Impl
136
//
138
class
Measure::Impl
139
{
140
public
:
141
Impl
(
const
std::string & ident_r )
142
:
_ident
( ident_r )
143
,
_level
(
_glevel
)
144
,
_seq
( 0 )
145
{
146
_glevel
+=
".."
;
147
INT
<<
_level
<<
"START MEASURE("
<<
_ident
<<
")"
<< endl;
148
_start
.
get
();
149
}
150
151
~Impl
()
152
{
153
_stop
.
get
();
154
++
_seq
;
155
std::ostream & str(
INT
<<
_level
<<
"MEASURE("
<<
_ident
<<
") "
);
156
dumpMeasure
( str );
157
_glevel
.erase( 0, 2 );
158
}
159
160
void
restart
()
161
{
162
INT
<<
_level
<<
"RESTART MEASURE("
<<
_ident
<<
")"
<< endl;
163
_start
=
_stop
;
164
}
165
166
void
elapsed
()
const
167
{
168
_stop
.
get
();
169
++
_seq
;
170
std::ostream & str(
INT
<<
_level
<<
"ELAPSED("
<<
_ident
<<
") "
);
171
dumpMeasure
( str );
172
_elapsed
=
_stop
;
173
}
174
175
private
:
176
std::ostream &
dumpMeasure
( std::ostream & str_r )
const
177
{
178
str_r << (
_stop
-
_start
);
179
if
(
_seq
> 1 )
// diff to previous _elapsed
180
{
181
str_r <<
" ["
<< (
_stop
-
_elapsed
) <<
"]"
;
182
}
183
return
str_r << endl;
184
}
185
186
private
:
187
static
std::string
_glevel
;
188
189
std::string
_ident
;
190
std::string
_level
;
191
Tm
_start
;
192
mutable
unsigned
_seq
;
193
mutable
Tm
_elapsed
;
194
mutable
Tm
_stop
;
195
};
196
197
std::string
Measure::Impl::_glevel
;
198
200
202
//
203
// CLASS NAME : Measure
204
//
206
207
Measure::Measure
()
208
{}
209
210
Measure::Measure
(
const
std::string & ident_r )
211
: _pimpl( new
Impl
( ident_r ) )
212
{}
213
214
Measure::~Measure
()
215
{}
216
217
void
Measure::start
(
const
std::string & ident_r )
218
{
219
stop
();
220
_pimpl
.
reset
(
new
Impl
( ident_r ) );
221
}
222
223
void
Measure::restart
()
224
{
225
_pimpl
->
restart
();
226
}
227
228
void
Measure::elapsed
()
const
229
{
230
if
(
_pimpl
)
231
_pimpl
->
elapsed
();
232
}
233
234
void
Measure::stop
()
235
{
236
_pimpl
.
reset
();
237
}
238
240
}
// namespace debug
243
}
// namespace zypp
zypp
base
Measure.cc
Generated by
1.8.2