var outn Nodes
outn.Set(out)
instrumentnode(&ls[i], &outn, 0, 0)
- if ls[i].Op != OAS || ls[i].Ninit.Len() == 0 {
+ if ls[i].Op != OAS && ls[i].Op != OASWB && ls[i].Op != OAS2FUNC || ls[i].Ninit.Len() == 0 {
out = append(outn.Slice(), ls[i])
} else {
// Splice outn onto end of ls[i].Ninit
--- /dev/null
+// errorcheck -0 -race
+
+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
+}