/
csv_renderer.go
48 lines (36 loc) · 1.13 KB
/
csv_renderer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package go_benchpress
import (
"encoding/csv"
"fmt"
"golang.org/x/tools/benchmark/parse"
"io"
"strconv"
)
type CSVRenderer struct {
}
func (c *CSVRenderer) Render(writer io.Writer, parentBenchmark string, dimension RenderDimension, benchmarks []parse.Benchmark) error {
csvWriter := csv.NewWriter(writer)
// Write header
header := []string{"Name", "N", "NsPerOp", "AllocedBytesPerOp", "AllocsPerOp", "MBPerS", "Measured", "Ord"}
err := csvWriter.Write(header)
if err != nil {
return err
}
// Write records
for _, benchmark := range benchmarks {
n := strconv.Itoa(benchmark.N)
nsPerOp := fmt.Sprintf("%.12f", benchmark.NsPerOp)
allocedBytesPerOp := strconv.FormatUint(benchmark.AllocedBytesPerOp, 10)
allocsPerOp := strconv.FormatUint(benchmark.AllocsPerOp, 10)
mbPerS := fmt.Sprintf("%.12f", benchmark.MBPerS)
measured := strconv.Itoa(benchmark.Measured)
ord := strconv.Itoa(benchmark.Ord)
record := []string{benchmark.Name, n, nsPerOp, allocedBytesPerOp, allocsPerOp, mbPerS, measured, ord}
err := csvWriter.Write(record)
if err != nil {
return err
}
}
csvWriter.Flush()
return csvWriter.Error()
}