mirror of
https://github.com/grafana/grafana.git
synced 2025-07-29 16:02:43 +08:00
46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
package converter
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
jsoniter "github.com/json-iterator/go"
|
|
)
|
|
|
|
// readTestData reads a JSON file from testdata directory
|
|
func readTestData(t *testing.B, filename string) []byte {
|
|
// Can ignore gosec G304 here, because this is a constant defined below benchmark test
|
|
// nolint:gosec
|
|
data, err := os.ReadFile("testdata/" + filename)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return data
|
|
}
|
|
|
|
// BenchmarkReadPrometheusStyleResult_FromFile benchmarks processing different test files
|
|
// go test -benchmem -run=^$ -bench=BenchmarkReadPrometheusStyleResult_FromFile$ github.com/grafana/grafana/pkg/promlib/converter/ -memprofile pmem.out -count 6 | tee pmem.0.txt
|
|
func BenchmarkReadPrometheusStyleResult_FromFile(b *testing.B) {
|
|
testFiles := []string{
|
|
"prom-query-range.json",
|
|
"prom-query-range-big.json",
|
|
"prom-matrix-histogram-partitioned.json",
|
|
}
|
|
|
|
opt := Options{}
|
|
|
|
for _, tf := range testFiles {
|
|
testData := readTestData(b, tf)
|
|
iter := jsoniter.ParseBytes(jsoniter.ConfigDefault, testData)
|
|
|
|
b.Run(tf, func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
_ = ReadPrometheusStyleResult(iter, opt)
|
|
iter.ResetBytes(testData)
|
|
}
|
|
})
|
|
}
|
|
}
|