123456789101112131415161718192021222324252627282930313233343536 |
- // Copyright (C) 2016 Arista Networks, Inc.
- // Use of this source code is governed by the Apache License 2.0
- // that can be found in the COPYING file.
- // Package monotime provides functions to access monotonic clock source.
- package monotime
- import (
- "time"
- _ "unsafe" // required to use //go:linkname
- )
- //go:noescape
- //go:linkname nanotime runtime.nanotime
- func nanotime() int64
- // Now returns the current time in nanoseconds from a monotonic clock.
- //
- // The time returned is based on some arbitrary platform-specific point in the
- // past. The time returned is guaranteed to increase monotonically without
- // notable jumps, unlike time.Now() from the Go standard library, which may
- // jump forward or backward significantly due to system time changes or leap
- // seconds.
- //
- // It's implemented using runtime.nanotime(), which uses CLOCK_MONOTONIC on
- // Linux. Note that unlike CLOCK_MONOTONIC_RAW, CLOCK_MONOTONIC is affected
- // by time changes. However, time changes never cause clock jumps; instead,
- // clock frequency is adjusted slowly.
- func Now() time.Duration {
- return time.Duration(nanotime())
- }
- // Since returns the time elapsed since t, obtained previously using Now.
- func Since(t time.Duration) time.Duration {
- return Now() - t
- }
|