diff options
| author | Martin Möhrmann <moehrmann@google.com> | 2020-10-20 09:56:14 +0200 |
|---|---|---|
| committer | Martin Möhrmann <moehrmann@google.com> | 2020-10-20 21:30:18 +0000 |
| commit | b7a2d413a3f710f14accedf185c93bfb63d24fd0 (patch) | |
| tree | 0b742d64de218eae529e71a0c7bbe56119b6bbdc /src/internal/sysinfo/sysinfo.go | |
| parent | 80182d45b5d2ff86da7b6587a2a09d8924dd0a95 (diff) | |
| download | go-b7a2d413a3f710f14accedf185c93bfb63d24fd0.tar.xz | |
testing: print cpu type as label for benchmarks
Supports 386 and amd64 architectures on all operating systems.
Example output:
$ go test -bench=.*
goos: darwin
goarch: amd64
pkg: strconv
cpu: Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
BenchmarkAtof64Decimal-4 24431032 46.8 ns/op
...
As the displayed CPU information is only used for information
purposes it is lazily initialized when needed using the new
internal/sysinfo package.
This allows internal/cpu to stay without dependencies and avoid
initialization costs when the CPU information is not needed as
the new code to query the CPU name in internal/cpu can be
dead code eliminated if not used.
Fixes #39214
Change-Id: I77ae5c5d2fed6b28fa78dd45075f9f0a6a7f1bfd
Reviewed-on: https://go-review.googlesource.com/c/go/+/263804
Trust: Martin Möhrmann <moehrmann@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/internal/sysinfo/sysinfo.go')
| -rw-r--r-- | src/internal/sysinfo/sysinfo.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/internal/sysinfo/sysinfo.go b/src/internal/sysinfo/sysinfo.go new file mode 100644 index 0000000000..961be7abae --- /dev/null +++ b/src/internal/sysinfo/sysinfo.go @@ -0,0 +1,31 @@ +// Copyright 2020 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. + +// Package sysinfo implements high level hardware information gathering +// that can be used for debugging or information purposes. +package sysinfo + +import ( + internalcpu "internal/cpu" + "sync" +) + +type cpuInfo struct { + once sync.Once + name string +} + +var CPU cpuInfo + +func (cpu *cpuInfo) Name() string { + cpu.once.Do(func() { + // Try to get the information from internal/cpu. + if name := internalcpu.Name(); name != "" { + cpu.name = name + return + } + // TODO(martisch): use /proc/cpuinfo and /sys/devices/system/cpu/ on Linux as fallback. + }) + return cpu.name +} |
