-
Notifications
You must be signed in to change notification settings - Fork 156
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
extract multiple metrics from golang benchmarks #119
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -8,10 +8,12 @@ func BenchmarkFib10(b *testing.B) { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
for i := 0; i < b.N; i++ { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var _ = Fib(10) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
b.ReportMetric(3.0, "auxMetricUnits") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
func BenchmarkFib20(b *testing.B) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
for i := 0; i < b.N; i++ { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var _ = Fib(20) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
b.ReportMetric(4.0, "auxMetricUnits") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
8
to
19
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would actually suggest creating a third benchmark function that reports additional metrics instead of modifying the existing ones
Suggested change
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -345,7 +345,13 @@ function extractGoResult(output: string): BenchmarkResult[] { | |
// Example: | ||
// BenchmarkFib20-8 30000 41653 ns/op | ||
// BenchmarkDoWithConfigurer1-8 30000000 42.3 ns/op | ||
const reExtract = /^(Benchmark\w+(?:\/?[\w()$%^&*-]*?)*?)(-\d+)?\s+(\d+)\s+([0-9.]+)\s+(.+)$/; | ||
// Example if someone has used the ReportMetric function to add additional metrics to each benchmark: | ||
// BenchmarkThing-16 1 95258906556 ns/op 64.02 UnitsForMeasure2 31.13 UnitsForMeasure3 | ||
|
||
// reference, "Proposal: Go Benchmark Data Format": https://go.googlesource.com/proposal/+/master/design/14313-benchmark-format.md | ||
// "A benchmark result line has the general form: <name> <iterations> <value> <unit> [<value> <unit>...]" | ||
// "The fields are separated by runs of space characters (as defined by unicode.IsSpace), so the line can be parsed with strings.Fields. The line must have an even number of fields, and at least four." | ||
const reExtract = /^(Benchmark\w+(?:\/?[\w()$%^&*-]*?)*?)(-\d+)?\s+(\d+)\s+(.+)$/; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You've changed this regexp quite significantly. Could you explain a bit why is this so? I thought the metrics might appear at the end of the currently handled cases so this shorter regexp is a little surprising. If you've found a way to simplify it then great but a little explanation would go a long way :) Additionally, could we use named capture groups (link so it's easier to understand the parts of the regular expression |
||
|
||
for (const line of lines) { | ||
const m = line.match(reExtract); | ||
|
@@ -356,15 +362,18 @@ function extractGoResult(output: string): BenchmarkResult[] { | |
const name = m[1]; | ||
const procs = m[2] !== undefined ? m[2].slice(1) : null; | ||
const times = m[3]; | ||
const value = parseFloat(m[4]); | ||
const unit = m[5]; | ||
const remainder = m[4]; | ||
|
||
let extra = `${times} times`; | ||
if (procs !== null) { | ||
extra += `\n${procs} procs`; | ||
const pieces = remainder.split(/[ \t]+/); | ||
for (let i = 0; i < pieces.length; i = i + 2) { | ||
let extra = `${times} times`.replace(/\s\s+/g, ' '); | ||
if (procs !== null) { | ||
extra += `\n${procs} procs`; | ||
} | ||
const value = parseFloat(pieces[i]); | ||
const unit = pieces[i + 1]; | ||
ret.push({ name, value, unit, extra }); | ||
} | ||
|
||
ret.push({ name, value, unit, extra }); | ||
} | ||
|
||
return ret; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we depend on a specific version of Go for this feature to work? Maybe it's worth upgrading the
actions/setup-go
to v4 and usinggo-version: 'stable'
?