Skip to content

Commit 06bcf2c

Browse files
committed
Better benchmarks
1 parent bea6e56 commit 06bcf2c

File tree

3 files changed

+75
-13
lines changed

3 files changed

+75
-13
lines changed

parrot/.changeset/v0.2.0.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
- Added wildcard routing support
2-
- Improved routing performance
2+
- Slight hit to routing performance
3+
- Improved accuracy of benchmarking performance, which accounts for a large amount of the change
34

45
### Bench before
56

@@ -23,8 +24,10 @@ goos: darwin
2324
goarch: arm64
2425
pkg: github.com/smartcontractkit/chainlink-testing-framework/parrot
2526
cpu: Apple M3 Max
26-
BenchmarkRegisterRoute-14 3647503 313.8 ns/op
27-
BenchmarkRouteResponse-14 19143 62011 ns/op
28-
BenchmarkSave-14 5244 218697 ns/op
29-
BenchmarkLoad-14 1101 1049399 ns/op
27+
BenchmarkRegisterRoute-14 1496990 776.1 ns/op
28+
BenchmarkRegisterWildCardRoute-14 815643 1304 ns/op
29+
BenchmarkRouteResponse-14 19160 61309 ns/op
30+
BenchmarkWildCardRouteResponse-14 19244 62320 ns/op
31+
BenchmarkSave-14 5152 225593 ns/op
32+
BenchmarkLoad-14 1023 1158700 ns/op
3033
```

parrot/cage_benchmark_test.go

Lines changed: 0 additions & 1 deletion
This file was deleted.

parrot/parrot_benchmark_test.go

Lines changed: 67 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,23 +26,54 @@ func BenchmarkRegisterRoute(b *testing.B) {
2626
os.Remove(saveFile)
2727
}()
2828

29-
route := &Route{
30-
Method: "GET",
31-
Path: "/bench",
32-
RawResponseBody: "Benchmark Response",
33-
ResponseStatusCode: http.StatusOK,
29+
routes := make([]*Route, b.N)
30+
for i := 0; i < b.N; i++ {
31+
routes[i] = &Route{
32+
Method: http.MethodGet,
33+
Path: fmt.Sprintf("/bench%d", i),
34+
RawResponseBody: "Benchmark Response",
35+
ResponseStatusCode: http.StatusOK,
36+
}
3437
}
3538

3639
b.ResetTimer()
3740
for i := 0; i < b.N; i++ {
38-
err := p.Register(route)
41+
err := p.Register(routes[i])
3942
require.NoError(b, err)
4043
}
4144
b.StopTimer()
4245
}
4346

4447
func BenchmarkRegisterWildCardRoute(b *testing.B) {
45-
// TODO: Implement
48+
saveFile := b.Name() + ".json"
49+
p, err := Wake(WithLogLevel(testLogLevel), WithSaveFile(saveFile))
50+
require.NoError(b, err)
51+
52+
defer func() { // Cleanup
53+
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
54+
err := p.Shutdown(ctx)
55+
cancel()
56+
require.NoError(b, err, "error shutting down parrot")
57+
p.WaitShutdown()
58+
os.Remove(saveFile)
59+
}()
60+
61+
routes := make([]*Route, b.N)
62+
for i := 0; i < b.N; i++ {
63+
routes[i] = &Route{
64+
Method: http.MethodGet,
65+
Path: fmt.Sprintf("/wildcard/*/bench%d/*", i),
66+
RawResponseBody: "Benchmark Response",
67+
ResponseStatusCode: http.StatusOK,
68+
}
69+
}
70+
71+
b.ResetTimer()
72+
for i := 0; i < b.N; i++ {
73+
err := p.Register(routes[i])
74+
require.NoError(b, err)
75+
}
76+
b.StopTimer()
4677
}
4778

4879
func BenchmarkRouteResponse(b *testing.B) {
@@ -77,7 +108,36 @@ func BenchmarkRouteResponse(b *testing.B) {
77108
}
78109

79110
func BenchmarkWildCardRouteResponse(b *testing.B) {
111+
saveFile := b.Name() + ".json"
112+
p, err := Wake(WithLogLevel(testLogLevel), WithSaveFile(saveFile))
113+
require.NoError(b, err)
114+
115+
defer func() { // Cleanup
116+
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
117+
err := p.Shutdown(ctx)
118+
cancel()
119+
require.NoError(b, err, "error shutting down parrot")
120+
p.WaitShutdown()
121+
os.Remove(saveFile)
122+
}()
80123

124+
route := &Route{
125+
Method: "GET",
126+
Path: "/wildcard/*/bench/*",
127+
RawResponseBody: "Benchmark Response",
128+
ResponseStatusCode: http.StatusOK,
129+
}
130+
err = p.Register(route)
131+
require.NoError(b, err)
132+
133+
callPath := "/wildcard/123/bench/456"
134+
135+
b.ResetTimer()
136+
for i := 0; i < b.N; i++ {
137+
_, err := p.Call(route.Method, callPath)
138+
require.NoError(b, err)
139+
}
140+
b.StopTimer()
81141
}
82142

83143
func BenchmarkSave(b *testing.B) {

0 commit comments

Comments
 (0)