Przeglądaj źródła

补充性能测试

jys 9 miesięcy temu
rodzic
commit
f743a87ded
1 zmienionych plików z 53 dodań i 22 usunięć
  1. 53 22
      bench_test.go

+ 53 - 22
bench_test.go

@@ -5,34 +5,23 @@ import (
 	"testing"
 )
 
-// 针对于 New、Wrap 两种构建错误的方式进行性能测试对比,结果如下(堆栈深度为10、100、1000):
+// 针对于 New、Wrap 两种构建错误的方式进行性能测试对比,结果如下(堆栈深度为10、100、1000),golang版本1.22:
 // New
 // fserr
-// 3029 ns/op
-// 3788 ns/op
-// 14480 ns/op
-//
-// pkgerr
-// 2982 ns/op
-// 4434 ns/op
-// 15177 ns/op
-//
+// 801 ns/op
+// 1650 ns/op
+// 6262 ns/op
 //
 // Wrap
 // fserr
-// 41.08 ns/op
-// 483.5 ns/op
-// 4722 ns/op
-//
-// pkgerr
-// 38.52 ns/op
-// 585.9 ns/op
-// 5148 ns/op
+// 826.2 ns/op
+// 1623 ns/op
+// 6201 ns/op
 //
-// WithCode性能如下:
-// 4657 ns/op
-// 5143 ns/op
-// 14912 ns/op
+// WithCode
+// 2077 ns/op
+// 2765 ns/op
+// 7628 ns/op
 
 func yesErrors(at, depth int, how func() error) error {
 	if at >= depth {
@@ -45,6 +34,48 @@ func yesErrors(at, depth int, how func() error) error {
 // preventing the compiler from optimising the benchmark functions away.
 var GlobalE interface{}
 
+func BenchmarkNew(b *testing.B) {
+	for _, r := range []int{
+		10,
+		100,
+		1000,
+	} {
+		name := fmt.Sprintf("fserr-stack-%d", r)
+		b.Run(name, func(b *testing.B) {
+			var err error
+			b.ReportAllocs()
+			for i := 0; i < b.N; i++ {
+				err = yesErrors(0, r, func() error {
+					return New("success")
+				})
+			}
+			b.StopTimer()
+			GlobalE = err
+		})
+	}
+}
+
+func BenchmarkWrap(b *testing.B) {
+	for _, r := range []int{
+		10,
+		100,
+		1000,
+	} {
+		name := fmt.Sprintf("fserr-stack-%d", r)
+		b.Run(name, func(b *testing.B) {
+			var err error
+			b.ReportAllocs()
+			for i := 0; i < b.N; i++ {
+				err = yesErrors(0, r, func() error {
+					return Wrap(New("origin"), "success")
+				})
+			}
+			b.StopTimer()
+			GlobalE = err
+		})
+	}
+}
+
 func BenchmarkWithCode(b *testing.B) {
 	NewOK(ErrDb, "success")
 	for _, r := range []int{