blob: b8fe8755242aae87904123e33c190c62c04f1072 [file] [log] [blame]
// Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package zap_benchmarks
import (
"testing"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
slogbench "golang.org/x/exp/slog/benchmarks"
)
// Keep in sync (same names and behavior) as the
// benchmarks in the parent directory.
func BenchmarkAttrs(b *testing.B) {
for _, logger := range []struct {
name string
l *zap.Logger
}{
{
"async discard",
zap.New(&asyncCore{}),
},
{
"fastText discard",
zap.New(zapcore.NewCore(
&fastTextEncoder{},
&discarder{},
zap.DebugLevel)),
},
} {
l := logger.l
b.Run(logger.name, func(b *testing.B) {
for _, call := range []struct {
name string
f func()
}{
{
"5 args",
func() {
l.Info(slogbench.TestMessage,
zap.String("string", slogbench.TestString),
zap.Int("status", slogbench.TestInt),
zap.Duration("duration", slogbench.TestDuration),
zap.Time("time", slogbench.TestTime),
zap.Any("error", slogbench.TestError))
},
},
{
"10 args",
func() {
l.Info(slogbench.TestMessage,
zap.String("string", slogbench.TestString),
zap.Int("status", slogbench.TestInt),
zap.Duration("duration", slogbench.TestDuration),
zap.Time("time", slogbench.TestTime),
zap.Any("error", slogbench.TestError),
zap.String("string", slogbench.TestString),
zap.Int("status", slogbench.TestInt),
zap.Duration("duration", slogbench.TestDuration),
zap.Time("time", slogbench.TestTime),
zap.Any("error", slogbench.TestError))
},
},
{
"40 args",
func() {
l.Info(slogbench.TestMessage,
zap.String("string", slogbench.TestString),
zap.Int("status", slogbench.TestInt),
zap.Duration("duration", slogbench.TestDuration),
zap.Time("time", slogbench.TestTime),
zap.Any("error", slogbench.TestError),
zap.String("string", slogbench.TestString),
zap.Int("status", slogbench.TestInt),
zap.Duration("duration", slogbench.TestDuration),
zap.Time("time", slogbench.TestTime),
zap.Any("error", slogbench.TestError),
zap.String("string", slogbench.TestString),
zap.Int("status", slogbench.TestInt),
zap.Duration("duration", slogbench.TestDuration),
zap.Time("time", slogbench.TestTime),
zap.Any("error", slogbench.TestError),
zap.String("string", slogbench.TestString),
zap.Int("status", slogbench.TestInt),
zap.Duration("duration", slogbench.TestDuration),
zap.Time("time", slogbench.TestTime),
zap.Any("error", slogbench.TestError),
zap.String("string", slogbench.TestString),
zap.Int("status", slogbench.TestInt),
zap.Duration("duration", slogbench.TestDuration),
zap.Time("time", slogbench.TestTime),
zap.Any("error", slogbench.TestError),
zap.String("string", slogbench.TestString),
zap.Int("status", slogbench.TestInt),
zap.Duration("duration", slogbench.TestDuration),
zap.Time("time", slogbench.TestTime),
zap.Any("error", slogbench.TestError),
zap.String("string", slogbench.TestString),
zap.Int("status", slogbench.TestInt),
zap.Duration("duration", slogbench.TestDuration),
zap.Time("time", slogbench.TestTime),
zap.Any("error", slogbench.TestError),
zap.String("string", slogbench.TestString),
zap.Int("status", slogbench.TestInt),
zap.Duration("duration", slogbench.TestDuration),
zap.Time("time", slogbench.TestTime),
zap.Any("error", slogbench.TestError))
},
},
} {
b.Run(call.name, func(b *testing.B) {
b.ReportAllocs()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
call.f()
}
})
})
}
})
}
}