slog: change nopc variant from build tag to internal global
During benchmarking, we want to skip the call to runtime.Callers so we
can measure the speedup without it.
Previously we used the build tag `nopc` for this. But build tags are,
in a sense, exported API: anyone can rebuild with a particular tag. In
fact, at least one user believed that `nopc` was a supported feature
of slog.
This CL switches to using a global boolean variable. (The extra time
involved in checking the global is negligible.) To hide the variable
while letting both the slog and benchmarks packages access it,
we put it in an internal package.
Change-Id: I48c133e53c63cd36cc802bbd5f858b74cc19b9e8
Reviewed-on: https://go-review.googlesource.com/c/exp/+/473335
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
Reviewed-by: Alan Donovan <adonovan@google.com>
diff --git a/slog/benchmarks/Makefile b/slog/benchmarks/Makefile
index 1c673c5..60f5896 100644
--- a/slog/benchmarks/Makefile
+++ b/slog/benchmarks/Makefile
@@ -15,7 +15,7 @@
go test -run NONE -bench . -count $(count) > $@
slog-nopc.bench: *.go ../*.go ../../go.mod
- go test -tags nopc -run NONE -bench . -count $(count) > $@
+ go test -nopc -run NONE -bench . -count $(count) > $@
%_benchmarks/out.bench: %_benchmarks/*.go %_benchmarks/go.mod
go test -C $*_benchmarks -bench . -count $(count) > $@
diff --git a/slog/benchmarks/benchmarks_test.go b/slog/benchmarks/benchmarks_test.go
index 50143ab..ce82620 100644
--- a/slog/benchmarks/benchmarks_test.go
+++ b/slog/benchmarks/benchmarks_test.go
@@ -6,12 +6,18 @@
import (
"context"
+ "flag"
"io"
"testing"
"golang.org/x/exp/slog"
+ "golang.org/x/exp/slog/internal"
)
+func init() {
+ flag.BoolVar(&internal.IgnorePC, "nopc", false, "do not invoke runtime.Callers")
+}
+
// We pass Attrs (or zap.Fields) inline because it affects allocations: building
// up a list outside of the benchmarked code and passing it in with "..."
// reduces measured allocations.
diff --git a/slog/benchmarks/slog-nopc.bench b/slog/benchmarks/slog-nopc.bench
index c5cfdd0..7c478d3 100644
--- a/slog/benchmarks/slog-nopc.bench
+++ b/slog/benchmarks/slog-nopc.bench
@@ -2,105 +2,205 @@
goarch: amd64
pkg: golang.org/x/exp/slog/benchmarks
cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
-BenchmarkAttrs/disabled/5_args-8 100000000 10.36 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 100000000 10.40 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 100000000 10.79 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 100000000 10.78 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 113187081 10.79 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 95979213 11.13 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 100000000 10.91 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 100000000 11.17 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 100000000 11.05 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 100000000 10.67 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 64571424 19.12 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 62505003 18.98 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 65596965 18.71 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 61716511 18.53 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 62806261 18.80 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 17923170 65.24 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 18474331 67.22 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 17646770 67.86 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 17033931 66.41 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 18256833 66.13 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 14399127 88.84 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 12632341 95.60 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 14252593 84.72 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 11236347 97.45 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 11726569 90.01 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 13305091 91.62 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 12172405 94.63 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 12980976 92.37 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 12803614 104.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 12005320 88.81 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 4059170 319.5 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 3483382 372.3 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 3842409 301.9 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 3839804 335.7 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 3182643 361.1 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 1000000 1060 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 1235323 1161 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 1000000 1206 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 1000000 1254 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 909853 1201 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 6260964 197.8 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 6688066 221.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 7639705 164.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 5220344 200.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 6531496 186.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 7588935 160.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 7122673 178.8 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 6209121 200.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 6370140 173.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 6048418 192.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 2218376 563.1 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 2191339 557.0 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 2051697 607.6 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1971550 595.0 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 2056645 645.7 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 360135 2892 ns/op 1411 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 411124 2846 ns/op 1411 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 480218 2460 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 504228 2464 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 476949 2475 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1291322 862.5 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1418359 856.0 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1339944 946.0 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1348107 857.1 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1320080 910.6 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1277317 861.4 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1341210 981.7 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1268680 907.5 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1302778 969.4 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1276990 940.9 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 791600 1811 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 750620 1718 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 699880 1665 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 924051 1636 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 873486 1525 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 252258 6022 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 238166 5411 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 226570 5721 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 225001 5362 ns/op 1476 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 240476 5466 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1495221 741.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1561606 683.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1548652 802.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1592420 696.6 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1759450 689.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1594424 674.8 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1788061 667.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1541530 706.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1569404 738.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1819743 702.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 1000000 1256 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 1000000 1341 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 960759 1318 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 1000000 1214 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 1000000 1305 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 291825 4156 ns/op 1411 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 287223 4258 ns/op 1411 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 273271 4720 ns/op 1411 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 241485 4373 ns/op 1411 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 333234 4382 ns/op 1411 B/op 1 allocs/op
+BenchmarkAttrs/disabled/5_args-8 96666853 11.50 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 93822624 11.52 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 93498656 11.50 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 11.34 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 11.27 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 11.55 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 98321294 11.44 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 11.19 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 97612837 11.17 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 91372897 11.47 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 61208725 19.13 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 63628257 19.69 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 57953264 18.73 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 62812270 19.46 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 57251260 19.27 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 61932922 20.04 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 61243114 19.21 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 59434218 19.90 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 64204924 19.21 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 63116061 18.77 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 56439350 20.38 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 57480078 20.69 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 59042649 20.47 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 56442658 20.72 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 55750566 20.49 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 57809546 20.54 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 55997990 21.12 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 53568574 21.60 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 49113771 23.03 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 52396518 22.46 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 15550318 73.67 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 15800660 78.36 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 14491339 76.37 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 15809065 73.16 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16208973 74.71 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16328282 75.02 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16293915 73.25 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16769311 72.24 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16190818 77.24 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 15298545 75.12 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 12126757 113.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 11220534 112.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 10304506 97.45 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 12205324 96.65 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 11156934 104.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 11478124 103.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 11881509 104.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 11149441 97.91 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 11795527 94.65 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 12327957 100.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 10814191 114.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 10285345 108.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 10800776 99.18 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 11485023 104.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 11583052 100.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 10625286 102.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 12110364 102.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 10148967 104.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 11966101 102.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 11707686 103.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 3464420 360.6 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 3190548 372.2 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2996740 394.5 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 3137779 349.4 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 3399565 342.7 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 3154626 384.1 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 3780799 328.8 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 3136921 359.5 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 3452958 389.5 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 3486763 346.6 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 1000000 1417 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 716872 1448 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 961792 1290 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 913196 1313 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 814600 1367 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 849133 1373 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 792927 1268 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 944186 1257 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 1000000 1266 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 1000000 1313 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 7067176 171.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 6854912 189.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 6477049 194.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 5754541 231.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 5994988 187.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 6226411 199.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 7055413 182.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 6862999 171.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 7167945 189.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 5665896 223.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 6328725 220.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 5980275 202.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 5859608 212.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 6417674 212.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 5264354 248.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 6446439 225.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 5482052 198.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 5419814 223.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 6455188 192.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 6946065 184.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 2318042 555.9 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 2207629 567.4 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 2096774 571.4 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 2109498 551.6 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 2056164 553.2 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 2261677 531.6 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 2085157 589.5 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 2193956 553.1 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1962531 534.2 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 2347599 758.9 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 361731 3279 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 376836 2673 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 478945 2499 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 576418 2670 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 535083 2430 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 506319 2501 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 439126 2566 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 446274 2451 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 544543 2259 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 540310 2312 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1475912 832.4 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1337040 850.3 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1357222 803.1 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1310484 826.5 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1453827 792.9 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1505486 875.6 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1412893 833.8 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1501142 770.5 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1541641 840.8 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1460121 813.6 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1433220 847.9 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1425093 785.0 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1367612 870.2 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1348792 911.9 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1470273 847.4 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1441452 879.6 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1345639 966.5 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1416301 840.1 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1483112 834.0 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1443690 850.7 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 793375 1550 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 883533 1543 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 940844 1570 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 773037 1393 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 982622 1416 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 949856 1328 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 878445 1453 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 871341 1428 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 724788 1596 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 985714 1472 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 236900 4795 ns/op 1476 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 317960 4955 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 250573 4851 ns/op 1476 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 257638 5089 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 261318 4671 ns/op 1476 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 254628 4732 ns/op 1476 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 239418 5454 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 272034 4705 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 271911 4808 ns/op 1476 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 248612 4969 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1992364 640.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1609268 767.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1924783 633.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1686579 658.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1863207 648.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1817850 606.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1917662 611.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1668811 763.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1795159 638.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1889841 676.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1658430 677.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1683805 617.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 2013060 557.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 2090346 589.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1664809 703.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 2149461 558.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1799823 651.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1846158 662.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1509614 679.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1802488 618.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1146 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1128 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1240 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 930816 1248 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1095 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1298 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1170 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 984279 1204 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1189 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1153 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 257323 4641 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 274695 4339 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 323830 4143 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 291009 4123 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 296120 4689 ns/op 1411 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 233097 4445 ns/op 1411 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 263600 4506 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 305414 4082 ns/op 1411 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 289495 4249 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 363501 4202 ns/op 1411 B/op 1 allocs/op
PASS
-ok golang.org/x/exp/slog/benchmarks 148.487s
+ok golang.org/x/exp/slog/benchmarks 293.287s
diff --git a/slog/benchmarks/slog.bench b/slog/benchmarks/slog.bench
index 6bb7483..9384458 100644
--- a/slog/benchmarks/slog.bench
+++ b/slog/benchmarks/slog.bench
@@ -2,205 +2,205 @@
goarch: amd64
pkg: golang.org/x/exp/slog/benchmarks
cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
-BenchmarkAttrs/disabled/5_args-8 87726345 11.53 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 100000000 12.41 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 105380964 10.95 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 100000000 11.09 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 100000000 11.08 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 109361474 10.98 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 100000000 11.08 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 97419044 10.96 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 100000000 11.05 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 100000000 11.01 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 69400743 17.91 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 62466876 18.89 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 61274703 18.37 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 63662512 19.00 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 63269335 18.40 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 65971545 18.91 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 62653164 18.29 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 61501500 17.95 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 63020546 18.51 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 60816229 19.09 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 58447599 19.92 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 59103002 19.97 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 59058175 20.24 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 59801014 19.92 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 59346874 19.98 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 55444516 20.22 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 59346399 20.23 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 56470292 20.02 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 57221503 19.97 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 54583336 20.24 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 16806272 70.63 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 16756441 71.14 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 16822804 72.16 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 16433698 71.04 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 16843483 70.45 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 17040812 70.89 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 16873478 71.21 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 16667295 70.42 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 16593979 78.32 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 14147412 77.79 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3810328 308.3 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3864543 309.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3881245 311.6 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3840583 307.0 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3899516 306.8 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3890083 319.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3817888 322.0 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3816842 314.6 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3572856 314.0 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3699051 306.0 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 3599636 336.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 3327789 327.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 3764053 320.0 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 3667870 326.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 3751074 322.6 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 3618402 326.0 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 3756518 322.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 3728480 323.6 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 3721392 322.8 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 3764152 319.8 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 2084524 574.3 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 2300154 565.0 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 2165674 557.9 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 2124346 608.0 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1974321 567.2 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 2019566 527.7 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 2103444 591.8 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1887854 646.5 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1950650 610.0 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1983426 592.0 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 553869 2140 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 499414 2269 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 534874 2222 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 553262 2121 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 548557 2068 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 537718 2077 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 561046 2081 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 554010 2093 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 547024 2123 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 596251 2382 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2790256 409.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 3009939 392.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2982199 388.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 3077679 411.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 3147536 384.5 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 3083035 406.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2873736 393.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 3152352 381.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 3154658 403.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 3087505 385.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 2982118 426.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 2847314 396.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 2994334 407.8 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 3096763 389.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 2910908 394.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 3070110 411.3 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 2873941 409.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 2901960 414.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 3026241 402.0 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 2981787 405.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1592515 731.3 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1701238 727.6 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1512008 740.5 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1570792 715.3 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1678142 782.5 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1500272 804.4 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1436685 748.8 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1538223 766.5 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1562414 727.1 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1746742 739.6 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 409638 2979 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 381800 2940 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 367718 3067 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 422248 2948 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 403758 3015 ns/op 1413 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 412140 2974 ns/op 1413 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 408601 3200 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 381240 2951 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 388334 3007 ns/op 1413 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 399074 2901 ns/op 1413 B/op 1 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1282058 971.7 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1211372 950.1 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1000000 1045 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1230904 996.9 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1278661 962.6 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1000000 1027 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1200620 993.5 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1250619 942.1 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1289546 933.7 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1249658 952.7 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1241697 962.7 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1242026 941.4 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1242705 964.8 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1249431 940.6 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1208154 1020 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1283144 937.9 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1224484 930.6 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1243726 960.3 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1024 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 981321 1037 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 686640 1655 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 789316 1571 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 763826 1668 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 816855 1505 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 774973 1572 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 736404 1892 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 836869 1512 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 846553 1475 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 823282 1534 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 831930 1608 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 262455 5024 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 238699 5193 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 224610 5261 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 235082 5272 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 243098 5396 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 255624 5363 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 215061 5232 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 236866 4980 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 234951 5331 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 237111 5029 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1482212 778.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1547962 774.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1677744 761.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1506229 830.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1421970 835.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1456422 803.0 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1525104 820.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1576022 779.6 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1537720 760.0 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1419771 870.3 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1435820 773.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1547727 794.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1499551 750.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1550808 800.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1476103 801.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1615399 765.6 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1453222 794.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1498340 863.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1504358 788.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1516674 814.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 914118 1327 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 984048 1338 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 1000000 1321 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 987379 1272 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 1000000 1343 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 1000000 1272 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 865246 1276 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 784126 1285 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 953875 1258 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 990472 1532 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 291584 4539 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 273050 4628 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 275667 4160 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 261201 4058 ns/op 1411 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 253822 4428 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 252219 4742 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 288744 4469 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 256788 4236 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 296882 4089 ns/op 1411 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 278248 4504 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/disabled/5_args-8 85028928 11.94 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 97603412 11.20 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 98026633 11.41 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 98189282 11.44 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 11.54 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 99336901 11.69 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 94035765 11.55 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 11.26 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 11.27 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 11.15 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 64397640 18.53 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 65978652 18.69 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 75175520 18.56 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 67500830 19.13 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 63446371 18.54 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 61653506 19.26 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 62390637 18.82 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 54138097 19.05 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 64863612 18.90 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 63702469 19.24 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 58628262 20.38 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 54573738 20.43 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 57079495 20.44 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 56993048 20.26 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 57084168 20.40 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 54865020 20.47 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 56883810 20.68 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 57454248 20.23 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 58203282 20.41 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 53383620 20.71 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16833667 71.12 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16628658 71.27 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16729125 72.50 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16386619 71.76 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16549412 71.29 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16790506 72.17 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16463736 72.50 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16542148 72.09 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16668524 73.04 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 16624455 72.58 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 4012514 303.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3993012 297.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 4061977 299.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 4008031 304.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3919713 308.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3841856 307.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3907417 300.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3629317 300.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 4037016 303.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 4073185 295.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 4065908 301.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3974256 310.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3553280 312.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3492072 319.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3975591 297.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3990794 303.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3865233 304.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3839840 313.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 4023607 311.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 4048357 297.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2134437 550.9 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2101972 557.3 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2145542 552.7 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2183551 551.4 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2160979 556.7 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2251357 553.8 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2099067 556.3 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2066022 561.3 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2101921 560.8 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2074694 563.1 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 682222 2026 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 611084 2068 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 572643 2096 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 593726 2046 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 607022 2037 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 580706 2043 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 571491 2071 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 578845 2031 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 581244 2084 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 608149 2069 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 3144124 387.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 3161896 380.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 3172803 396.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 3154216 379.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 3153247 378.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 3185548 375.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 3123097 381.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 3163221 402.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 3047324 388.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 3151058 384.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 3153196 383.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 3138043 382.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 3030826 421.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 3118032 399.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 3103054 384.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 3040407 398.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 3057907 384.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 2804430 380.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 3109689 383.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 3161005 382.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1558144 769.7 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1618090 703.0 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1641794 709.1 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1642668 726.3 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1614679 715.0 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1664410 747.8 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1375760 735.9 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1654279 776.4 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1617708 728.0 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1622902 724.0 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 385968 2840 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 448968 2741 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 430761 2729 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 488749 2836 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 446198 2909 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 392104 2860 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 435178 2807 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 408925 2878 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 420307 2824 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 417450 2853 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1221808 1013 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1222080 969.3 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1226036 966.0 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1298272 939.0 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1237682 960.2 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1278205 977.6 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1000000 1007 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1000000 1050 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1205269 1043 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1000000 1016 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1206166 985.5 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1020 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1039 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1044 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1252417 973.3 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1230265 1025 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1202907 1049 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1061 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1057 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1048 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 722588 1609 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 841220 1562 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 803983 1600 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 823732 1598 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 797410 1617 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 827581 1648 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 731049 1647 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 818089 1572 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 808208 1502 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 851550 1574 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 247522 5274 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 239428 5060 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 232135 4937 ns/op 1476 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 213756 5148 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 256321 5316 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 212294 5628 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 229651 5011 ns/op 1476 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 220143 5153 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 219468 5484 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 223111 4813 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1523245 825.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1532900 781.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1482728 788.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1526634 806.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1568881 762.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1454412 731.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1564548 793.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1469851 784.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1393617 867.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1500427 786.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1519324 794.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1303532 791.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1389266 780.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1487719 763.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1461187 772.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1463911 826.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1550698 797.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1487751 744.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1514853 797.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1605760 750.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1330 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 957187 1326 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 914820 1307 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 969138 1301 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 840184 1258 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 991464 1273 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 942420 1314 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 998630 1286 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 898899 1272 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 901351 1300 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 298953 4364 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 253590 4395 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 271449 4437 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 276140 4354 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 258526 4685 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 292897 4555 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 262538 4392 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 274155 4349 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 296401 4584 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 277298 4393 ns/op 1412 B/op 1 allocs/op
PASS
-ok golang.org/x/exp/slog/benchmarks 304.732s
+ok golang.org/x/exp/slog/benchmarks 296.660s
diff --git a/slog/benchmarks/zap_benchmarks/out.bench b/slog/benchmarks/zap_benchmarks/out.bench
index 16d906b..5965fa1 100644
--- a/slog/benchmarks/zap_benchmarks/out.bench
+++ b/slog/benchmarks/zap_benchmarks/out.bench
@@ -2,95 +2,95 @@
goarch: amd64
pkg: golang.org/x/exp/slog/benchmarks/zap_benchmarks
cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
-BenchmarkAttrs/async_discard/5_args-8 2786181 416.5 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3033411 376.8 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3129894 383.9 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3257394 369.4 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 2914264 407.5 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 2834468 372.3 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3365709 369.9 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 2855428 390.1 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 2895714 384.6 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 2901368 412.0 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1839942 582.7 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1961584 620.5 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1937156 595.7 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 2042659 627.3 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1882642 632.4 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1980680 617.8 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1829194 655.0 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 2102383 628.2 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1915904 598.4 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1884489 635.8 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 498272 2198 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 528972 2159 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 486730 2091 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 669730 2042 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 603082 2086 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 611821 2026 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 554650 2067 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 548256 1951 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 548119 2204 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 576814 2077 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2279377 504.5 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2474145 513.9 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2247279 516.7 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2350695 512.6 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2402662 488.7 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2413670 515.1 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2345791 510.6 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2343386 555.1 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2127553 517.0 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2439127 509.3 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1406482 843.3 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1393034 875.6 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1439449 861.0 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1406734 891.3 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1387069 917.8 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1315412 862.0 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1385782 865.8 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1364628 869.4 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1299386 858.5 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1396899 856.3 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 374452 3023 ns/op 2698 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 408590 3122 ns/op 2698 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 392060 3064 ns/op 2698 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 339796 3071 ns/op 2698 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 360938 3079 ns/op 2697 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 370417 2946 ns/op 2698 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 350329 2932 ns/op 2697 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 385892 3075 ns/op 2698 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 440942 3196 ns/op 2698 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 333798 3122 ns/op 2699 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1468095 913.8 ns/op 321 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1458768 808.0 ns/op 321 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1564507 784.2 ns/op 321 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1444612 799.4 ns/op 321 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1594400 793.3 ns/op 321 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1483266 767.7 ns/op 321 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1512906 788.5 ns/op 321 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1488609 820.4 ns/op 321 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1479470 789.2 ns/op 321 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1525785 814.6 ns/op 321 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 1000000 1363 ns/op 642 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 916062 1393 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 929817 1266 ns/op 642 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 823480 1301 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 796978 1372 ns/op 642 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 852436 1432 ns/op 642 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 844048 1369 ns/op 642 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 1000000 1290 ns/op 642 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 948387 1303 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 984104 1238 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 284340 4438 ns/op 2700 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 256941 4479 ns/op 2699 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 257355 4271 ns/op 2699 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 282530 4366 ns/op 2700 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 240603 4903 ns/op 2701 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 254386 4401 ns/op 2700 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 266818 4193 ns/op 2699 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 230997 4611 ns/op 2699 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 287514 4169 ns/op 2699 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 269577 4576 ns/op 2699 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3510766 350.9 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3405861 338.9 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3537150 335.5 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3553928 357.7 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3555067 347.1 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3556012 349.7 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3439095 344.5 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3488470 343.8 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3330931 355.3 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3451645 351.8 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1947522 592.2 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2029161 586.8 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2018308 600.5 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2063016 630.4 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2063624 604.0 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2027398 642.2 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2036904 601.1 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2048212 596.8 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1916887 606.3 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1963885 586.8 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 571792 2174 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 579630 1964 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 557364 2169 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 689043 1973 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 531727 1947 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 544908 1999 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 584899 1962 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 577837 1974 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 649815 1909 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 591880 1928 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2430532 500.0 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2449464 497.4 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2461346 511.7 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2358171 500.4 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2389845 501.9 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2371099 507.1 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2383549 499.4 ns/op 321 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2348478 505.9 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2397246 509.3 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2405686 500.8 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1409547 863.9 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1422519 870.7 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1417478 858.7 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1426738 857.8 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1397716 829.8 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1337100 849.0 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1388724 874.8 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1363362 853.7 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1354309 836.8 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1376586 834.2 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 403941 2805 ns/op 2697 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 422526 2809 ns/op 2698 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 346633 3071 ns/op 2697 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 434634 2908 ns/op 2697 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 394057 2922 ns/op 2699 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 425965 2871 ns/op 2698 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 405974 2795 ns/op 2698 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 433692 2881 ns/op 2698 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 385582 3073 ns/op 2698 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 410702 2843 ns/op 2697 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1635340 787.4 ns/op 321 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1560625 771.1 ns/op 321 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1566784 783.5 ns/op 321 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1491864 771.4 ns/op 321 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1548451 752.1 ns/op 321 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1566960 765.3 ns/op 321 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1548302 810.1 ns/op 321 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1518164 766.6 ns/op 321 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1651222 759.2 ns/op 321 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1569230 748.1 ns/op 321 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1246 ns/op 642 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1273 ns/op 642 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 942969 1243 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 982197 1225 ns/op 642 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1245 ns/op 642 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1230 ns/op 642 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 959143 1239 ns/op 642 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1344 ns/op 642 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1315 ns/op 642 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 908618 1277 ns/op 642 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 277483 4209 ns/op 2699 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 331118 4211 ns/op 2699 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 274591 4073 ns/op 2700 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 282768 4124 ns/op 2699 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 265305 4051 ns/op 2701 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 273698 3996 ns/op 2700 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 310609 4036 ns/op 2700 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 290971 4094 ns/op 2700 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 277810 4109 ns/op 2699 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 286332 4221 ns/op 2700 B/op 1 allocs/op
PASS
-ok golang.org/x/exp/slog/benchmarks/zap_benchmarks 145.758s
+ok golang.org/x/exp/slog/benchmarks/zap_benchmarks 140.608s
diff --git a/slog/benchmarks/zerolog_benchmarks/out.bench b/slog/benchmarks/zerolog_benchmarks/out.bench
index 5a17121..a7bb3c8 100644
--- a/slog/benchmarks/zerolog_benchmarks/out.bench
+++ b/slog/benchmarks/zerolog_benchmarks/out.bench
@@ -2,25 +2,25 @@
goarch: amd64
pkg: golang.org/x/exp/slog/benchmarks/zerolog_benchmarks
cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
-BenchmarkAttrs/JSON_discard/5_args-8 4295836 257.6 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 4331781 268.5 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 4549810 259.8 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 4431434 253.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 4828357 257.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 4508712 254.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 4662748 271.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 4425884 257.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 4504692 262.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 4908181 256.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 3953874 295.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 4068267 291.0 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 3752751 314.8 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 4080250 305.8 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 4091317 294.0 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 3743437 296.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 4025077 295.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 3885260 299.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 3930517 303.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 4015480 315.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 4137742 295.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 4177807 290.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 4067436 292.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 4089474 294.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 4057003 300.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 3972150 290.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 4090122 312.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 4305754 315.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 3576042 327.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 4073211 290.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 3213050 389.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 3510774 350.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 3804168 319.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 3812370 334.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 3738373 315.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 3918612 321.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 3649148 348.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 3699234 338.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 3639038 330.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 3439284 323.2 ns/op 0 B/op 0 allocs/op
PASS
-ok golang.org/x/exp/slog/benchmarks/zerolog_benchmarks 29.551s
+ok golang.org/x/exp/slog/benchmarks/zerolog_benchmarks 30.876s
diff --git a/slog/internal/ignorepc.go b/slog/internal/ignorepc.go
new file mode 100644
index 0000000..d125642
--- /dev/null
+++ b/slog/internal/ignorepc.go
@@ -0,0 +1,9 @@
+// Copyright 2023 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 internal
+
+// If IgnorePC is true, do not invoke runtime.Callers to get the pc.
+// This is solely for benchmarking the slowdown from runtime.Callers.
+var IgnorePC = false
diff --git a/slog/logger.go b/slog/logger.go
index d52c417..77599cc 100644
--- a/slog/logger.go
+++ b/slog/logger.go
@@ -10,6 +10,8 @@
"runtime"
"sync/atomic"
"time"
+
+ "golang.org/x/exp/slog/internal"
)
var defaultLogger atomic.Value
@@ -52,7 +54,7 @@
return 0, nil
}
var pc uintptr
- if w.capturePC {
+ if !internal.IgnorePC && w.capturePC {
// skip [runtime.Callers, w.Write, Logger.Output, log.Print]
var pcs [1]uintptr
runtime.Callers(4, pcs[:])
@@ -215,10 +217,14 @@
if !l.Enabled(ctx, level) {
return
}
- var pcs [1]uintptr
- // skip [runtime.Callers, this function, this function's caller]
- runtime.Callers(3, pcs[:])
- r := NewRecord(time.Now(), level, msg, pcs[0])
+ var pc uintptr
+ if !internal.IgnorePC {
+ var pcs [1]uintptr
+ // skip [runtime.Callers, this function, this function's caller]
+ runtime.Callers(3, pcs[:])
+ pc = pcs[0]
+ }
+ r := NewRecord(time.Now(), level, msg, pc)
if err != nil {
r.front[0] = Any(ErrorKey, err)
r.nFront++
@@ -232,10 +238,14 @@
if !l.Enabled(ctx, level) {
return
}
- var pcs [1]uintptr
- // skip [runtime.Callers, this function, this function's caller]
- runtime.Callers(3, pcs[:])
- r := NewRecord(time.Now(), level, msg, pcs[0])
+ var pc uintptr
+ if !internal.IgnorePC {
+ var pcs [1]uintptr
+ // skip [runtime.Callers, this function, this function's caller]
+ runtime.Callers(3, pcs[:])
+ pc = pcs[0]
+ }
+ r := NewRecord(time.Now(), level, msg, pc)
r.AddAttrs(attrs...)
_ = l.Handler().Handle(ctx, r)
}
diff --git a/slog/nopc.go b/slog/nopc.go
deleted file mode 100644
index c8a5317..0000000
--- a/slog/nopc.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// 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.
-
-// Use the nopc flag for benchmarks, on the assumption
-// that retrieving the pc will become cheap.
-
-//go:build nopc
-
-package slog
-
-import "time"
-
-// LogDepth is like [Logger.Log], but accepts a call depth to adjust the
-// file and line number in the log record. 0 refers to the caller
-// of LogDepth; 1 refers to the caller's caller; and so on.
-func (l *Logger) LogDepth(calldepth int, level Level, msg string, args ...any) {
- if !l.Enabled(level) {
- return
- }
- l.logPC(nil, 0, level, msg, args...)
-}
-
-// LogAttrsDepth is like [Logger.LogAttrs], but accepts a call depth argument
-// which it interprets like [Logger.LogDepth].
-func (l *Logger) LogAttrsDepth(calldepth int, level Level, msg string, attrs ...Attr) {
- if !l.Enabled(level) {
- return
- }
- r := NewRecord(time.Now(), level, msg, 0, l.ctx)
- r.AddAttrs(attrs...)
- _ = l.Handler().Handle(r)
-}
-
-// logDepthErr is a trivial wrapper around logDepth, just to make the call
-// depths on all paths the same. This is important only for the defaultHandler,
-// which passes a fixed call depth to log.Output. When slog moves to the
-// standard library, we can replace that fixed call depth with logic based on
-// the Record's pc, and remove this function. See the comment on
-// TestConnections/wrap_default_handler.
-func (l *Logger) logDepthErr(err error, calldepth int, level Level, msg string, args ...any) {
- if !l.Enabled(level) {
- return
- }
- l.logPC(err, 0, level, msg, args...)
-}
-
-// callerPC returns 0 to avoid incurring the cost of runtime.Callers.
-func callerPC(depth int) uintptr { return 0 }