proxygen
folly::detail::BufferedSlidingWindow< DigestT, ClockT > Class Template Reference

#include <BufferedStat.h>

Inheritance diagram for folly::detail::BufferedSlidingWindow< DigestT, ClockT >:
folly::detail::BufferedStat< DigestT, ClockT >

Public Types

using TimePoint = typename ClockT::time_point
 
- Public Types inherited from folly::detail::BufferedStat< DigestT, ClockT >
using TimePoint = typename ClockT::time_point
 

Public Member Functions

 BufferedSlidingWindow (size_t nBuckets, typename ClockT::duration bufferDuration, size_t bufferSize, size_t digestSize)
 
std::vector< DigestT > get (TimePoint now=ClockT::now())
 
void onNewDigest (DigestT digest, TimePoint newExpiry, TimePoint oldExpiry, const std::unique_lock< SharedMutex > &g) final
 
- Public Member Functions inherited from folly::detail::BufferedStat< DigestT, ClockT >
 BufferedStat ()=delete
 
 BufferedStat (typename ClockT::duration bufferDuration, size_t bufferSize, size_t digestSize)
 
virtual ~BufferedStat ()
 
void append (double value, TimePoint now=ClockT::now())
 
void flush ()
 

Private Attributes

SlidingWindow< DigestT > slidingWindow_
 

Additional Inherited Members

- Protected Member Functions inherited from folly::detail::BufferedStat< DigestT, ClockT >
std::unique_lock< SharedMutexupdateIfExpired (TimePoint now)
 
std::unique_lock< SharedMutexupdate ()
 
- Protected Attributes inherited from folly::detail::BufferedStat< DigestT, ClockT >
const ClockT::duration bufferDuration_
 
std::atomic< TimePointHolderexpiry_
 
SharedMutex mutex_
 

Detailed Description

template<typename DigestT, typename ClockT>
class folly::detail::BufferedSlidingWindow< DigestT, ClockT >

Definition at line 126 of file BufferedStat.h.

Member Typedef Documentation

template<typename DigestT, typename ClockT>
using folly::detail::BufferedSlidingWindow< DigestT, ClockT >::TimePoint = typename ClockT::time_point

Definition at line 128 of file BufferedStat.h.

Constructor & Destructor Documentation

template<typename DigestT , typename ClockT>
folly::detail::BufferedSlidingWindow< DigestT, ClockT >::BufferedSlidingWindow ( size_t  nBuckets,
typename ClockT::duration  bufferDuration,
size_t  bufferSize,
size_t  digestSize 
)

Definition at line 112 of file BufferedStat-defs.h.

117  : BufferedStat<DigestT, ClockT>(bufferDuration, bufferSize, digestSize),
118  slidingWindow_([=]() { return DigestT(digestSize); }, nBuckets) {}
SlidingWindow< DigestT > slidingWindow_
Definition: BufferedStat.h:145

Member Function Documentation

template<typename DigestT , typename ClockT >
std::vector< DigestT > folly::detail::BufferedSlidingWindow< DigestT, ClockT >::get ( TimePoint  now = ClockT::now())

Definition at line 121 of file BufferedStat-defs.h.

References g(), folly::detail::SlidingWindow< BucketT >::get(), folly::detail::BufferedSlidingWindow< DigestT, ClockT >::slidingWindow_, and folly::detail::BufferedStat< DigestT, ClockT >::updateIfExpired().

122  {
123  std::vector<DigestT> digests;
124  {
125  auto g = this->updateIfExpired(now);
126  digests = slidingWindow_.get();
127  }
128  digests.erase(
129  std::remove_if(
130  digests.begin(),
131  digests.end(),
132  [](const DigestT& digest) { return digest.empty(); }),
133  digests.end());
134  return digests;
135 }
std::chrono::steady_clock::time_point now()
std::unique_lock< SharedMutex > updateIfExpired(TimePoint now)
std::vector< BucketT > get() const
SlidingWindow< DigestT > slidingWindow_
Definition: BufferedStat.h:145
g_t g(f_t)
template<typename DigestT, typename ClockT >
void folly::detail::BufferedSlidingWindow< DigestT, ClockT >::onNewDigest ( DigestT  digest,
TimePoint  newExpiry,
TimePoint  oldExpiry,
const std::unique_lock< SharedMutex > &  g 
)
finalvirtual

Implements folly::detail::BufferedStat< DigestT, ClockT >.

Definition at line 138 of file BufferedStat-defs.h.

References a, folly::detail::BufferedStat< DigestT, ClockT >::bufferDuration_, diff(), folly::detail::SlidingWindow< BucketT >::front(), merge(), folly::gen::move, folly::detail::SlidingWindow< BucketT >::set(), folly::detail::SlidingWindow< BucketT >::slide(), and folly::detail::BufferedSlidingWindow< DigestT, ClockT >::slidingWindow_.

142  {
143  if (newExpiry > oldExpiry) {
144  auto diff = newExpiry - oldExpiry;
146  diff -= this->bufferDuration_;
147  slidingWindow_.set(diff / this->bufferDuration_, std::move(digest));
148  } else {
149  // just update current window
150  std::array<DigestT, 2> a{{slidingWindow_.front(), std::move(digest)}};
151  slidingWindow_.set(0 /* current window */, DigestT::merge(a));
152  }
153 }
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
const ClockT::duration bufferDuration_
Definition: BufferedStat.h:61
void set(size_t idx, BucketT bucket)
void slide(size_t nBuckets)
char a
SlidingWindow< DigestT > slidingWindow_
Definition: BufferedStat.h:145
uint64_t diff(uint64_t a, uint64_t b)
Definition: FutexTest.cpp:135
void merge(unsigned int iters, size_t maxSize, size_t bufSize)

Member Data Documentation

template<typename DigestT, typename ClockT>
SlidingWindow<DigestT> folly::detail::BufferedSlidingWindow< DigestT, ClockT >::slidingWindow_
private

The documentation for this class was generated from the following files: