in concurrency-loadbalancer-m3/src/main/java/com/uber/concurrency/loadbalancer/TallyMetricsTaskListener.java [162:178]
void tickIfNecessary() {
long oldTick = this.lastTick.get();
long newTick = ticker.read();
long age = newTick - oldTick;
if (age > TICK_INTERVAL_NANOS) {
long newIntervalStartTick = newTick - age % TICK_INTERVAL_NANOS;
if (this.lastTick.compareAndSet(oldTick, newIntervalStartTick)) {
long requiredTicks = age / TICK_INTERVAL_NANOS;
for(long i = 0L; i < requiredTicks; ++i) {
this.m1Rate.tick();
this.m5Rate.tick();
this.m15Rate.tick();
}
}
}
}