/*
- * Copyright 2016 Facebook, Inc.
+ * Copyright 2013-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* limitations under the License.
*/
-#ifndef FOLLY_STATS_MULTILEVELTIMESERIES_DEFS_H_
-#define FOLLY_STATS_MULTILEVELTIMESERIES_DEFS_H_
+#pragma once
+#include <folly/stats/MultiLevelTimeSeries.h>
#include <glog/logging.h>
namespace folly {
-template <typename VT, typename TT>
-MultiLevelTimeSeries<VT, TT>::MultiLevelTimeSeries(
- size_t nBuckets,
- size_t nLevels,
- const TimeType levelDurations[])
- : cachedTime_(0),
- cachedSum_(0),
- cachedCount_(0) {
- CHECK_GT(nLevels, 0);
- CHECK(levelDurations);
+template <typename VT, typename CT>
+MultiLevelTimeSeries<VT, CT>::MultiLevelTimeSeries(
+ size_t nBuckets,
+ size_t nLevels,
+ const Duration levelDurations[])
+ : cachedTime_(), cachedSum_(0), cachedCount_(0) {
+ CHECK_GT(nLevels, 0u);
+ CHECK(levelDurations);
- levels_.reserve(nLevels);
- for (size_t i = 0; i < nLevels; ++i) {
- if (levelDurations[i] == TT(0)) {
- CHECK_EQ(i, nLevels - 1);
- } else if (i > 0) {
- CHECK(levelDurations[i-1] < levelDurations[i]);
- }
- levels_.emplace_back(nBuckets, levelDurations[i]);
+ levels_.reserve(nLevels);
+ for (size_t i = 0; i < nLevels; ++i) {
+ if (levelDurations[i] == Duration(0)) {
+ CHECK_EQ(i, nLevels - 1);
+ } else if (i > 0) {
+ CHECK(levelDurations[i - 1] < levelDurations[i]);
}
+ levels_.emplace_back(nBuckets, levelDurations[i]);
+ }
}
-template <typename VT, typename TT>
-void MultiLevelTimeSeries<VT, TT>::addValue(TimeType now,
- const ValueType& val) {
+template <typename VT, typename CT>
+MultiLevelTimeSeries<VT, CT>::MultiLevelTimeSeries(
+ size_t nBuckets,
+ std::initializer_list<Duration> durations)
+ : cachedTime_(), cachedSum_(0), cachedCount_(0) {
+ CHECK_GT(durations.size(), 0u);
+
+ levels_.reserve(durations.size());
+ size_t i = 0;
+ Duration prev{0};
+ for (auto dur : durations) {
+ if (dur == Duration(0)) {
+ CHECK_EQ(i, durations.size() - 1);
+ } else if (i > 0) {
+ CHECK(prev < dur);
+ }
+ levels_.emplace_back(nBuckets, dur);
+ prev = dur;
+ i++;
+ }
+}
+
+template <typename VT, typename CT>
+void MultiLevelTimeSeries<VT, CT>::addValue(
+ TimePoint now,
+ const ValueType& val) {
addValueAggregated(now, val, 1);
}
-template <typename VT, typename TT>
-void MultiLevelTimeSeries<VT, TT>::addValue(TimeType now,
- const ValueType& val,
- int64_t times) {
- addValueAggregated(now, val * times, times);
+template <typename VT, typename CT>
+void MultiLevelTimeSeries<VT, CT>::addValue(
+ TimePoint now,
+ const ValueType& val,
+ uint64_t times) {
+ addValueAggregated(now, val * ValueType(times), times);
}
-template <typename VT, typename TT>
-void MultiLevelTimeSeries<VT, TT>::addValueAggregated(TimeType now,
- const ValueType& total,
- int64_t nsamples) {
+template <typename VT, typename CT>
+void MultiLevelTimeSeries<VT, CT>::addValueAggregated(
+ TimePoint now,
+ const ValueType& total,
+ uint64_t nsamples) {
if (cachedTime_ != now) {
flush();
cachedTime_ = now;
cachedCount_ += nsamples;
}
-template <typename VT, typename TT>
-void MultiLevelTimeSeries<VT, TT>::update(TimeType now) {
+template <typename VT, typename CT>
+void MultiLevelTimeSeries<VT, CT>::update(TimePoint now) {
flush();
for (size_t i = 0; i < levels_.size(); ++i) {
levels_[i].update(now);
}
}
-template <typename VT, typename TT>
-void MultiLevelTimeSeries<VT, TT>::flush() {
+template <typename VT, typename CT>
+void MultiLevelTimeSeries<VT, CT>::flush() {
// update all the underlying levels
if (cachedCount_ > 0) {
for (size_t i = 0; i < levels_.size(); ++i) {
}
}
-template <typename VT, typename TT>
-void MultiLevelTimeSeries<VT, TT>::clear() {
- for (auto & level : levels_) {
+template <typename VT, typename CT>
+void MultiLevelTimeSeries<VT, CT>::clear() {
+ for (auto& level : levels_) {
level.clear();
}
- cachedTime_ = TimeType(0);
+ cachedTime_ = TimePoint();
cachedSum_ = 0;
cachedCount_ = 0;
}
-} // folly
-
-#endif // FOLLY_STATS_MULTILEVELTIMESERIES_DEFS_H_
+} // namespace folly