GitHub Actions: Try MSVC builds with /std:c++17 and 20
[ACE_TAO.git] / ACE / ace / Throughput_Stats.h
blobf3d1744c5628e1a5a6d8c0a4e8762d73709d2b3b
1 // -*- C++ -*-
3 //==========================================================================
4 /**
5 * @file Throughput_Stats.h
7 * @author David L. Levine
8 */
9 //==========================================================================
12 #ifndef ACE_THROUGHPUT_STATS_H
13 #define ACE_THROUGHPUT_STATS_H
15 #include /**/ "ace/pre.h"
17 #include /**/ "ace/ACE_export.h"
19 #if !defined (ACE_LACKS_PRAGMA_ONCE)
20 # pragma once
21 #endif /* ACE_LACKS_PRAGMA_ONCE */
23 #include "ace/Basic_Stats.h"
25 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
27 /// A simple class to make throughput and latency analysis.
28 /**
30 * Keep the relevant information to perform throughput and latency
31 * analysis, including:
32 * -# Minimum, Average and Maximum latency
33 * -# Jitter for the latency
34 * -# Linear regression for throughput
35 * -# Accumulate results from several samples to obtain aggregated
36 * results, across several threads or experiments.
38 * @todo The idea behind this class was to use linear regression to
39 * determine if the throughput was linear or exhibited jitter.
40 * Unfortunately it never worked quite right, so only average
41 * throughput is computed.
43 class ACE_Export ACE_Throughput_Stats : public ACE_Basic_Stats
45 public:
46 /// Constructor
47 ACE_Throughput_Stats (void);
49 /// Store one sample
50 void sample (ACE_UINT64 throughput, ACE_UINT64 latency);
52 /// Update the values to reflect the stats in @a throughput
53 void accumulate (const ACE_Throughput_Stats &throughput);
55 /// Print down the stats
56 void dump_results (const ACE_TCHAR* msg, scale_factor_type scale_factor);
58 /// Dump the average throughput stats.
59 static void dump_throughput (const ACE_TCHAR *msg,
60 scale_factor_type scale_factor,
61 ACE_UINT64 elapsed_time,
62 ACE_UINT32 samples_count);
63 private:
64 /// The last throughput measurement.
65 ACE_UINT64 throughput_last_;
68 ACE_END_VERSIONED_NAMESPACE_DECL
70 #include /**/ "ace/post.h"
72 #endif /* ! ACE_THROUGHPUT_STATS_H */