/*
-Copyright (C) 1998, 1999, 2000, 2007 John Anderson
+ Copyright (C) 1998, 1999, 2000, 2007 John Anderson
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU Library General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ You should have received a copy of the GNU Library General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef timer_h
#include <sys/time.h>
#endif
+namespace ArdourSurface {
+
namespace Mackie
{
class Timer
{
public:
-
+
/**
start the timer running if true, or just create the
object if false.
if ( shouldStart )
start();
}
-
+
/**
Start the timer running. Return the current timestamp, in milliseconds
*/
unsigned long start()
{
-#ifdef _WIN32
- _start = (unsigned long)::GetTickCount();
-#else
- gettimeofday ( &_start, 0 );
-#endif
- running = true;
-#ifdef _WIN32
- return _start;
-#else
- return ( _start.tv_sec * 1000000 + _start.tv_usec ) / 1000;
-#endif
+ _start = g_get_monotonic_time();
+ return _start / 1000;
}
/**
*/
unsigned long stop()
{
-#ifdef _WIN32
- _stop = (unsigned long)::GetTickCount();
-#else
- gettimeofday ( &_stop, 0 );
-#endif
- running = false;
+ _stop = g_get_monotonic_time();
return elapsed();
}
{
if ( running )
{
-#ifdef _WIN32
- DWORD current = ::GetTickCount();
- return current - _start;
-#else
- struct timeval current;
- gettimeofday ( ¤t, 0 );
- return (
- ( current.tv_sec * 1000000 + current.tv_usec ) - ( _start.tv_sec * 1000000 + _start.tv_usec )
- ) / 1000
- ;
-#endif
+ uint64_t now = g_get_monotonic_time();
+ return (now - _start) / 1000;
}
else
{
-#ifdef _WIN32
- return _stop - _start;
-#else
- return (
- ( _stop.tv_sec * 1000000 + _stop.tv_usec ) - ( _start.tv_sec * 1000000 + _start.tv_usec )
- ) / 1000
- ;
-#endif
+ return (_stop - _start) / 1000;
}
}
-
+
/**
Call stop and then start. Return the value from stop.
*/
}
private:
-#ifdef _WIN32
- unsigned long _start;
- unsigned long _stop;
-#else
- struct timeval _start;
- struct timeval _stop;
-#endif
+ uint64_t _start;
+ uint64_t _stop;
bool running;
};
-}
+} // Mackie namespace
+} // ArdourSurface namespace
#endif