| // errorcheck -0 -race | |
| //go:build (linux && amd64) || (linux && ppc64le) || (darwin && amd64) || (freebsd && amd64) || (netbsd && amd64) || (windows && amd64) | |
| // Copyright 2016 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 foo | |
| const benchmarkNumNodes = 10000 | |
| func BenchmarkUpdateNodeTransaction(b B) { | |
| s, nodeIDs := setupNodes(benchmarkNumNodes) | |
| b.ResetTimer() | |
| for i := 0; i < b.N(); i++ { | |
| _ = s.Update(func(tx1 Tx) error { | |
| _ = UpdateNode(tx1, &Node{ | |
| ID: nodeIDs[i%benchmarkNumNodes], | |
| }) | |
| return nil | |
| }) | |
| } | |
| } | |
| type B interface { | |
| ResetTimer() | |
| N() int | |
| } | |
| type Tx interface { | |
| } | |
| type Node struct { | |
| ID string | |
| } | |
| type MemoryStore struct { | |
| } | |
| //go:noinline | |
| func setupNodes(n int) (s *MemoryStore, nodeIDs []string) { | |
| return | |
| } | |
| //go:noinline | |
| func (s *MemoryStore) Update(cb func(Tx) error) error { | |
| return nil | |
| } | |
| var sink interface{} | |
| //go:noinline | |
| func UpdateNode(tx Tx, n *Node) error { | |
| sink = tx | |
| sink = n | |
| return nil | |
| } |