From 6c64428be9e6ff965b0b5a4c0938e2b56664c7b9 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 9 Apr 2024 08:04:15 +0530 Subject: [PATCH] CLOCK_MONOTONIC_RAW support for Go --- tools/utils/misc.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/utils/misc.go b/tools/utils/misc.go index 60c75935c..579efe397 100644 --- a/tools/utils/misc.go +++ b/tools/utils/misc.go @@ -10,9 +10,11 @@ import ( "reflect" "runtime" "strconv" + "time" "golang.org/x/exp/constraints" "golang.org/x/exp/slices" + "golang.org/x/sys/unix" ) var _ = fmt.Print @@ -310,3 +312,16 @@ 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 +}