diff --git a/benchmark/benchmark_test.go b/benchmark/benchmark_test.go
index 090e3ce..4c93b9e 100644
--- a/benchmark/benchmark_test.go
+++ b/benchmark/benchmark_test.go
@@ -18,6 +18,8 @@ package logr
import (
"fmt"
+ "log/slog"
+ "os"
"testing"
"github.com/go-logr/logr"
@@ -141,6 +143,10 @@ func doMarshalerValue(b *testing.B, log logr.Logger) {
}
}
+//
+// discard
+//
+
func BenchmarkDiscardLogInfoOneArg(b *testing.B) {
var log logr.Logger = logr.Discard()
doInfoOneArg(b, log)
@@ -181,6 +187,54 @@ func BenchmarkDiscardWithName(b *testing.B) {
doWithName(b, log)
}
+//
+// slogSink wrapper of discard
+//
+
+func BenchmarkSlogSinkLogInfoOneArg(b *testing.B) {
+ var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard()))
+ doInfoOneArg(b, log)
+}
+
+func BenchmarkSlogSinkLogInfoSeveralArgs(b *testing.B) {
+ var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard()))
+ doInfoSeveralArgs(b, log)
+}
+
+func BenchmarkSlogSinkLogInfoWithValues(b *testing.B) {
+ var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard()))
+ doInfoWithValues(b, log)
+}
+
+func BenchmarkSlogSinkLogV0Info(b *testing.B) {
+ var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard()))
+ doV0Info(b, log)
+}
+
+func BenchmarkSlogSinkLogV9Info(b *testing.B) {
+ var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard()))
+ doV9Info(b, log)
+}
+
+func BenchmarkSlogSinkLogError(b *testing.B) {
+ var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard()))
+ doError(b, log)
+}
+
+func BenchmarkSlogSinkWithValues(b *testing.B) {
+ var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard()))
+ doWithValues(b, log)
+}
+
+func BenchmarkSlogSinkWithName(b *testing.B) {
+ var log logr.Logger = logr.FromSlogHandler(logr.ToSlogHandler(logr.Discard()))
+ doWithName(b, log)
+}
+
+//
+// funcr
+//
+
func noopKV(_, _ string) {}
func noopJSON(_ string) {}
@@ -273,3 +327,73 @@ func BenchmarkFuncrJSONLogInfoMarshalerValue(b *testing.B) {
var log logr.Logger = funcr.NewJSON(noopJSON, funcr.Options{})
doMarshalerValue(b, log)
}
+
+//
+// slogSink wrapper of slog's JSONHandler, for comparison
+//
+
+func makeSlogJSONLogger() logr.Logger {
+ devnull, _ := os.Open("/dev/null")
+ handler := slog.NewJSONHandler(devnull, nil)
+ return logr.FromSlogHandler(handler)
+}
+
+func BenchmarkSlogJSONLogInfoOneArg(b *testing.B) {
+ var log logr.Logger = makeSlogJSONLogger()
+ doInfoOneArg(b, log)
+}
+
+func BenchmarkSlogJSONLogInfoSeveralArgs(b *testing.B) {
+ var log logr.Logger = makeSlogJSONLogger()
+ doInfoSeveralArgs(b, log)
+}
+
+func BenchmarkSlogJSONLogInfoWithValues(b *testing.B) {
+ var log logr.Logger = makeSlogJSONLogger()
+ doInfoWithValues(b, log)
+}
+
+func BenchmarkSlogJSONLogV0Info(b *testing.B) {
+ var log logr.Logger = makeSlogJSONLogger()
+ doV0Info(b, log)
+}
+
+func BenchmarkSlogJSONLogV9Info(b *testing.B) {
+ var log logr.Logger = makeSlogJSONLogger()
+ doV9Info(b, log)
+}
+
+func BenchmarkSlogJSONLogError(b *testing.B) {
+ var log logr.Logger = makeSlogJSONLogger()
+ doError(b, log)
+}
+
+func BenchmarkSlogJSONLogWithValues(b *testing.B) {
+ var log logr.Logger = makeSlogJSONLogger()
+ doWithValues(b, log)
+}
+
+func BenchmarkSlogJSONWithName(b *testing.B) {
+ var log logr.Logger = makeSlogJSONLogger()
+ doWithName(b, log)
+}
+
+func BenchmarkSlogJSONWithCallDepth(b *testing.B) {
+ var log logr.Logger = makeSlogJSONLogger()
+ doWithCallDepth(b, log)
+}
+
+func BenchmarkSlogJSONLogInfoStringerValue(b *testing.B) {
+ var log logr.Logger = makeSlogJSONLogger()
+ doStringerValue(b, log)
+}
+
+func BenchmarkSlogJSONLogInfoErrorValue(b *testing.B) {
+ var log logr.Logger = makeSlogJSONLogger()
+ doErrorValue(b, log)
+}
+
+func BenchmarkSlogJSONLogInfoMarshalerValue(b *testing.B) {
+ var log logr.Logger = makeSlogJSONLogger()
+ doMarshalerValue(b, log)
+}