μHAL (v2.6.5)
Part of the IPbus software repository
TimeIntervalStats.cpp
Go to the documentation of this file.
1 
3 
4 
5 #include <boost/chrono/duration.hpp> // for operator/, operator<, operator>
6 #include <boost/chrono/time_point.hpp> // for operator-
7 #include <boost/ratio/ratio.hpp> // for ratio
8 #include <boost/ratio/ratio_fwd.hpp> // for milli
9 
10 #include <ostream> // for operator<<, ostream, basic_os...
11 
12 
13 namespace uhal {
14 
16  nMeasurements(0)
17 {
18 }
19 
21 {
22 }
23 
24 
26 {
27  return nMeasurements;
28 }
29 
30 
31 const TimeIntervalStats::Clock_t::duration& TimeIntervalStats::min() const
32 {
33  return mMin;
34 }
35 
36 
37 const TimeIntervalStats::Clock_t::duration& TimeIntervalStats::max() const
38 {
39  return mMax;
40 }
41 
42 
43 TimeIntervalStats::Clock_t::duration TimeIntervalStats::mean() const
44 {
45  return mSum / nMeasurements;
46 }
47 
48 
49 const std::queue<TimeIntervalStats::Clock_t::duration>& TimeIntervalStats::getLatestMeasurements() const
50 {
51  return mLatestMeasurements;
52 }
53 
54 
55 void TimeIntervalStats::add(const Clock_t::time_point& aT1, const Clock_t::time_point& aT2)
56 {
57  const Clock_t::duration lInterval = aT2 - aT1;
58 
59  if ((nMeasurements == 0) or (lInterval < mMin))
60  mMin = lInterval;
61  if ((nMeasurements == 0) or (lInterval > mMax))
62  mMax = lInterval;
63 
64  mSum += lInterval;
65  nMeasurements += 1;
66 
67  mLatestMeasurements.push(lInterval);
68  if (mLatestMeasurements.size() > 5)
69  mLatestMeasurements.pop();
70 }
71 
72 
74 {
75  for (size_t i = 0; i < nMeasurements; i++)
76  mLatestMeasurements.pop();
77  nMeasurements = 0;
78 }
79 
80 
81 std::ostream& operator<<(std::ostream& aStream, const TimeIntervalStats& aStats)
82 {
83  if (aStats.size() == 0)
84  aStream << "no values recorded";
85  else {
86  typedef boost::chrono::duration<float, boost::milli> MilliSec_t;
87 
88  aStream << "min / mean / max = " << MilliSec_t(aStats.min()).count() << " / "
89  << MilliSec_t(aStats.mean()).count() << " / " << MilliSec_t(aStats.max()).count() << " ms";
90  std::queue<TimeIntervalStats::Clock_t::duration> lLatestMeasurements = aStats.getLatestMeasurements();
91  aStream << ", last values ";
92  while (lLatestMeasurements.size() > 0) {
93  aStream << MilliSec_t(lLatestMeasurements.front()).count() << (lLatestMeasurements.size() > 1 ? ", " : " ms");
94  lLatestMeasurements.pop();
95  }
96  }
97 
98  return aStream;
99 }
100 
101 
102 } // end ns uhal
std::queue< Clock_t::duration > mLatestMeasurements
const Clock_t::duration & min() const
Clock_t::duration mean() const
void add(const Clock_t::time_point &aT1, const Clock_t::time_point &aT2)
const std::queue< Clock_t::duration > & getLatestMeasurements() const
std::ostream & operator<<(std::ostream &aStr, const uhal::HttpResponseType &aHttpResponse)
const Clock_t::duration & max() const