|
4 | 4 | #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS |
5 | 5 |
|
6 | 6 | #include "histogram.h" |
| 7 | +#include "base_object-inl.h" |
7 | 8 | #include "node_internals.h" |
8 | 9 |
|
9 | 10 | namespace node { |
10 | 11 |
|
11 | | -inline Histogram::Histogram(int64_t lowest, int64_t highest, int figures) { |
12 | | - CHECK_EQ(0, hdr_init(lowest, highest, figures, &histogram_)); |
| 12 | +void Histogram::Reset() { |
| 13 | + hdr_reset(histogram_.get()); |
13 | 14 | } |
14 | 15 |
|
15 | | -inline Histogram::~Histogram() { |
16 | | - hdr_close(histogram_); |
| 16 | +bool Histogram::Record(int64_t value) { |
| 17 | + return hdr_record_value(histogram_.get(), value); |
17 | 18 | } |
18 | 19 |
|
19 | | -inline void Histogram::Reset() { |
20 | | - hdr_reset(histogram_); |
| 20 | +int64_t Histogram::Min() { |
| 21 | + return hdr_min(histogram_.get()); |
21 | 22 | } |
22 | 23 |
|
23 | | -inline bool Histogram::Record(int64_t value) { |
24 | | - return hdr_record_value(histogram_, value); |
| 24 | +int64_t Histogram::Max() { |
| 25 | + return hdr_max(histogram_.get()); |
25 | 26 | } |
26 | 27 |
|
27 | | -inline int64_t Histogram::Min() { |
28 | | - return hdr_min(histogram_); |
| 28 | +double Histogram::Mean() { |
| 29 | + return hdr_mean(histogram_.get()); |
29 | 30 | } |
30 | 31 |
|
31 | | -inline int64_t Histogram::Max() { |
32 | | - return hdr_max(histogram_); |
| 32 | +double Histogram::Stddev() { |
| 33 | + return hdr_stddev(histogram_.get()); |
33 | 34 | } |
34 | 35 |
|
35 | | -inline double Histogram::Mean() { |
36 | | - return hdr_mean(histogram_); |
37 | | -} |
38 | | - |
39 | | -inline double Histogram::Stddev() { |
40 | | - return hdr_stddev(histogram_); |
41 | | -} |
42 | | - |
43 | | -inline double Histogram::Percentile(double percentile) { |
| 36 | +double Histogram::Percentile(double percentile) { |
44 | 37 | CHECK_GT(percentile, 0); |
45 | 38 | CHECK_LE(percentile, 100); |
46 | | - return hdr_value_at_percentile(histogram_, percentile); |
| 39 | + return static_cast<double>( |
| 40 | + hdr_value_at_percentile(histogram_.get(), percentile)); |
47 | 41 | } |
48 | 42 |
|
49 | | -inline void Histogram::Percentiles(std::function<void(double, double)> fn) { |
| 43 | +template <typename Iterator> |
| 44 | +void Histogram::Percentiles(Iterator&& fn) { |
50 | 45 | hdr_iter iter; |
51 | | - hdr_iter_percentile_init(&iter, histogram_, 1); |
| 46 | + hdr_iter_percentile_init(&iter, histogram_.get(), 1); |
52 | 47 | while (hdr_iter_next(&iter)) { |
53 | 48 | double key = iter.specifics.percentiles.percentile; |
54 | | - double value = iter.value; |
| 49 | + double value = static_cast<double>(iter.value); |
55 | 50 | fn(key, value); |
56 | 51 | } |
57 | 52 | } |
58 | 53 |
|
| 54 | +bool HistogramBase::RecordDelta() { |
| 55 | + uint64_t time = uv_hrtime(); |
| 56 | + bool ret = true; |
| 57 | + if (prev_ > 0) { |
| 58 | + int64_t delta = time - prev_; |
| 59 | + if (delta > 0) { |
| 60 | + ret = Record(delta); |
| 61 | + TraceDelta(delta); |
| 62 | + if (!ret) { |
| 63 | + if (exceeds_ < 0xFFFFFFFF) |
| 64 | + exceeds_++; |
| 65 | + TraceExceeds(delta); |
| 66 | + } |
| 67 | + } |
| 68 | + } |
| 69 | + prev_ = time; |
| 70 | + return ret; |
| 71 | +} |
| 72 | + |
| 73 | +void HistogramBase::ResetState() { |
| 74 | + Reset(); |
| 75 | + exceeds_ = 0; |
| 76 | + prev_ = 0; |
| 77 | +} |
| 78 | + |
59 | 79 | } // namespace node |
60 | 80 |
|
61 | 81 | #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS |
|
0 commit comments