+++ /dev/null
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build linux
-// +build 386 amd64 arm arm64 ppc64 ppc64le
-
-package runtime_test
-
-import (
- "testing"
- "time"
- _ "unsafe"
-)
-
-// These tests are a little risky because they overwrite the vdsoClockgettimeSym value.
-// It's normally initialized at startup and remains unchanged after that.
-
-//go:linkname vdsoClockgettimeSym runtime.vdsoClockgettimeSym
-var vdsoClockgettimeSym uintptr
-
-func TestClockVDSOAndFallbackPaths(t *testing.T) {
- // Check that we can call walltime() and nanotime() with and without their (1st) fast-paths.
- // This just checks that fast and fallback paths can be called, rather than testing their
- // results.
- //
- // Call them indirectly via time.Now(), so we don't need auxiliary .s files to allow us to
- // use go:linkname to refer to the functions directly.
-
- save := vdsoClockgettimeSym
- if save == 0 {
- t.Log("vdsoClockgettime symbol not found; fallback path will be used by default")
- }
-
- // Call with fast-path enabled (if vDSO symbol found at startup)
- time.Now()
-
- // Call with fast-path disabled
- vdsoClockgettimeSym = 0
- time.Now()
- vdsoClockgettimeSym = save
-}
-
-func BenchmarkClockVDSOAndFallbackPaths(b *testing.B) {
- run := func(b *testing.B) {
- for i := 0; i < b.N; i++ {
- // Call via time.Now() - see comment in test above.
- time.Now()
- }
- }
-
- save := vdsoClockgettimeSym
- b.Run("vDSO", run)
- vdsoClockgettimeSym = 0
- b.Run("Fallback", run)
- vdsoClockgettimeSym = save
-}
-
-func BenchmarkTimeNow(b *testing.B) {
- for i := 0; i < b.N; i++ {
- time.Now()
- }
-}