...
1
2
3
4
5
6
7
8
9
10
11
12
13
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