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()12void Histogram::Reset() { 13 hdr_reset(histogram_.get()); 14 } 15 Record(int64_t value)16bool Histogram::Record(int64_t value) { 17 return hdr_record_value(histogram_.get(), value); 18 } 19 Min()20int64_t Histogram::Min() { 21 return hdr_min(histogram_.get()); 22 } 23 Max()24int64_t Histogram::Max() { 25 return hdr_max(histogram_.get()); 26 } 27 Mean()28double Histogram::Mean() { 29 return hdr_mean(histogram_.get()); 30 } 31 Stddev()32double Histogram::Stddev() { 33 return hdr_stddev(histogram_.get()); 34 } 35 Percentile(double percentile)36double 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)44void 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()54bool 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()73void 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