github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/module/trace/trace_test.go (about)

     1  package trace
     2  
     3  import (
     4  	"context"
     5  	"crypto/rand"
     6  	"testing"
     7  
     8  	"github.com/rs/zerolog"
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/onflow/flow-go/model/flow"
    12  )
    13  
    14  func BenchmarkStartSpanFromParent(b *testing.B) {
    15  	tracer, err := NewTracer(zerolog.Logger{}, "test", string(flow.Localnet), 0)
    16  	require.NoError(b, err)
    17  
    18  	tracer.Ready()
    19  	defer tracer.Done()
    20  
    21  	span, _ := tracer.StartBlockSpan(context.Background(), flow.Identifier{}, "test")
    22  	defer span.End()
    23  
    24  	b.ResetTimer()
    25  	for i := 0; i < b.N; i++ {
    26  		s := tracer.StartSpanFromParent(span, SpanName("test"))
    27  		s.End()
    28  	}
    29  	b.StopTimer()
    30  }
    31  
    32  func BenchmarkStartBlockSpan(b *testing.B) {
    33  	tracer, err := NewTracer(zerolog.Logger{}, "test", string(flow.Localnet), 0)
    34  	require.NoError(b, err)
    35  
    36  	tracer.Ready()
    37  	defer tracer.Done()
    38  
    39  	for _, t := range []struct {
    40  		name string
    41  		n    int
    42  	}{
    43  		{name: "cacheHit", n: 100},
    44  		{name: "cacheMiss", n: 100000},
    45  	} {
    46  		t := t
    47  		b.Run(t.name, func(b *testing.B) {
    48  			randomIDs := make([]flow.Identifier, 0, t.n)
    49  			for i := 0; i < t.n; i++ {
    50  				var randomBytes [flow.IdentifierLen]byte
    51  				_, err := rand.Read(randomBytes[:])
    52  				require.NoError(b, err)
    53  				randomIDs = append(randomIDs, flow.Identifier(randomBytes))
    54  			}
    55  
    56  			b.ResetTimer()
    57  			for i := 0; i < b.N; i++ {
    58  				span, _ := tracer.StartBlockSpan(context.Background(), randomIDs[i%t.n], "test")
    59  				span.End()
    60  			}
    61  			b.StopTimer()
    62  		})
    63  	}
    64  }