summaryrefslogtreecommitdiffstats
path: root/debian/fireflies/fireflies-2.08/libgfx/src/time.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'debian/fireflies/fireflies-2.08/libgfx/src/time.cxx')
-rw-r--r--debian/fireflies/fireflies-2.08/libgfx/src/time.cxx86
1 files changed, 86 insertions, 0 deletions
diff --git a/debian/fireflies/fireflies-2.08/libgfx/src/time.cxx b/debian/fireflies/fireflies-2.08/libgfx/src/time.cxx
new file mode 100644
index 00000000..cbbea1c5
--- /dev/null
+++ b/debian/fireflies/fireflies-2.08/libgfx/src/time.cxx
@@ -0,0 +1,86 @@
+/************************************************************************
+
+ Routines for measuring time.
+
+ $Id: time.cxx 427 2004-09-27 04:45:31Z garland $
+
+ ************************************************************************/
+
+#include <gfx/gfx.h>
+
+#if defined(WIN32)
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+namespace gfx
+{
+// Only Windows NT supports getting proper time usage information.
+// In Windows 95, we have to settle for measuring real time.
+double get_cpu_time()
+{
+ FILETIME start, end, kernel, user;
+
+ if( !GetThreadTimes(GetCurrentThread(), &start, &end, &kernel, &user) )
+ {
+ // We're running under Windows 95 instead of NT.
+ // Just get the current time and be done with it.
+ SYSTEMTIME now;
+ GetSystemTime(&now);
+ SystemTimeToFileTime(&now, &user);
+ }
+
+ // Convert into something we can do math on
+ LARGE_INTEGER i;
+ i.LowPart = user.dwLowDateTime;
+ i.HighPart = user.dwHighDateTime;
+
+#ifdef __GNUC__
+
+ // The Win32 headers shipped with GCC don't define the QuadPart
+ // accessor for the LARGE_INTEGER type. So we have to build it
+ // directly.
+ long long quad = i.HighPart;
+ quad = (quad << 32) + i.LowPart;
+ return (double)quad / 1e7;
+#else
+ // Convert to seconds and return
+ return (double)(i.QuadPart) / 1e7;
+#endif
+}
+}
+
+#elif defined(HAVE_GETRUSAGE)
+#include <sys/time.h>
+#include <sys/resource.h>
+
+namespace gfx
+{
+double get_cpu_time()
+{
+ struct rusage t;
+
+ getrusage(RUSAGE_SELF, &t);
+
+ return (double)t.ru_utime.tv_sec + (double)t.ru_utime.tv_usec/1000000;
+}
+}
+
+#elif defined(HAVE_TIMES)
+
+namespace gfx
+{
+double get_cpu_time()
+{
+ struct tms t;
+
+ times(&t);
+
+ return (double)(t.tms_utime) / (double)CLK_TCK;
+}
+}
+
+#else
+
+#error "No supported timing mechanism available."
+
+#endif