package com.mopub.common.util; import java.util.concurrent.TimeUnit; public class Timer { private static enum State { STARTED, STOPPED } private long mStopTimeNanos; private long mStartTimeNanos; private State mState; public Timer() { mState = State.STOPPED; } public void start() { // System.nanoTime isn't affected by changing the system time mStartTimeNanos = System.nanoTime(); mState = State.STARTED; } public void stop() { if (mState != State.STARTED) { throw new IllegalStateException("EventTimer was not started."); } mState = State.STOPPED; mStopTimeNanos = System.nanoTime(); } public long getTime() { long endTime; if (mState == State.STARTED) { endTime = System.nanoTime(); } else { endTime = mStopTimeNanos; } return TimeUnit.MILLISECONDS.convert(endTime - mStartTimeNanos, TimeUnit.NANOSECONDS); } }