/** Get the value for the last completed interval as a rate per second. */ @Override public double pollAsRate() { final double amount = poll(); final double period = step / 1000.0; return amount / period; }
@Override public double actualCount() { return value.poll(); } }
/** Get the value for the last completed interval as a rate per second. */ @Override public double pollAsRate() { final double amount = poll(); final double period = step / 1000.0; return amount / period; }
@Override public double value() { return value.poll(); } }
@Override public Iterable<Measurement> measure() { // poll needs to be called before accessing the timestamp to ensure // the counters have been rotated if there was no activity in the // current interval. double v = value.poll(); final Measurement m = new Measurement(stat, value.timestamp(), v); return Collections.singletonList(m); }
@Test public void empty() { StepDouble v = new StepDouble(0.0, clock, 10L); Assertions.assertEquals(0.0, v.getCurrent().get(), 1e-12); Assertions.assertEquals(0.0, v.poll(), 1e-12); }
@Test public void increment() { StepDouble v = new StepDouble(0.0, clock, 10L); v.getCurrent().addAndGet(1.0); Assertions.assertEquals(1.0, v.getCurrent().get(), 1e-12); Assertions.assertEquals(0.0, v.poll(), 1e-12); }
@Test public void missedRead() { StepDouble v = new StepDouble(0.0, clock, 10L); v.getCurrent().addAndGet(1.0); clock.setWallTime(20L); Assertions.assertEquals(0.0, v.getCurrent().get(), 1e-12); Assertions.assertEquals(0.0, v.poll(), 1e-12); } }
@Test public void incrementAndCrossStepBoundary() { StepDouble v = new StepDouble(0.0, clock, 10L); v.getCurrent().addAndGet(1.0); clock.setWallTime(10L); Assertions.assertEquals(0.0, v.getCurrent().get(), 1e-12); Assertions.assertEquals(1.0, v.poll(), 1e-12); }