1
0
mirror of https://github.com/golang/go synced 2024-09-29 21:34:28 -06:00

runtime: add BenchmarkStackCopyWithStkobj

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>
This commit is contained in:
Josh Bleecher Snyder 2021-10-05 09:40:15 -07:00
parent 0b4d4998d5
commit 75773b0e7b

View 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 {