in funcbench/bench.go [84:117]
func (b *Benchmarker) exec(pkgRoot string, commit plumbing.Hash) (string, error) {
fileName, err := b.benchOutFileName(commit)
if err != nil {
return "", err
}
if _, err := os.ReadFile(filepath.Join(b.resultCacheDir, fileName)); err == nil {
fmt.Println("Found previous results for ", fileName, b.benchFunc, "Reusing.")
return filepath.Join(b.resultCacheDir, fileName), nil
}
// TODO Switch working directory before entering this function.
benchCmd := []string{"sh", "-c", strings.Join(append([]string{"cd", pkgRoot, "&&"}, b.benchmarkArgs...), " ")}
b.logger.Println("Executing benchmark command for", commit.String(), "\n", benchCmd)
if b.enablePerflock {
benchCmd = append([]string{"perflock"}, benchCmd...)
}
out, err := b.c.exec(benchCmd...)
if err != nil {
return "", errors.Wrap(err, "benchmark ended with an error.")
}
fn := filepath.Join(b.resultCacheDir, fileName)
if b.resultCacheDir != "" {
if err := os.MkdirAll(b.resultCacheDir, os.ModePerm); err != nil {
return "", err
}
}
if err := os.WriteFile(fn, []byte(out), os.ModePerm); err != nil {
return "", err
}
return fn, nil
}