/*
- * Copyright 2016 Facebook, Inc.
+ * Copyright 2015-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.
#include <chrono>
#include <folly/Likely.h>
-#include <folly/detail/CacheLocality.h>
+#include <folly/concurrency/CacheLocality.h>
namespace folly {
zeroTime_ = zeroTime;
}
+ /**
+ * Returns the current time in seconds since Epoch.
+ */
+ static double defaultClockNow() noexcept(noexcept(ClockT::timeSinceEpoch())) {
+ return std::chrono::duration_cast<std::chrono::duration<double>>(
+ ClockT::timeSinceEpoch())
+ .count();
+ }
+
/**
* Attempts to consume some number of tokens. Tokens are first added to the
* bucket based on the time elapsed since the last attempt to consume tokens.
return std::min((nowInSeconds - this->zeroTime_) * rate, burstSize);
}
- /**
- * Returns the current time in seconds since Epoch.
- */
- static double defaultClockNow() noexcept(noexcept(ClockT::timeSinceEpoch())) {
- return std::chrono::duration_cast<std::chrono::duration<double>>(
- ClockT::timeSinceEpoch())
- .count();
- }
-
private:
template <typename TCallback>
bool consumeImpl(
return true;
}
- FOLLY_ALIGN_TO_AVOID_FALSE_SHARING std::atomic<double> zeroTime_;
+ alignas(hardware_destructive_interference_size) std::atomic<double> zeroTime_;
};
/**
ParameterizedTokenBucket& operator=(
const ParameterizedTokenBucket& other) noexcept = default;
+ /**
+ * Returns the current time in seconds since Epoch.
+ */
+ static double defaultClockNow() noexcept(noexcept(Impl::defaultClockNow())) {
+ return Impl::defaultClockNow();
+ }
+
/**
* Change rate and burst size.
*
return burstSize_;
}
- /**
- * Returns the current time in seconds since Epoch.
- */
- static double defaultClockNow() noexcept(noexcept(Impl::defaultClockNow())) {
- return Impl::defaultClockNow();
- }
-
private:
Impl tokenBucket_;
double rate_;
using TokenBucket = ParameterizedTokenBucket<>;
using DynamicTokenBucket = ParameterizedDynamicTokenBucket<>;
-}
+} // namespace folly