diff options
| author | Josh Bleecher Snyder <josharian@gmail.com> | 2018-04-02 09:33:07 -0700 |
|---|---|---|
| committer | Josh Bleecher Snyder <josharian@gmail.com> | 2018-04-04 04:45:12 +0000 |
| commit | 00fab20582abc614dcf31ca444b4275240de9ae6 (patch) | |
| tree | 74ff4b7559f10ba767ed33b97fa2e4d4298b8bf9 /src/runtime/stack_test.go | |
| parent | f113a629b2bf6ca31ebd3acd7afc7352a0186342 (diff) | |
| download | go-00fab20582abc614dcf31ca444b4275240de9ae6.tar.xz | |
runtime: improve StackCopy benchmarks
Make the StackCopyNoCache test easier to read.
Add a StackCopyPtr test that actually has some pointers
that need adjusting.
Change-Id: I5b07c26f40cb485c9de97ed63fac89a9e6f36650
Reviewed-on: https://go-review.googlesource.com/104195
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/runtime/stack_test.go')
| -rw-r--r-- | src/runtime/stack_test.go | 197 |
1 files changed, 43 insertions, 154 deletions
diff --git a/src/runtime/stack_test.go b/src/runtime/stack_test.go index 0fed241704..8342724d0b 100644 --- a/src/runtime/stack_test.go +++ b/src/runtime/stack_test.go @@ -452,6 +452,26 @@ func TestStackPanic(t *testing.T) { panic("test panic") } +func BenchmarkStackCopyPtr(b *testing.B) { + c := make(chan bool) + for i := 0; i < b.N; i++ { + go func() { + i := 1000000 + countp(&i) + c <- true + }() + <-c + } +} + +func countp(n *int) { + if *n == 0 { + return + } + *n-- + countp(n) +} + func BenchmarkStackCopy(b *testing.B) { c := make(chan bool) for i := 0; i < b.N; i++ { @@ -482,165 +502,34 @@ func BenchmarkStackCopyNoCache(b *testing.B) { } func count1(n int) int { - if n == 0 { + if n <= 0 { return 0 } return 1 + count2(n-1) } -func count2(n int) int { - if n == 0 { - return 0 - } - return 1 + count3(n-1) -} - -func count3(n int) int { - if n == 0 { - return 0 - } - return 1 + count4(n-1) -} - -func count4(n int) int { - if n == 0 { - return 0 - } - return 1 + count5(n-1) -} - -func count5(n int) int { - if n == 0 { - return 0 - } - return 1 + count6(n-1) -} - -func count6(n int) int { - if n == 0 { - return 0 - } - return 1 + count7(n-1) -} - -func count7(n int) int { - if n == 0 { - return 0 - } - return 1 + count8(n-1) -} - -func count8(n int) int { - if n == 0 { - return 0 - } - return 1 + count9(n-1) -} - -func count9(n int) int { - if n == 0 { - return 0 - } - return 1 + count10(n-1) -} - -func count10(n int) int { - if n == 0 { - return 0 - } - return 1 + count11(n-1) -} - -func count11(n int) int { - if n == 0 { - return 0 - } - return 1 + count12(n-1) -} - -func count12(n int) int { - if n == 0 { - return 0 - } - return 1 + count13(n-1) -} - -func count13(n int) int { - if n == 0 { - return 0 - } - return 1 + count14(n-1) -} - -func count14(n int) int { - if n == 0 { - return 0 - } - return 1 + count15(n-1) -} - -func count15(n int) int { - if n == 0 { - return 0 - } - return 1 + count16(n-1) -} - -func count16(n int) int { - if n == 0 { - return 0 - } - return 1 + count17(n-1) -} - -func count17(n int) int { - if n == 0 { - return 0 - } - return 1 + count18(n-1) -} - -func count18(n int) int { - if n == 0 { - return 0 - } - return 1 + count19(n-1) -} - -func count19(n int) int { - if n == 0 { - return 0 - } - return 1 + count20(n-1) -} - -func count20(n int) int { - if n == 0 { - return 0 - } - return 1 + count21(n-1) -} - -func count21(n int) int { - if n == 0 { - return 0 - } - return 1 + count22(n-1) -} - -func count22(n int) int { - if n == 0 { - return 0 - } - return 1 + count23(n-1) -} - -func count23(n int) int { - if n == 0 { - return 0 - } - return 1 + count1(n-1) -} +func count2(n int) int { return 1 + count3(n-1) } +func count3(n int) int { return 1 + count4(n-1) } +func count4(n int) int { return 1 + count5(n-1) } +func count5(n int) int { return 1 + count6(n-1) } +func count6(n int) int { return 1 + count7(n-1) } +func count7(n int) int { return 1 + count8(n-1) } +func count8(n int) int { return 1 + count9(n-1) } +func count9(n int) int { return 1 + count10(n-1) } +func count10(n int) int { return 1 + count11(n-1) } +func count11(n int) int { return 1 + count12(n-1) } +func count12(n int) int { return 1 + count13(n-1) } +func count13(n int) int { return 1 + count14(n-1) } +func count14(n int) int { return 1 + count15(n-1) } +func count15(n int) int { return 1 + count16(n-1) } +func count16(n int) int { return 1 + count17(n-1) } +func count17(n int) int { return 1 + count18(n-1) } +func count18(n int) int { return 1 + count19(n-1) } +func count19(n int) int { return 1 + count20(n-1) } +func count20(n int) int { return 1 + count21(n-1) } +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 structWithMethod struct{} |
