|
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