Only use raw monotonic time on Linux and macOS

This commit is contained in:
Kovid Goyal
2024-04-09 08:21:20 +05:30
parent 6c64428be9
commit a444b5eccb
3 changed files with 36 additions and 15 deletions

View File

@@ -0,0 +1,18 @@
//go:build linux || darwin
package utils
import (
"time"
"golang.org/x/sys/unix"
)
func MonotonicRaw() (time.Time, error) {
ts := unix.Timespec{}
if err := unix.ClockGettime(unix.CLOCK_MONOTONIC_RAW, &ts); err != nil {
return time.Time{}, err
}
s, ns := ts.Unix()
return time.Unix(s, ns), nil
}

View File

@@ -0,0 +1,18 @@
//go:build !linux && !darwin
package utils
import (
"time"
"golang.org/x/sys/unix"
)
func MonotonicRaw() (time.Time, error) {
ts := unix.Timespec{}
if err := unix.ClockGettime(unix.CLOCK_MONOTONIC, &ts); err != nil {
return time.Time{}, err
}
s, ns := ts.Unix()
return time.Unix(s, ns), nil
}

View File

@@ -10,11 +10,9 @@ import (
"reflect"
"runtime"
"strconv"
"time"
"golang.org/x/exp/constraints"
"golang.org/x/exp/slices"
"golang.org/x/sys/unix"
)
var _ = fmt.Print
@@ -312,16 +310,3 @@ func FunctionName(a any) string {
}
return ""
}
func MonotonicRaw() (time.Time, error) {
ts := unix.Timespec{}
var clock_id int32 = unix.CLOCK_MONOTONIC
if runtime.GOOS == "linux" {
clock_id = unix.CLOCK_MONOTONIC_RAW
}
if err := unix.ClockGettime(clock_id, &ts); err != nil {
return time.Time{}, err
}
s, ns := ts.Unix()
return time.Unix(s, ns), nil
}