proxygen
folly::detail::BufferedStat< DigestT, ClockT > Class Template Referenceabstract

#include <BufferedStat.h>

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

Classes

struct  TimePointHolder
 

Public Types

using TimePoint = typename ClockT::time_point
 

Public Member Functions

 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 ()
 

Protected Member Functions

virtual void onNewDigest (DigestT digest, TimePoint newExpiry, TimePoint oldExpiry, const std::unique_lock< SharedMutex > &g)=0
 
std::unique_lock< SharedMutexupdateIfExpired (TimePoint now)
 
std::unique_lock< SharedMutexupdate ()
 

Protected Attributes

const ClockT::duration bufferDuration_
 
std::atomic< TimePointHolderexpiry_
 
SharedMutex mutex_
 

Private Types

enum  UpdateMode { UpdateMode::OnExpiry, UpdateMode::Now }
 

Private Member Functions

void doUpdate (TimePoint now, const std::unique_lock< SharedMutex > &g, UpdateMode updateMode)
 
TimePoint roundUp (TimePoint t)
 

Private Attributes

DigestBuilder< DigestT > digestBuilder_
 

Detailed Description

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

Definition at line 32 of file BufferedStat.h.

Member Typedef Documentation

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

Definition at line 34 of file BufferedStat.h.

Member Enumeration Documentation

template<typename DigestT, typename ClockT>
enum folly::detail::BufferedStat::UpdateMode
strongprivate
Enumerator
OnExpiry 
Now 

Definition at line 81 of file BufferedStat.h.

81  {
82  OnExpiry,
83  Now,
84  };

Constructor & Destructor Documentation

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

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

References folly::detail::BufferedStat< DigestT, ClockT >::expiry_, now(), and folly::detail::BufferedStat< DigestT, ClockT >::roundUp().

32  : bufferDuration_(bufferDuration), digestBuilder_(bufferSize, digestSize) {
33  expiry_.store(
34  TimePointHolder(roundUp(ClockT::now())), std::memory_order_relaxed);
35 }
std::chrono::steady_clock::time_point now()
const ClockT::duration bufferDuration_
Definition: BufferedStat.h:61
std::atomic< TimePointHolder > expiry_
Definition: BufferedStat.h:62
DigestBuilder< DigestT > digestBuilder_
Definition: BufferedStat.h:78
TimePoint roundUp(TimePoint t)
template<typename DigestT, typename ClockT>
virtual folly::detail::BufferedStat< DigestT, ClockT >::~BufferedStat ( )
inlinevirtual

Definition at line 43 of file BufferedStat.h.

43 {}

Member Function Documentation

template<typename DigestT , typename ClockT >
void folly::detail::BufferedStat< DigestT, ClockT >::append ( double  value,
TimePoint  now = ClockT::now() 
)

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

References folly::detail::BufferedStat< DigestT, ClockT >::digestBuilder_, folly::detail::BufferedStat< DigestT, ClockT >::doUpdate(), folly::detail::BufferedStat< DigestT, ClockT >::expiry_, g(), folly::detail::BufferedStat< DigestT, ClockT >::mutex_, folly::detail::BufferedStat< DigestT, ClockT >::OnExpiry, and UNLIKELY.

Referenced by folly::detail::BufferedStat< folly::TDigest, ClockT >::~BufferedStat().

38  {
39  if (UNLIKELY(now > expiry_.load(std::memory_order_relaxed).tp)) {
40  std::unique_lock<SharedMutex> g(mutex_, std::try_to_lock_t());
41  if (g.owns_lock()) {
43  }
44  }
45  digestBuilder_.append(value);
46 }
std::chrono::steady_clock::time_point now()
std::atomic< TimePointHolder > expiry_
Definition: BufferedStat.h:62
void doUpdate(TimePoint now, const std::unique_lock< SharedMutex > &g, UpdateMode updateMode)
g_t g(f_t)
uint64_t value(const typename LockFreeRingBuffer< T, Atom >::Cursor &rbcursor)
DigestBuilder< DigestT > digestBuilder_
Definition: BufferedStat.h:78
#define UNLIKELY(x)
Definition: Likely.h:48
template<typename DigestT , typename ClockT >
void folly::detail::BufferedStat< DigestT, ClockT >::doUpdate ( TimePoint  now,
const std::unique_lock< SharedMutex > &  g,
UpdateMode  updateMode 
)
private

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

References folly::detail::BufferedStat< DigestT, ClockT >::digestBuilder_, folly::detail::BufferedStat< DigestT, ClockT >::expiry_, g(), now(), folly::detail::BufferedStat< DigestT, ClockT >::Now, folly::detail::BufferedStat< DigestT, ClockT >::onNewDigest(), and folly::detail::BufferedStat< DigestT, ClockT >::roundUp().

Referenced by folly::detail::BufferedStat< DigestT, ClockT >::append(), folly::detail::BufferedStat< DigestT, ClockT >::flush(), and folly::detail::BufferedStat< DigestT, ClockT >::updateIfExpired().

76  {
77  DCHECK(g.owns_lock());
78  // Check that no other thread has performed the slide after the check
79  auto oldExpiry = expiry_.load(std::memory_order_relaxed).tp;
80  if (now > oldExpiry || updateMode == UpdateMode::Now) {
81  now = roundUp(now);
82  expiry_.store(TimePointHolder(now), std::memory_order_relaxed);
83  onNewDigest(digestBuilder_.build(), now, oldExpiry, g);
84  }
85 }
std::chrono::steady_clock::time_point now()
virtual void onNewDigest(DigestT digest, TimePoint newExpiry, TimePoint oldExpiry, const std::unique_lock< SharedMutex > &g)=0
std::atomic< TimePointHolder > expiry_
Definition: BufferedStat.h:62
g_t g(f_t)
DigestBuilder< DigestT > digestBuilder_
Definition: BufferedStat.h:78
TimePoint roundUp(TimePoint t)
template<typename DigestT , typename ClockT >
void folly::detail::BufferedStat< DigestT, ClockT >::flush ( )

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

References folly::detail::BufferedStat< DigestT, ClockT >::doUpdate(), g(), folly::detail::BufferedStat< DigestT, ClockT >::mutex_, now(), and folly::detail::BufferedStat< DigestT, ClockT >::Now.

Referenced by folly::detail::BufferedStat< folly::TDigest, ClockT >::~BufferedStat().

67  {
68  std::unique_lock<SharedMutex> g(mutex_);
70 }
std::chrono::steady_clock::time_point now()
void doUpdate(TimePoint now, const std::unique_lock< SharedMutex > &g, UpdateMode updateMode)
g_t g(f_t)
template<typename DigestT, typename ClockT>
virtual void folly::detail::BufferedStat< DigestT, ClockT >::onNewDigest ( DigestT  digest,
TimePoint  newExpiry,
TimePoint  oldExpiry,
const std::unique_lock< SharedMutex > &  g 
)
protectedpure virtual
template<typename DigestT , typename ClockT >
BufferedStat< DigestT, ClockT >::TimePoint folly::detail::BufferedStat< DigestT, ClockT >::roundUp ( TimePoint  t)
private

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

References folly::detail::BufferedStat< DigestT, ClockT >::bufferDuration_, and folly::pushmi::detail::t.

Referenced by folly::detail::BufferedStat< DigestT, ClockT >::BufferedStat(), and folly::detail::BufferedStat< DigestT, ClockT >::doUpdate().

50  {
51  auto remainder = t.time_since_epoch() % bufferDuration_;
52  if (remainder.count() != 0) {
53  return t + bufferDuration_ - remainder;
54  }
55  return t;
56 }
const ClockT::duration bufferDuration_
Definition: BufferedStat.h:61
template<typename DigestT, typename ClockT>
std::unique_lock<SharedMutex> folly::detail::BufferedStat< DigestT, ClockT >::update ( )
protected
template<typename DigestT , typename ClockT >
std::unique_lock< SharedMutex > folly::detail::BufferedStat< DigestT, ClockT >::updateIfExpired ( TimePoint  now)
protected

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

References folly::detail::BufferedStat< DigestT, ClockT >::doUpdate(), g(), folly::detail::BufferedStat< DigestT, ClockT >::mutex_, and folly::detail::BufferedStat< DigestT, ClockT >::OnExpiry.

Referenced by folly::detail::BufferedDigest< DigestT, ClockT >::get(), and folly::detail::BufferedSlidingWindow< DigestT, ClockT >::get().

60  {
61  std::unique_lock<SharedMutex> g(mutex_);
63  return g;
64 }
std::chrono::steady_clock::time_point now()
void doUpdate(TimePoint now, const std::unique_lock< SharedMutex > &g, UpdateMode updateMode)
g_t g(f_t)

Member Data Documentation

template<typename DigestT, typename ClockT>
const ClockT::duration folly::detail::BufferedStat< DigestT, ClockT >::bufferDuration_
protected
template<typename DigestT, typename ClockT>
DigestBuilder<DigestT> folly::detail::BufferedStat< DigestT, ClockT >::digestBuilder_
private

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