]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: add BenchmarkStackCopyWithStkobj
authorJosh Bleecher Snyder <josharian@gmail.com>
Tue, 5 Oct 2021 16:40:15 +0000 (09:40 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Tue, 5 Oct 2021 20:35:41 +0000 (20:35 +0000)
For benchmarking and improving recent stkobj-related changes.

Co-Authored-By: Cherry Mui <cherryyz@google.com>
Change-Id: I34c8b1a09e4cf98547460882b0d3908158269f57
Reviewed-on: https://go-review.googlesource.com/c/go/+/354071
Trust: Josh Bleecher Snyder <josharian@gmail.com>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
src/runtime/stack_test.go

index 43fc5cac55fba1911ff313bcec98f5ee3f0e4166..3f02243a1ea5371a2b0eb43aca9cb814ad0801a8 100644 (file)
@@ -585,6 +585,34 @@ func count21(n int) int { return 1 + count22(n-1) }
 func count22(n int) int { return 1 + count23(n-1) }
 func count23(n int) int { return 1 + count1(n-1) }
 
+type stkobjT struct {
+       p *stkobjT
+       x int64
+       y [20]int // consume some stack
+}
+
+// Sum creates a linked list of stkobjTs.
+func Sum(n int64, p *stkobjT) {
+       if n == 0 {
+               return
+       }
+       s := stkobjT{p: p, x: n}
+       Sum(n-1, &s)
+       p.x += s.x
+}
+
+func BenchmarkStackCopyWithStkobj(b *testing.B) {
+       c := make(chan bool)
+       for i := 0; i < b.N; i++ {
+               go func() {
+                       var s stkobjT
+                       Sum(100000, &s)
+                       c <- true
+               }()
+               <-c
+       }
+}
+
 type structWithMethod struct{}
 
 func (s structWithMethod) caller() string {