Skip to content

Commit

Permalink
Better benchmarks
Browse files Browse the repository at this point in the history
  • Loading branch information
kalverra committed Jan 29, 2025
1 parent bea6e56 commit 06bcf2c
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 13 deletions.
13 changes: 8 additions & 5 deletions parrot/.changeset/v0.2.0.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
- Added wildcard routing support
- Improved routing performance
- Slight hit to routing performance
- Improved accuracy of benchmarking performance, which accounts for a large amount of the change

### Bench before

Expand All @@ -23,8 +24,10 @@ goos: darwin
goarch: arm64
pkg: github.com/smartcontractkit/chainlink-testing-framework/parrot
cpu: Apple M3 Max
BenchmarkRegisterRoute-14 3647503 313.8 ns/op
BenchmarkRouteResponse-14 19143 62011 ns/op
BenchmarkSave-14 5244 218697 ns/op
BenchmarkLoad-14 1101 1049399 ns/op
BenchmarkRegisterRoute-14 1496990 776.1 ns/op
BenchmarkRegisterWildCardRoute-14 815643 1304 ns/op
BenchmarkRouteResponse-14 19160 61309 ns/op
BenchmarkWildCardRouteResponse-14 19244 62320 ns/op
BenchmarkSave-14 5152 225593 ns/op
BenchmarkLoad-14 1023 1158700 ns/op
```
1 change: 0 additions & 1 deletion parrot/cage_benchmark_test.go

This file was deleted.

74 changes: 67 additions & 7 deletions parrot/parrot_benchmark_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,23 +26,54 @@ func BenchmarkRegisterRoute(b *testing.B) {
os.Remove(saveFile)
}()

route := &Route{
Method: "GET",
Path: "/bench",
RawResponseBody: "Benchmark Response",
ResponseStatusCode: http.StatusOK,
routes := make([]*Route, b.N)
for i := 0; i < b.N; i++ {
routes[i] = &Route{
Method: http.MethodGet,
Path: fmt.Sprintf("/bench%d", i),
RawResponseBody: "Benchmark Response",
ResponseStatusCode: http.StatusOK,
}
}

b.ResetTimer()
for i := 0; i < b.N; i++ {
err := p.Register(route)
err := p.Register(routes[i])
require.NoError(b, err)
}
b.StopTimer()
}

func BenchmarkRegisterWildCardRoute(b *testing.B) {
// TODO: Implement
saveFile := b.Name() + ".json"
p, err := Wake(WithLogLevel(testLogLevel), WithSaveFile(saveFile))
require.NoError(b, err)

defer func() { // Cleanup
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
err := p.Shutdown(ctx)
cancel()
require.NoError(b, err, "error shutting down parrot")
p.WaitShutdown()
os.Remove(saveFile)
}()

routes := make([]*Route, b.N)
for i := 0; i < b.N; i++ {
routes[i] = &Route{
Method: http.MethodGet,
Path: fmt.Sprintf("/wildcard/*/bench%d/*", i),
RawResponseBody: "Benchmark Response",
ResponseStatusCode: http.StatusOK,
}
}

b.ResetTimer()
for i := 0; i < b.N; i++ {
err := p.Register(routes[i])
require.NoError(b, err)
}
b.StopTimer()
}

func BenchmarkRouteResponse(b *testing.B) {
Expand Down Expand Up @@ -77,7 +108,36 @@ func BenchmarkRouteResponse(b *testing.B) {
}

func BenchmarkWildCardRouteResponse(b *testing.B) {
saveFile := b.Name() + ".json"
p, err := Wake(WithLogLevel(testLogLevel), WithSaveFile(saveFile))
require.NoError(b, err)

defer func() { // Cleanup
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
err := p.Shutdown(ctx)
cancel()
require.NoError(b, err, "error shutting down parrot")
p.WaitShutdown()
os.Remove(saveFile)
}()

route := &Route{
Method: "GET",
Path: "/wildcard/*/bench/*",
RawResponseBody: "Benchmark Response",
ResponseStatusCode: http.StatusOK,
}
err = p.Register(route)
require.NoError(b, err)

callPath := "/wildcard/123/bench/456"

b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err := p.Call(route.Method, callPath)
require.NoError(b, err)
}
b.StopTimer()
}

func BenchmarkSave(b *testing.B) {
Expand Down

0 comments on commit 06bcf2c

Please sign in to comment.