2023-03-21 10:05:45 +00:00
|
|
|
/***
|
|
|
|
Copyright (C) 2023 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
|
|
|
|
|
|
|
File: AuClocks.cpp
|
|
|
|
Date: 2023-3-21
|
|
|
|
Author: Reece
|
|
|
|
***/
|
|
|
|
#include <RuntimeInternal.hpp>
|
|
|
|
#include "AuClocks.hpp"
|
|
|
|
|
|
|
|
namespace Aurora::Time
|
|
|
|
{
|
|
|
|
#define ADD_CLOCK(name, enum, jiffies, getNs, getMs) \
|
|
|
|
struct name ## Clock_t : IClock \
|
|
|
|
{ \
|
|
|
|
EClock GetType() override \
|
|
|
|
{ \
|
|
|
|
return EClock::enum; \
|
|
|
|
} \
|
|
|
|
\
|
|
|
|
AuUInt64 GetHertz() override \
|
|
|
|
{ \
|
|
|
|
return jiffies(); \
|
|
|
|
} \
|
|
|
|
\
|
|
|
|
AuUInt64 NowNS() override \
|
|
|
|
{ \
|
|
|
|
return getNs(); \
|
|
|
|
} \
|
|
|
|
\
|
|
|
|
AuUInt64 NowMS() override \
|
|
|
|
{ \
|
|
|
|
return getMs(); \
|
|
|
|
} \
|
|
|
|
}; \
|
|
|
|
\
|
|
|
|
static name ## Clock_t gClock## name ## Instance; \
|
|
|
|
\
|
|
|
|
AUKN_SYM AuSPtr<IClock> Get ## name ## Clock() \
|
|
|
|
{ \
|
|
|
|
return AuUnsafeRaiiToShared(&gClock## name ## Instance); \
|
|
|
|
}
|
|
|
|
|
|
|
|
#define FILE_AND_USR_DIR_STEP (AuMSToNS<AuUInt64>(AuSToMS<AuUInt64>(1)) / 100ull)
|
|
|
|
|
|
|
|
ADD_CLOCK(Steady, eSteady, SteadyClockJiffies, SteadyClockNS, SteadyClockMS);
|
|
|
|
ADD_CLOCK(Wall, eWall, FILE_AND_USR_DIR_STEP + AuUInt64, CurrentClockNS, CurrentClockMS);
|
2023-03-22 16:59:21 +00:00
|
|
|
ADD_CLOCK(Process, eProcessTime, HighResClockJiffies, HighResClockNS, HighResClockMS);
|
2023-03-21 10:05:45 +00:00
|
|
|
|
|
|
|
#undef FILE_AND_USR_DIR_STEP
|
|
|
|
#undef ADD_CLOCK
|
|
|
|
|
|
|
|
AUKN_SYM AuSPtr<IClock> GetClockFromEnum(EClock clock)
|
|
|
|
{
|
|
|
|
switch (clock)
|
|
|
|
{
|
|
|
|
case EClock::eWall:
|
|
|
|
return GetWallClock();
|
|
|
|
case EClock::eProcessTime:
|
|
|
|
return GetProcessClock();
|
|
|
|
case EClock::eSteady:
|
|
|
|
return GetSteadyClock();
|
|
|
|
default:
|
|
|
|
SysPushErrorArg("Invalid clock");
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|