From 6606a474bf8a634e6ee5a525f338c06a40590712 Mon Sep 17 00:00:00 2001 From: Stiver Date: Mon, 21 Jul 2014 14:28:40 +0200 Subject: Fixed 'IDEA-127466: dup_x1 semantics broken' --- timer/com/vladium/utils/timing/HRTimer.java | 86 +++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 timer/com/vladium/utils/timing/HRTimer.java (limited to 'timer/com/vladium/utils/timing/HRTimer.java') diff --git a/timer/com/vladium/utils/timing/HRTimer.java b/timer/com/vladium/utils/timing/HRTimer.java new file mode 100644 index 0000000..a3673a1 --- /dev/null +++ b/timer/com/vladium/utils/timing/HRTimer.java @@ -0,0 +1,86 @@ + +package com.vladium.utils.timing; + +// ---------------------------------------------------------------------------- +/** + * A package-private implementation of {@link ITimer} based around native + * getTime method. It will work on any platform for which a JNI + * implementation of "hrtlib" library is available.

+ * + * {@link TimerFactory} acts as the Factory for this class.

+ * + * MT-safety: an instance of this class is safe to be used within the same + * thread only. + * + * @author (C) Vlad Roubtsov, 2002 + */ +final class HRTimer implements ITimer, ITimerConstants +{ + // public: ................................................................ + + public void start () + { + if (DO_STATE_CHECKS) + { + if (m_state != STATE_READY) + throw new IllegalStateException (this + ": start() must be called from READY state, current state is " + STATE_NAMES [m_state]); + } + + if (DO_STATE_CHECKS) m_state = STATE_STARTED; + m_data = getTime (); + } + + public void stop () + { + // latch stop time in a local var before doing anything else: + final double data = getTime (); + + if (DO_STATE_CHECKS) + { + if (m_state != STATE_STARTED) + throw new IllegalStateException (this + ": stop() must be called from STARTED state, current state is " + STATE_NAMES [m_state]); + } + + m_data = data - m_data; + if (DO_STATE_CHECKS) m_state = STATE_STOPPED; + } + + public double getDuration () + { + if (DO_STATE_CHECKS) + { + if (m_state != STATE_STOPPED) + throw new IllegalStateException (this + ": getDuration() must be called from STOPPED state, current state is " + STATE_NAMES [m_state]); + } + + return m_data; + } + + public void reset () + { + if (DO_STATE_CHECKS) m_state = STATE_READY; + } + + // protected: ............................................................. + + // package: ............................................................... + + // private: ............................................................... + + /* + * This is supposed to return a fractional count of milliseconds elapsed + * since some indeterminate moment in the past. The exact starting point + * is not relevant because this timer class reports time differences only. + * + * JNI code in HRTIMER_LIB library is supposed to implement this. */ + private static native double getTime (); + + + private int m_state; // used to keep track of timer state + private double m_data; // timing data + + private static final String HRTIMER_LIB = "hrtlib"; + + +} // end of class +// ---------------------------------------------------------------------------- -- cgit v1.2.3