From 3182ff0bb9ca80af972040662fa4351cdffac521 Mon Sep 17 00:00:00 2001 From: Tyler Yahn Date: Mon, 23 May 2022 09:53:12 -0700 Subject: [PATCH] Add bench test for reader collect methods --- sdk/metric/manual_reader_test.go | 4 ++++ sdk/metric/periodic_reader_test.go | 6 ++++++ sdk/metric/reader_test.go | 25 +++++++++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/sdk/metric/manual_reader_test.go b/sdk/metric/manual_reader_test.go index 163ceb5f105..6ea83824a1c 100644 --- a/sdk/metric/manual_reader_test.go +++ b/sdk/metric/manual_reader_test.go @@ -26,3 +26,7 @@ import ( func TestManualReader(t *testing.T) { suite.Run(t, &readerTestSuite{Factory: NewManualReader}) } + +func BenchmarkManualReader(b *testing.B) { + b.Run("Collect", benchReaderCollectFunc(NewManualReader())) +} diff --git a/sdk/metric/periodic_reader_test.go b/sdk/metric/periodic_reader_test.go index 061c1ab7bdf..1dc42fb254e 100644 --- a/sdk/metric/periodic_reader_test.go +++ b/sdk/metric/periodic_reader_test.go @@ -178,3 +178,9 @@ func TestPeriodicReaderRun(t *testing.T) { // Ensure Reader is allowed clean up attempt. _ = r.Shutdown(context.Background()) } + +func BenchmarkPeriodicReader(b *testing.B) { + b.Run("Collect", benchReaderCollectFunc( + NewPeriodicReader(new(fnExporter)), + )) +} diff --git a/sdk/metric/reader_test.go b/sdk/metric/reader_test.go index 9462af36bfb..6ca9f94b5bd 100644 --- a/sdk/metric/reader_test.go +++ b/sdk/metric/reader_test.go @@ -20,6 +20,7 @@ package metric // import "go.opentelemetry.io/otel/sdk/metric/reader" import ( "context" "sync" + "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" @@ -153,3 +154,27 @@ func (p testProducer) produce(ctx context.Context) (export.Metrics, error) { } return testMetrics, nil } + +func benchReaderCollectFunc(r Reader) func(*testing.B) { + ctx := context.Background() + r.register(testProducer{}) + + // Store bechmark results in a closure to prevent the compiler from + // inlining and skipping the function. + var ( + collectedMetrics export.Metrics + err error + ) + + return func(b *testing.B) { + b.ReportAllocs() + b.ResetTimer() + + for n := 0; n < b.N; n++ { + collectedMetrics, err = r.Collect(ctx) + if collectedMetrics != testMetrics || err != nil { + b.Errorf("unexpected Collect response: (%#v, %v)", collectedMetrics, err) + } + } + } +}