00001 /* 00002 File: Timer.h 00003 00004 Function: Provides routines for timing under several different 00005 architectures. You must define one of the following: 00006 00007 UNIX_TIME Use the time() and times() calls 00008 ANSI_TIME Use the ansi clock() routine 00009 SGI_TIME Use the SGI multimedia timing 00010 routines (nano-second accuracy.) 00011 RUSAGE_TIME Use getrusage() system call 00012 00013 Author(s): Andrew Willmott 00014 00015 Copyright: (c) 1995-2000, Andrew Willmott 00016 */ 00017 00018 #ifndef __Timer__ 00019 #define __Timer__ 00020 00021 #include "cl/Basics.h" 00022 00023 // Account for the morons who coded X11 00024 #ifdef CurrentTime 00025 #undef CurrentTime 00026 #endif 00027 00028 class Timer 00029 // all times in seconds. 00030 { 00031 public: 00032 Timer() : startTime(0.0), stopTime(0.0), lapTime(0.0) 00033 {}; 00034 00035 Void StartTimer(); // Starts timer 00036 Void StopTimer(); // Stops timer 00037 Void ContTimer(); // Continue timer 00038 Float GetTimer(); // Returns time since timer was started 00039 00040 Float DeltaTime(); // returns time delta since DeltaTime 00041 // or StartTimer was last called 00042 00043 virtual Float CurrentTime() = 0; 00044 00045 protected: 00046 Float startTime; 00047 Float stopTime; 00048 Float lapTime; 00049 }; 00050 00051 class ProgramTimer : public Timer 00052 // measures elapsed program time. 00053 { 00054 public: 00055 ProgramTimer() : Timer(), addSystem(false) 00056 {}; 00057 00058 Float CurrentTime(); 00059 00060 Bool addSystem; 00061 }; 00062 00063 class WallClockTimer : public Timer 00064 // measures wall clock time. 00065 { 00066 public: 00067 Float CurrentTime(); 00068 }; 00069 00070 #endif