aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/stack_test.go
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2018-04-02 09:33:07 -0700
committerJosh Bleecher Snyder <josharian@gmail.com>2018-04-04 04:45:12 +0000
commit00fab20582abc614dcf31ca444b4275240de9ae6 (patch)
tree74ff4b7559f10ba767ed33b97fa2e4d4298b8bf9 /src/runtime/stack_test.go
parentf113a629b2bf6ca31ebd3acd7afc7352a0186342 (diff)
downloadgo-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.go197
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{}