| // errorcheck -0 -race |
| // +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 |
| } |