mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Add varying levels of precision to TimeTaker
This commit is contained in:
parent
5e7e0347cd
commit
df49b93877
5 changed files with 108 additions and 17 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue