// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved. // Released under the terms of the CPL Common Public License version 1.0. package fitnesse.util; import java.util.Date; public class TimeMeasurement { private final Clock clock; private Long startedAt; private Long stoppedAt; public TimeMeasurement() { this(Clock.instance); } public TimeMeasurement(Clock measuringClock) { this.clock = measuringClock; } public TimeMeasurement start() { this.startedAt = currentClockTimeInMillis(); this.stoppedAt = null; return this; } private long currentClockTimeInMillis() { return clock.currentClockTimeInMillis(); } public long startedAt() { if (isStarted()) { return startedAt; } throw new IllegalStateException("Call start() before getting startedAt()!"); } private boolean isStarted() { return startedAt != null; } public long elapsed() { if (isStopped()) { return stoppedAt() - startedAt(); } return currentClockTimeInMillis() - startedAt(); } public boolean isStopped() { return stoppedAt != null; } public TimeMeasurement stop() { if (!isStopped()) { stoppedAt = currentClockTimeInMillis(); } return this; } public long stoppedAt() { if (isStopped()) { return stoppedAt; } throw new IllegalStateException("Call stop() before getting stoppedAt()!"); } public Date startedAtDate() { return new Date(startedAt()); } public Date stoppedAtDate() { return new Date(stoppedAt()); } public double elapsedSeconds() { return elapsed() / 1000d; } }