make monotimes have zero overhead if you don't use it (#13338) [backport]
This commit is contained in:
parent
7ec7731f82
commit
e24443f1bc
1 changed files with 6 additions and 10 deletions
|
|
@ -51,11 +51,6 @@ when defined(macosx):
|
||||||
proc mach_timebase_info(info: var MachTimebaseInfoData) {.importc,
|
proc mach_timebase_info(info: var MachTimebaseInfoData) {.importc,
|
||||||
header: "<mach/mach_time.h>".}
|
header: "<mach/mach_time.h>".}
|
||||||
|
|
||||||
let machAbsoluteTimeFreq = block:
|
|
||||||
var freq: MachTimebaseInfoData
|
|
||||||
mach_timebase_info(freq)
|
|
||||||
freq
|
|
||||||
|
|
||||||
when defined(js):
|
when defined(js):
|
||||||
proc getJsTicks: float =
|
proc getJsTicks: float =
|
||||||
## Returns ticks in the unit seconds
|
## Returns ticks in the unit seconds
|
||||||
|
|
@ -88,11 +83,6 @@ elif defined(windows):
|
||||||
proc QueryPerformanceFrequency(res: var uint64) {.
|
proc QueryPerformanceFrequency(res: var uint64) {.
|
||||||
importc: "QueryPerformanceFrequency", stdcall, dynlib: "kernel32".}
|
importc: "QueryPerformanceFrequency", stdcall, dynlib: "kernel32".}
|
||||||
|
|
||||||
let queryPerformanceCounterFreq = block:
|
|
||||||
var freq: uint64
|
|
||||||
QueryPerformanceFrequency(freq)
|
|
||||||
1_000_000_000'u64 div freq
|
|
||||||
|
|
||||||
proc getMonoTime*(): MonoTime {.tags: [TimeEffect].} =
|
proc getMonoTime*(): MonoTime {.tags: [TimeEffect].} =
|
||||||
## Get the current `MonoTime` timestamp.
|
## Get the current `MonoTime` timestamp.
|
||||||
##
|
##
|
||||||
|
|
@ -105,6 +95,8 @@ proc getMonoTime*(): MonoTime {.tags: [TimeEffect].} =
|
||||||
result = MonoTime(ticks: (ticks * 1_000_000_000).int64)
|
result = MonoTime(ticks: (ticks * 1_000_000_000).int64)
|
||||||
elif defined(macosx):
|
elif defined(macosx):
|
||||||
let ticks = mach_absolute_time()
|
let ticks = mach_absolute_time()
|
||||||
|
var machAbsoluteTimeFreq: MachTimebaseInfoData
|
||||||
|
mach_timebase_info(machAbsoluteTimeFreq)
|
||||||
result = MonoTime(ticks: ticks * machAbsoluteTimeFreq.numer div
|
result = MonoTime(ticks: ticks * machAbsoluteTimeFreq.numer div
|
||||||
machAbsoluteTimeFreq.denom)
|
machAbsoluteTimeFreq.denom)
|
||||||
elif defined(posix):
|
elif defined(posix):
|
||||||
|
|
@ -115,6 +107,10 @@ proc getMonoTime*(): MonoTime {.tags: [TimeEffect].} =
|
||||||
elif defined(windows):
|
elif defined(windows):
|
||||||
var ticks: uint64
|
var ticks: uint64
|
||||||
QueryPerformanceCounter(ticks)
|
QueryPerformanceCounter(ticks)
|
||||||
|
|
||||||
|
var freq: uint64
|
||||||
|
QueryPerformanceFrequency(freq)
|
||||||
|
let queryPerformanceCounterFreq = 1_000_000_000'u64 div freq
|
||||||
result = MonoTime(ticks: (ticks * queryPerformanceCounterFreq).int64)
|
result = MonoTime(ticks: (ticks * queryPerformanceCounterFreq).int64)
|
||||||
|
|
||||||
proc ticks*(t: MonoTime): int64 =
|
proc ticks*(t: MonoTime): int64 =
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue