• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef SRC_HISTOGRAM_INL_H_
2 #define SRC_HISTOGRAM_INL_H_
3 
4 #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5 
6 #include "histogram.h"
7 #include "base_object-inl.h"
8 #include "node_internals.h"
9 
10 namespace node {
11 
Reset()12 void Histogram::Reset() {
13   hdr_reset(histogram_.get());
14 }
15 
Record(int64_t value)16 bool Histogram::Record(int64_t value) {
17   return hdr_record_value(histogram_.get(), value);
18 }
19 
Min()20 int64_t Histogram::Min() {
21   return hdr_min(histogram_.get());
22 }
23 
Max()24 int64_t Histogram::Max() {
25   return hdr_max(histogram_.get());
26 }
27 
Mean()28 double Histogram::Mean() {
29   return hdr_mean(histogram_.get());
30 }
31 
Stddev()32 double Histogram::Stddev() {
33   return hdr_stddev(histogram_.get());
34 }
35 
Percentile(double percentile)36 double Histogram::Percentile(double percentile) {
37   CHECK_GT(percentile, 0);
38   CHECK_LE(percentile, 100);
39   return static_cast<double>(
40       hdr_value_at_percentile(histogram_.get(), percentile));
41 }
42 
43 template <typename Iterator>
Percentiles(Iterator && fn)44 void Histogram::Percentiles(Iterator&& fn) {
45   hdr_iter iter;
46   hdr_iter_percentile_init(&iter, histogram_.get(), 1);
47   while (hdr_iter_next(&iter)) {
48     double key = iter.specifics.percentiles.percentile;
49     double value = static_cast<double>(iter.value);
50     fn(key, value);
51   }
52 }
53 
RecordDelta()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 
ResetState()73 void HistogramBase::ResetState() {
74   Reset();
75   exceeds_ = 0;
76   prev_ = 0;
77 }
78 
79 }  // namespace node
80 
81 #endif  // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
82 
83 #endif  // SRC_HISTOGRAM_INL_H_
84