mirror of
https://github.com/weaveworks/scope.git
synced 2026-02-14 18:09:59 +00:00
Remove slower mergers
This commit is contained in:
@@ -75,7 +75,7 @@ func BenchmarkReportMerge(b *testing.B) {
|
||||
func getReport(b *testing.B) report.Report {
|
||||
r := fixture.Report
|
||||
if *benchReportPath != "" {
|
||||
r = NewSmartMerger().Merge(upgradeReports(readReportFiles(b, *benchReportPath)))
|
||||
r = NewFastMerger().Merge(upgradeReports(readReportFiles(b, *benchReportPath)))
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
@@ -13,54 +13,6 @@ type Merger interface {
|
||||
Merge([]report.Report) report.Report
|
||||
}
|
||||
|
||||
type dumbMerger struct{}
|
||||
|
||||
// MakeDumbMerger makes a Merger which merges together reports in the simplest possible way.
|
||||
func MakeDumbMerger() Merger {
|
||||
return dumbMerger{}
|
||||
}
|
||||
|
||||
func (dumbMerger) Merge(reports []report.Report) report.Report {
|
||||
rpt := report.MakeReport()
|
||||
id := murmur3.New64()
|
||||
for _, r := range reports {
|
||||
rpt = rpt.Merge(r)
|
||||
id.Write([]byte(r.ID))
|
||||
}
|
||||
rpt.ID = fmt.Sprintf("%x", id.Sum64())
|
||||
return rpt
|
||||
}
|
||||
|
||||
type smartMerger struct{}
|
||||
|
||||
// NewSmartMerger makes a Merger which merges reports in
|
||||
// parallel. Speed up comes from the fact that a) most merges are
|
||||
// between small reports, and b) we take advantage of available cores.
|
||||
func NewSmartMerger() Merger {
|
||||
return smartMerger{}
|
||||
}
|
||||
|
||||
func (smartMerger) Merge(reports []report.Report) report.Report {
|
||||
l := len(reports)
|
||||
switch l {
|
||||
case 0:
|
||||
return report.MakeReport()
|
||||
case 1:
|
||||
return reports[0]
|
||||
}
|
||||
c := make(chan report.Report, l)
|
||||
for _, r := range reports {
|
||||
c <- r
|
||||
}
|
||||
for ; l > 1; l-- {
|
||||
left, right := <-c, <-c
|
||||
go func() {
|
||||
c <- left.Merge(right)
|
||||
}()
|
||||
}
|
||||
return <-c
|
||||
}
|
||||
|
||||
type fastMerger struct{}
|
||||
|
||||
// NewFastMerger makes a Merger which merges together reports, mutating the one we are building up
|
||||
|
||||
@@ -27,7 +27,7 @@ func TestMerger(t *testing.T) {
|
||||
want.Endpoint.AddNode(report.MakeNode("bar"))
|
||||
want.Endpoint.AddNode(report.MakeNode("baz"))
|
||||
|
||||
for _, merger := range []app.Merger{app.MakeDumbMerger(), app.NewSmartMerger()} {
|
||||
for _, merger := range []app.Merger{app.NewFastMerger()} {
|
||||
// Test the empty list case
|
||||
if have := merger.Merge([]report.Report{}); !reflect.DeepEqual(have, report.MakeReport()) {
|
||||
t.Errorf("Bad merge: %s", test.Diff(have, want))
|
||||
@@ -44,14 +44,6 @@ func TestMerger(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkSmartMerger(b *testing.B) {
|
||||
benchmarkMerger(b, app.NewSmartMerger())
|
||||
}
|
||||
|
||||
func BenchmarkDumbMerger(b *testing.B) {
|
||||
benchmarkMerger(b, app.MakeDumbMerger())
|
||||
}
|
||||
|
||||
func BenchmarkFastMerger(b *testing.B) {
|
||||
benchmarkMerger(b, app.NewFastMerger())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user