for (int periodMillis = 1; periodMillis <= 20; periodMillis++) {
final long startTime = System.nanoTime();
final int thisPeriodMillis = periodMillis;
final int iterations = 1000 / periodMillis;
timerIteration.set(1);
final TimingSource source = factory.getTimingSource(periodMillis);
final CountDownLatch testComplete = new CountDownLatch(1);
final AtomicBoolean outputResults = new AtomicBoolean(true);
source.addTickListener(new TickListener() {
@Override
public void timingSourceTick(TimingSource source, long nanoTime) {
if (timerIteration.incrementAndGet() > iterations) {
if (outputResults.get()) {
outputResults.set(false); // only output once
source.dispose(); // end timer
final long endTime = System.nanoTime();
final long totalTime = TimeUnit.NANOSECONDS.toMillis(endTime - startTime);
final float calculatedDelayTime = totalTime / (float) iterations;
f_to.out(String.format(" %2d ms %5d %5d ms %5.2f ms", thisPeriodMillis, iterations, totalTime, calculatedDelayTime));
testComplete.countDown();
}
}
}
});
source.init();
try {
testComplete.await();
} catch (InterruptedException e) {
// should not happen
e.printStackTrace();