aboutsummaryrefslogtreecommitdiff
path: root/src/internal/sysinfo/sysinfo.go
diff options
context:
space:
mode:
authorMartin Möhrmann <moehrmann@google.com>2020-10-20 09:56:14 +0200
committerMartin Möhrmann <moehrmann@google.com>2020-10-20 21:30:18 +0000
commitb7a2d413a3f710f14accedf185c93bfb63d24fd0 (patch)
tree0b742d64de218eae529e71a0c7bbe56119b6bbdc /src/internal/sysinfo/sysinfo.go
parent80182d45b5d2ff86da7b6587a2a09d8924dd0a95 (diff)
downloadgo-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.go31
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
+}