void tickIfNecessary()

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