MCPcopy Create free account
hub / github.com/WinVector/Logistic / Ticker

Class Ticker

src/com/winvector/util/Ticker.java:7–47  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5
6
7public final class Ticker {
8 private final Log log = LogFactory.getLog(Ticker.class);
9 private final String logString;
10 private final long checkIntervalMillis = 200L;
11 private final long reportIntervalMillis = 60000L;
12 private long startTimeMillis;
13 private long nTicks;
14 private long nextCheckTick;
15 private long nextReportTimeMillis;
16
17 public Ticker(String logString) {
18 this.logString = logString;
19 start();
20 }
21
22 public void start() {
23 startTimeMillis = System.currentTimeMillis();
24 nTicks = 0;
25 nextCheckTick = 0;
26 nextReportTimeMillis = startTimeMillis - (startTimeMillis%reportIntervalMillis) + reportIntervalMillis;
27 if(nextReportTimeMillis-startTimeMillis<reportIntervalMillis/2) {
28 nextReportTimeMillis += reportIntervalMillis;
29 }
30 }
31
32 public void tick() {
33 ++nTicks;
34 if(nTicks>=nextCheckTick) {
35 final long nowMillis = System.currentTimeMillis();
36 final double ticksPerMilli = nTicks/(double)Math.max(1L,nowMillis-startTimeMillis);
37 final long ticksUntilCheck = Math.max(1L,(long)Math.ceil(checkIntervalMillis*ticksPerMilli));
38 nextCheckTick = nTicks + ticksUntilCheck;
39 if(nowMillis>=nextReportTimeMillis) {
40 // report
41 log.info(logString + " tick: " + nTicks + ", " + ticksPerMilli + " ticks/milli");
42 // set next report time
43 nextReportTimeMillis += reportIntervalMillis*(1+(nowMillis-nextReportTimeMillis)/reportIntervalMillis);
44 }
45 }
46 }
47}

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected