Instead we only have a single exporter, and it must delegate behaviour
to any other exporters it wants to include.
This removes a whole collection of suprises caused by init functions adding
new exporters to a list, as well as generally making things faster, at the small
expense of needing to implement a custom exporter if you want to combine the
features of a few other exporters.
This is essentially the opposite of https://go-review.googlesource.com/c/tools/+/212243
which will now be abandoned in favor of this approach.
Change-Id: Icacb4c1f0f40f99ddd1d82c73d4f25a3486e56ce
Reviewed-on: https://go-review.googlesource.com/c/tools/+/220857
Run-TryBot: Ian Cottrell <iancottrell@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Reviewed-by: Robert Findley <rfindley@google.com>
Make all the benchmarks cleanly pass around the context to remove a non logging
difference.
Rename the non logging calls benchmark to Baseline
Change-Id: I24a33b0a817df403fb43c53b5f097bc1e9418af4
Reviewed-on: https://go-review.googlesource.com/c/tools/+/220520
Run-TryBot: Ian Cottrell <iancottrell@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Serves as a reference harness to get benchmarking started.
Steps to run benchmark:
$ go test -run=^$ -bench=. -count=10
After you grab the output, put the various comparisons
into files before.txt and after.txt then edit those
result names to have a common name e.g.
s/BenchmarkLoggingNoExporter/BenchmarkIt/g
s/BenchmarkNoTracingNoMetricsNoLogging/BenchmarkIt/g
s/BenchmarkLoggingStdlib/BenchmarkIt/g
Now run benchstat:
* All compared
$ benchstat no_log.txt tellog.txt stdlog.txt
name \ time/op no_log.txt tellog.txt stdlog.txt
It-8 289ns ± 2% 2780ns ± 3% 5100ns ± 3%
name \ alloc/op no_log.txt tellog.txt stdlog.txt
It-8 80.0B ± 0% 728.0B ± 0% 568.0B ± 0%
name \ allocs/op no_log.txt tellog.txt stdlog.txt
It-8 5.00 ± 0% 32.00 ± 0% 28.00 ± 0%
* No logging vs telemetry log
$ benchstat no_log.txt tellog.txt
name old time/op new time/op delta
It-8 289ns ± 2% 2780ns ± 3% +862.31% (p=0.000 n=10+9)
name old alloc/op new alloc/op delta
It-8 80.0B ± 0% 728.0B ± 0% +810.00% (p=0.000 n=10+10)
name old allocs/op new allocs/op delta
It-8 5.00 ± 0% 32.00 ± 0% +540.00% (p=0.000 n=10+10)
* No logging vs Standard library "log"
$ benchstat no_log.txt stdlog.txt
name old time/op new time/op delta
It-8 289ns ± 2% 5100ns ± 3% +1665.16% (p=0.000 n=10+9)
name old alloc/op new alloc/op delta
It-8 80.0B ± 0% 568.0B ± 0% +610.00% (p=0.000 n=10+10)
name old allocs/op new allocs/op delta
It-8 5.00 ± 0% 28.00 ± 0% +460.00% (p=0.000 n=10+10)
* telemetry log vs Standard library "log"
$ benchstat tellog.txt stdlog.txt
name old time/op new time/op delta
It-8 2.78µs ± 3% 5.10µs ± 3% +83.43% (p=0.000 n=9+9)
name old alloc/op new alloc/op delta
It-8 728B ± 0% 568B ± 0% -21.98% (p=0.000 n=10+10)
name old allocs/op new allocs/op delta
It-8 32.0 ± 0% 28.0 ± 0% -12.50% (p=0.000 n=10+10)
Change-Id: I53b15e9da315615278c576f3a60108435417a9f7
Reviewed-on: https://go-review.googlesource.com/c/tools/+/212078
Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
this shuffles things so there a single exporter API rather than an observer
It also removes most of the globals.
per telemetry type.
Change-Id: Iaa82abe2ded1fff9df8e067ed4a55bcbd9d9591f
Reviewed-on: https://go-review.googlesource.com/c/tools/+/190405
Run-TryBot: Ian Cottrell <iancottrell@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
This is a straight move of some code with no changes.
It splits the part of the telemetry code that will become a standalone library from the bit that belongs in the lsp.
Change-Id: Icedb6bf1f3711da9251450531729984df6df7787
Reviewed-on: https://go-review.googlesource.com/c/tools/+/190403
Run-TryBot: Ian Cottrell <iancottrell@google.com>
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>