[*] Remove a syscall or two from startup / more accurate startup timings
This commit is contained in:
parent
207b8f6f46
commit
f40d59802a
@ -38,6 +38,7 @@
|
||||
#include "Memory/Cache.hpp"
|
||||
#include "Threading/Primitives/SMTYield.hpp"
|
||||
#include <mimalloc.h>
|
||||
#include "Process/AuProcessStartTime.hpp"
|
||||
#include "AuProcAddresses.hpp"
|
||||
|
||||
#if defined(AURORA_IS_LINUX_DERIVED)
|
||||
@ -72,8 +73,7 @@ static void Init()
|
||||
Crypto::InitCrypto();
|
||||
Aurora::IO::TLS::TLSInit();
|
||||
|
||||
(void)AuProcess::GetProcessStartupTimeMS();
|
||||
(void)AuProcess::GetProcessStartupSteadyTimeNS();
|
||||
AuProcess::WarmStartupCaches();
|
||||
|
||||
Aurora::Threading::InitSleep();
|
||||
Aurora::Process::InitProcess();
|
||||
|
@ -11,26 +11,37 @@
|
||||
|
||||
namespace Aurora::Process
|
||||
{
|
||||
AUKN_SYM AuUInt64 GetProcessStartupTimeNS()
|
||||
static AuOptional<AuUInt64> gOptKnownStartupWallTime;
|
||||
static AuOptional<AuUInt64> gOptKnownStartupSteadyTime;
|
||||
|
||||
void WarmStartupCaches()
|
||||
{
|
||||
static AuOptional<AuUInt64> optKnownWallTime;
|
||||
|
||||
if (optKnownWallTime.has_value())
|
||||
{
|
||||
return optKnownWallTime.value();
|
||||
}
|
||||
|
||||
#if defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
FILETIME creation, exit, kernel, user;
|
||||
if (::GetProcessTimes(GetCurrentProcess(), &creation, &exit, &kernel, &user))
|
||||
{
|
||||
optKnownWallTime = AuTime::ConvertTimestampNs(creation);
|
||||
auto u64 = AuTime::ConvertTimestampNs(creation);
|
||||
gOptKnownStartupWallTime = u64;
|
||||
u64 += AuTime::SteadyClockNS() - AuTime::CurrentClockNS();
|
||||
gOptKnownStartupSteadyTime = u64;
|
||||
}
|
||||
#else
|
||||
optKnownWallTime = AuTime::CurrentClockNS() - AuTime::ThreadClockNS();
|
||||
auto u64 = AuTime::ThreadClockNS();
|
||||
gOptKnownStartupWallTime = AuTime::CurrentClockNS() - u64;
|
||||
gOptKnownStartupSteadyTime = AuTime::SteadyClockNS() - u64;
|
||||
#endif
|
||||
}
|
||||
|
||||
return optKnownWallTime.value();
|
||||
AUKN_SYM AuUInt64 GetProcessStartupTimeNS()
|
||||
{
|
||||
if (gOptKnownStartupWallTime.has_value())
|
||||
{
|
||||
return gOptKnownStartupWallTime.value();
|
||||
}
|
||||
|
||||
WarmStartupCaches();
|
||||
|
||||
return gOptKnownStartupWallTime.value();
|
||||
}
|
||||
|
||||
AUKN_SYM AuUInt64 GetProcessStartupTimeMS()
|
||||
@ -40,25 +51,13 @@ namespace Aurora::Process
|
||||
|
||||
AUKN_SYM AuUInt64 GetProcessStartupSteadyTimeNS()
|
||||
{
|
||||
static AuOptional<AuUInt64> optKnownTime;
|
||||
|
||||
if (optKnownTime.has_value())
|
||||
if (gOptKnownStartupSteadyTime.has_value())
|
||||
{
|
||||
return optKnownTime.value();
|
||||
return gOptKnownStartupSteadyTime.value();
|
||||
}
|
||||
|
||||
#if defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
FILETIME creation, exit, kernel, user;
|
||||
if (::GetProcessTimes(GetCurrentProcess(), &creation, &exit, &kernel, &user))
|
||||
{
|
||||
auto u64 = AuTime::ConvertTimestampNs(creation);
|
||||
u64 += AuTime::SteadyClockNS() - AuTime::CurrentClockNS();
|
||||
optKnownTime = u64;
|
||||
}
|
||||
#else
|
||||
optKnownTime = AuTime::SteadyClockNS() - AuTime::ThreadClockNS();
|
||||
#endif
|
||||
WarmStartupCaches();
|
||||
|
||||
return optKnownTime.value();
|
||||
return gOptKnownStartupSteadyTime.value();
|
||||
}
|
||||
}
|
@ -9,5 +9,5 @@
|
||||
|
||||
namespace Aurora::Process
|
||||
{
|
||||
|
||||
void WarmStartupCaches();
|
||||
}
|
Loading…
Reference in New Issue
Block a user