From 0bacaaa7a3fd351cc57c808a36aaa7c56d1d37c3 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Wed, 4 May 2016 14:42:31 +0100 Subject: [PATCH] Add benchmark --- app/merger_test.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/app/merger_test.go b/app/merger_test.go index c57bbf9e9e..d29a15923e 100644 --- a/app/merger_test.go +++ b/app/merger_test.go @@ -1,6 +1,8 @@ package app_test import ( + "fmt" + "math/rand" "testing" "github.com/weaveworks/scope/app" @@ -65,3 +67,45 @@ func TestSmartMerger(t *testing.T) { t.Errorf("Bad merge: %s", test.Diff(have, want)) } } + +func BenchmarkSmartMerger(b *testing.B) { + benchmarMerger(b, app.NewSmartMerger()) +} + +func BenchmarkDumbMerger(b *testing.B) { + benchmarMerger(b, app.MakeDumbMerger()) +} + +const NUM_HOSTS = 15 + +func benchmarMerger(b *testing.B, merger app.Merger) { + makeReport := func() report.Report { + rpt := report.MakeReport() + for i := 0; i < 100; i++ { + rpt.Endpoint.AddNode(report.MakeNode(fmt.Sprintf("%x", rand.Int63()))) + } + return rpt + } + + reports := []report.Report{} + for i := 0; i < NUM_HOSTS*5; i++ { + reports = append(reports, makeReport()) + } + merger.Merge(reports) // prime the cache + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + b.StartTimer() + + // replace 1/3 of hosts work of reports & merge them all + for i := 0; i < NUM_HOSTS/3; i++ { + reports[rand.Intn(len(reports))] = makeReport() + } + + merger.Merge(reports) + + b.StopTimer() + } +}