mirror of
https://github.com/status-im/nim-chronos.git
synced 2025-02-13 11:46:24 +00:00
Fix clock_gettime() is not available on old MacOS.
This commit is contained in:
parent
7029f8bc1e
commit
a039011f5b
@ -1,5 +1,5 @@
|
|||||||
packageName = "chronos"
|
packageName = "chronos"
|
||||||
version = "2.2.9"
|
version = "2.3.0"
|
||||||
author = "Status Research & Development GmbH"
|
author = "Status Research & Development GmbH"
|
||||||
description = "Chronos"
|
description = "Chronos"
|
||||||
license = "Apache License 2.0 or MIT"
|
license = "Apache License 2.0 or MIT"
|
||||||
|
@ -101,22 +101,36 @@ elif defined(macosx):
|
|||||||
result = (cast[uint64](t.tv_sec) * 1_000_000_000 +
|
result = (cast[uint64](t.tv_sec) * 1_000_000_000 +
|
||||||
cast[uint64](t.tv_usec) * 1_000)
|
cast[uint64](t.tv_usec) * 1_000)
|
||||||
else:
|
else:
|
||||||
from posix import clock_gettime, Timespec, CLOCK_MONOTONIC
|
type
|
||||||
|
MachTimebaseInfo {.importc: "struct mach_timebase_info",
|
||||||
|
header: "<mach/mach_time.h>", pure, final.} = object
|
||||||
|
numer: uint32
|
||||||
|
denom: uint32
|
||||||
|
|
||||||
|
proc mach_timebase_info(info: var MachTimebaseInfo) {.importc,
|
||||||
|
header: "<mach/mach_time.h>".}
|
||||||
|
proc mach_absolute_time(): uint64 {.importc, header: "<mach/mach_time.h>".}
|
||||||
|
|
||||||
|
var queryFrequencyN: uint64
|
||||||
|
var queryFrequencyD: uint64
|
||||||
|
|
||||||
|
proc setupQueryFrequence() =
|
||||||
|
var info: MachTimebaseInfo
|
||||||
|
mach_timebase_info(info)
|
||||||
|
queryFrequencyN = info.numer
|
||||||
|
queryFrequencyD = info.denom
|
||||||
|
|
||||||
proc fastEpochTime*(): uint64 {.
|
proc fastEpochTime*(): uint64 {.
|
||||||
inline, deprecated: "Use Moment.now()".} =
|
inline, deprecated: "Use Moment.now()".} =
|
||||||
## Procedure's resolution is millisecond.
|
## Procedure's resolution is millisecond.
|
||||||
var t: Timespec
|
result = (mach_absolute_time() * queryFrequencyN) div queryFrequencyD
|
||||||
discard clock_gettime(CLOCK_MONOTONIC, t)
|
result = result div 1_000_000
|
||||||
result = ((cast[uint64](t.tv_sec) * 1_000) +
|
|
||||||
(cast[uint64](t.tv_nsec) div 1_000_000))
|
|
||||||
|
|
||||||
proc fastEpochTimeNano(): uint64 {.inline.} =
|
proc fastEpochTimeNano(): uint64 {.inline.} =
|
||||||
## Procedure's resolution is nanosecond.
|
## Procedure's resolution is nanosecond.
|
||||||
var t: Timespec
|
result = (mach_absolute_time() * queryFrequencyN) div queryFrequencyD
|
||||||
discard clock_gettime(CLOCK_MONOTONIC, t)
|
|
||||||
result = cast[uint64](t.tv_sec) * 1_000_000_000'u64 +
|
setupQueryFrequence()
|
||||||
cast[uint64](t.tv_nsec)
|
|
||||||
|
|
||||||
elif defined(posix):
|
elif defined(posix):
|
||||||
from posix import clock_gettime, Timespec, CLOCK_REALTIME, CLOCK_MONOTONIC
|
from posix import clock_gettime, Timespec, CLOCK_REALTIME, CLOCK_MONOTONIC
|
||||||
|
Loading…
x
Reference in New Issue
Block a user