4 #include "util/uring/sliding_counter.h" 6 #include "base/logging.h" 7 #include "base/walltime.h" 15 uint32_t SlidingCounterTLBase::MoveTsIfNeeded(
size_t size, int32_t* dest)
const {
16 uint32_t current_sec = base::GetClockMicros<CLOCK_MONOTONIC_COARSE>() / 1000000UL;
17 if (last_ts_ + size <= current_sec) {
18 std::fill(dest, dest + size, 0);
21 for (uint32_t i = last_ts_ + 1; i <= current_sec; ++i) {
25 last_ts_ = current_sec;
27 return current_sec % size;
30 void SlidingCounterBase::InitInternal(ProactorPool* pp) {
31 CHECK(pp_ ==
nullptr);
32 pp_ = CHECK_NOTNULL(pp);
35 void SlidingCounterBase::CheckInit()
const {
39 unsigned SlidingCounterBase::ProactorThreadIndex()
const {
40 unsigned tnum = CHECK_NOTNULL(pp_)->size();
42 int32_t indx = Proactor::GetIndex();
43 CHECK_GE(indx, 0) <<
"Must be called from proactor thread!";
44 CHECK_LT(indx, tnum) <<
"Invalid thread index " << indx;
46 return unsigned(indx);