Skip to content

Commit

Permalink
Add benchmarks for slogSink
Browse files Browse the repository at this point in the history
  • Loading branch information
thockin committed Dec 4, 2023
1 parent 1fdb82a commit d7be8c5
Showing 1 changed file with 124 additions and 0 deletions.
124 changes: 124 additions & 0 deletions benchmark/benchmark_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ package logr

import (
"fmt"
"log/slog"

Check failure on line 21 in benchmark/benchmark_test.go

View workflow job for this annotation

GitHub Actions / test (1.18, ubuntu-latest)

package log/slog is not in GOROOT (/opt/hostedtoolcache/go/1.18.10/x64/src/log/slog)

Check failure on line 21 in benchmark/benchmark_test.go

View workflow job for this annotation

GitHub Actions / test (1.19, ubuntu-latest)

package log/slog is not in GOROOT (/opt/hostedtoolcache/go/1.19.13/x64/src/log/slog)

Check failure on line 21 in benchmark/benchmark_test.go

View workflow job for this annotation

GitHub Actions / test (1.20, ubuntu-latest)

package log/slog is not in GOROOT (/opt/hostedtoolcache/go/1.20.11/x64/src/log/slog)
"os"
"testing"

"github.com/go-logr/logr"
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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) {}

Expand Down Expand Up @@ -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)
}

0 comments on commit d7be8c5

Please sign in to comment.