...

Source file src/go.opentelemetry.io/otel/sdk/resource/benchmark_test.go

Documentation: go.opentelemetry.io/otel/sdk/resource

     1  // Copyright The OpenTelemetry Authors
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package resource_test
    16  
    17  import (
    18  	"fmt"
    19  	"math/rand"
    20  	"testing"
    21  
    22  	"go.opentelemetry.io/otel/attribute"
    23  	"go.opentelemetry.io/otel/sdk/resource"
    24  )
    25  
    26  const conflict = 0.5
    27  
    28  func makeAttrs(n int) (_, _ *resource.Resource) {
    29  	used := map[string]bool{}
    30  	l1 := make([]attribute.KeyValue, n)
    31  	l2 := make([]attribute.KeyValue, n)
    32  	for i := 0; i < n; i++ {
    33  		var k string
    34  		for {
    35  			k = fmt.Sprint("k", rand.Intn(1000000000))
    36  			if !used[k] {
    37  				used[k] = true
    38  				break
    39  			}
    40  		}
    41  		l1[i] = attribute.String(k, fmt.Sprint("v", rand.Intn(1000000000)))
    42  
    43  		if rand.Float64() < conflict {
    44  			l2[i] = l1[i]
    45  		} else {
    46  			l2[i] = attribute.String(k, fmt.Sprint("v", rand.Intn(1000000000)))
    47  		}
    48  	}
    49  	return resource.NewSchemaless(l1...), resource.NewSchemaless(l2...)
    50  }
    51  
    52  func benchmarkMergeResource(b *testing.B, size int) {
    53  	r1, r2 := makeAttrs(size)
    54  
    55  	b.ReportAllocs()
    56  	b.ResetTimer()
    57  
    58  	for i := 0; i < b.N; i++ {
    59  		_, _ = resource.Merge(r1, r2)
    60  	}
    61  }
    62  
    63  func BenchmarkMergeResource_1(b *testing.B) {
    64  	benchmarkMergeResource(b, 1)
    65  }
    66  
    67  func BenchmarkMergeResource_2(b *testing.B) {
    68  	benchmarkMergeResource(b, 2)
    69  }
    70  
    71  func BenchmarkMergeResource_3(b *testing.B) {
    72  	benchmarkMergeResource(b, 3)
    73  }
    74  
    75  func BenchmarkMergeResource_4(b *testing.B) {
    76  	benchmarkMergeResource(b, 4)
    77  }
    78  
    79  func BenchmarkMergeResource_6(b *testing.B) {
    80  	benchmarkMergeResource(b, 6)
    81  }
    82  
    83  func BenchmarkMergeResource_8(b *testing.B) {
    84  	benchmarkMergeResource(b, 8)
    85  }
    86  
    87  func BenchmarkMergeResource_16(b *testing.B) {
    88  	benchmarkMergeResource(b, 16)
    89  }
    90  

View as plain text