+++ /dev/null
-#ifndef STOPWATCH_CLASS
-#define STOPWATCH_CLASS
-
-/***
-*
-* Name : stopwatch
-* Author : Chris Koeritz
-*******************************************************************************
-* Copyright (c) 1991-$now By Author. This program is free software; you can *
-* redistribute it and/or modify it under the terms of the GNU General Public *
-* License as published by the Free Software Foundation; either version 2 of *
-* the License or (at your option) any later version. This is online at: *
-* http://www.fsf.org/copyleft/gpl.html *
-* Please send any updates to: fred@gruntose.com *
-\*****************************************************************************/
-
-#include "time_stamp.h"
-
-namespace timely {
-
-//! A class for measuring event durations in real time.
-/*!
- Once the stopwatch is constructed, it can then be repeatedly started and
- halted, and then started again. The number of milliseconds or
- microseconds elapsed can be requested while the stopwatch is running, but
- that can disrupt fine-grained measurements.
-*/
-
-class stopwatch : public virtual basis::root_object
-{
-public:
- stopwatch();
- stopwatch(const stopwatch &to_copy);
-
- virtual ~stopwatch();
-
- stopwatch &operator =(const stopwatch &to_copy);
-
- void start();
- //!< Begins the timing.
- /*!< If the stopwatch is already timing, then "start" does nothing. */
-
- void halt();
- //!< Stops the timing.
- /*!< start() may be called again to resume timing after the halt. If the
- stopwatch is already stopped, or never was started, then halt does nothing. */
- void stop() { halt(); }
- //!< a synonym for halt().
-
- void reset();
- //!< Stops the stopwatch and clears it to zero time elapsed.
-
- int milliseconds();
- //!< Returns the elapsed number of milliseconds on the stopwatch, overall.
- int elapsed() { return milliseconds(); }
- //!< a synonym for milliseconds().
-
-private:
- enum stopwatch_kinds { UNSTARTED, RUNNING, STOPPED }; //!< states for the stopwatch.
- stopwatch_kinds _status; //!< our current state.
- time_stamp *_start_time; //!< last time we got started.
- time_stamp *_stop_time; //!< last time we got stopped.
- int _total_so_far; //!< total amount of time run for so far.
-
- int common_measure();
- //!< returns the current time used to this point, in milliseconds.
-
- int compute_diff(const time_stamp &t1, const time_stamp &t2);
- //!< the difference in milliseconds between the times "t1" and "t2".
-};
-
-//////////////
-
-//! Logs a warning when an operation takes longer than expected.
-/*!
- Place TIME_CHECK_BEGIN before the code that you want to check, then place
- TIME_CHECK_END afterwards. The two calls must be in the same scope.
- "logger" should be a reference to a log_base object. [ by Brit Minor ]
-*/
-#define TIME_CHECK_BEGIN \
- stopwatch t; \
- t.start();
-#define TIME_CHECK_END(logger, who, msec_limit, what, filter) { \
- t.halt(); \
- if (t.milliseconds() > msec_limit) { \
- (logger).log( a_sprintf("TIME_CHECK: %s: %d ms wait for %s.", \
- (who), t.milliseconds(), (what)), filter); \
- } \
-}
-
-} //namespace.
-
-#endif
-