diff options
Diffstat (limited to 'src/porting.h')
-rw-r--r-- | src/porting.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/porting.h b/src/porting.h index d7d107340..bcce96ef7 100644 --- a/src/porting.h +++ b/src/porting.h @@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes.h" // u32 #include "debug.h" #include "constants.h" +#include "gettime.h" #ifdef _MSC_VER #define SWPRINTF_CHARSTRING L"%S" @@ -153,18 +154,65 @@ bool threadSetPriority(threadid_t tid, int prio); */ #ifdef _WIN32 // Windows #include <windows.h> + + inline u32 getTimeS() + { + return GetTickCount() / 1000; + } + inline u32 getTimeMs() { return GetTickCount(); } + + inline u32 getTimeUs() + { + LARGE_INTEGER freq, t; + QueryPerformanceFrequency(&freq); + QueryPerformanceCounter(&t); + return (double)(t.QuadPart) / ((double)(freq.QuadPart) / 1000000.0); + } + + inline u32 getTimeNs() + { + LARGE_INTEGER freq, t; + QueryPerformanceFrequency(&freq); + QueryPerformanceCounter(&t); + return (double)(t.QuadPart) / ((double)(freq.QuadPart) / 1000000000.0); + } + #else // Posix #include <sys/time.h> + #include <time.h> + + inline u32 getTimeS() + { + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec; + } + inline u32 getTimeMs() { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec * 1000 + tv.tv_usec / 1000; } + + inline u32 getTimeUs() + { + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec * 1000000 + tv.tv_usec; + } + + inline u32 getTimeNs() + { + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + return ts.tv_sec * 1000000000 + ts.tv_nsec; + } + /*#include <sys/timeb.h> inline u32 getTimeMs() { @@ -174,6 +222,22 @@ bool threadSetPriority(threadid_t tid, int prio); }*/ #endif +inline u32 getTime(TimePrecision prec) +{ + switch (prec) { + case PRECISION_SECONDS: + return getTimeS(); + case PRECISION_MILLI: + return getTimeMs(); + case PRECISION_MICRO: + return getTimeUs(); + case PRECISION_NANO: + return getTimeNs(); + } + return 0; +} + + } // namespace porting #endif // PORTING_HEADER |