From 1da79e35bfeb74fdbc005143eb9a810238f82732 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Wed, 28 Dec 2022 14:28:47 -0600 Subject: [PATCH] feat(time): add common time functions --- common/Time.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ common/Time.hpp | 12 +++++++++++ 2 files changed, 65 insertions(+) create mode 100644 common/Time.cpp create mode 100644 common/Time.hpp diff --git a/common/Time.cpp b/common/Time.cpp new file mode 100644 index 0000000..e31738d --- /dev/null +++ b/common/Time.cpp @@ -0,0 +1,53 @@ +#include "common/Time.hpp" + +#if defined(WHOA_SYSTEM_WIN) +#include +#elif defined(WHOA_SYSTEM_MAC) +#include +#include +#elif defined(WHOA_SYSTEM_LINUX) +#include +#include +#endif + +uint64_t OsGetAsyncTimeMs() { +#if defined(WHOA_SYSTEM_WIN) + return GetTickCount(); + +#elif defined(WHOA_SYSTEM_MAC) + static mach_timebase_info_data_t timebase; + + if (timebase.denom == 0) { + mach_timebase_info(&timebase); + } + + uint64_t ticks = mach_absolute_time(); + + return ticks * (timebase.numer / timebase.denom) / 1000000; + +#elif defined(WHOA_SYSTEM_LINUX) + auto now = std::chrono::steady_clock::now(); + uint64_t ticks = std::chrono::duration_cast(now.time_since_epoch()).count(); + return ticks; +#endif +} + +uint64_t OsGetAsyncTimeMsPrecise() { +#if defined(WHOA_SYSTEM_WIN) + // TODO QueryPerformanceCounter implementation + return OsGetAsyncTimeMs(); + +#else + return OsGetAsyncTimeMs(); +#endif +} + +void OsSleep(uint32_t duration) { +#if defined(WHOA_SYSTEM_WIN) + Sleep(duration); +#endif + +#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX) + usleep(duration); +#endif +} diff --git a/common/Time.hpp b/common/Time.hpp new file mode 100644 index 0000000..eadf02e --- /dev/null +++ b/common/Time.hpp @@ -0,0 +1,12 @@ +#ifndef COMMON_TIME_HPP +#define COMMON_TIME_HPP + +#include + +uint64_t OsGetAsyncTimeMs(); + +uint64_t OsGetAsyncTimeMsPrecise(); + +void OsSleep(uint32_t duration); + +#endif