@@ -39,7 +39,7 @@ func writeSweetConfiguration(filename string, tcs []*toolchain) error {
3939 return nil
4040}
4141
42- func sweet (tcs []* toolchain ) (err error ) {
42+ func sweet (tcs []* toolchain , pgo bool ) (err error ) {
4343 tmpDir , err := os .MkdirTemp ("" , "go-sweet" )
4444 if err != nil {
4545 return fmt .Errorf ("error creating temporary directory: %w" , err )
@@ -103,16 +103,20 @@ func sweet(tcs []*toolchain) (err error) {
103103 // Finally we can actually run the benchmarks.
104104 resultsDir := filepath .Join (tmpDir , "results" )
105105 workDir := filepath .Join (tmpDir , "work" )
106- cmd = exec . Command (
107- sweetBin , "run" ,
106+ sweetRunArgs := [] string {
107+ "run" ,
108108 "-run" , "default" ,
109109 "-count" , "10" ,
110110 "-bench-dir" , filepath .Join (sweetRoot , "benchmarks" ),
111111 "-cache" , assetsCacheDir ,
112112 "-work-dir" , workDir ,
113113 "-results" , resultsDir ,
114- confFile ,
115- )
114+ }
115+ if pgo {
116+ sweetRunArgs = append (sweetRunArgs , "-pgo" )
117+ }
118+ sweetRunArgs = append (sweetRunArgs , confFile )
119+ cmd = exec .Command (sweetBin , sweetRunArgs ... )
116120 cmd .Stdout = os .Stdout
117121 cmd .Stderr = os .Stderr
118122
@@ -129,29 +133,53 @@ func sweet(tcs []*toolchain) (err error) {
129133 }
130134 }()
131135
132- // Dump results to stdout.
136+ dumpResults := func (filename string ) error {
137+ // Print pkg and shortname tags because Sweet won't do it.
138+ benchName := filepath .Base (filepath .Dir (filename ))
139+ fmt .Printf ("pkg: golang.org/x/benchmarks/sweet/benchmarks/%s\n " , benchName )
140+ fmt .Printf ("shortname: sweet_%s\n " , strings .ReplaceAll (benchName , "-" , "_" ))
141+
142+ // Dump results file.
143+ f , err := os .Open (filename )
144+ if err != nil {
145+ return fmt .Errorf ("opening result %s: %v" , filename , err )
146+ }
147+ defer f .Close ()
148+ if _ , err := io .Copy (os .Stdout , f ); err != nil {
149+ return fmt .Errorf ("reading result %s: %v" , filename , err )
150+ }
151+ return nil
152+ }
153+
154+ // Dump non-PGO results to stdout.
155+ fmt .Printf ("pgo: off\n " )
133156 for _ , tc := range tcs {
134157 matches , err := filepath .Glob (filepath .Join (resultsDir , "*" , fmt .Sprintf ("%s.results" , tc .Name )))
135158 if err != nil {
136159 return fmt .Errorf ("searching for results for %s in %s: %v" , tc .Name , resultsDir , err )
137160 }
138161 fmt .Printf ("toolchain: %s\n " , tc .Name )
139162 for _ , match := range matches {
140- // Print pkg and shortname tags because Sweet won't do it.
141- benchName := filepath .Base (filepath .Dir (match ))
142- fmt .Printf ("pkg: golang.org/x/benchmarks/sweet/benchmarks/%s\n " , benchName )
143- fmt .Printf ("shortname: sweet_%s\n " , strings .ReplaceAll (benchName , "-" , "_" ))
163+ if err := dumpResults (match ); err != nil {
164+ return err
165+ }
166+ }
167+ }
144168
145- // Dump results file.
146- f , err := os .Open (match )
169+ // Dump PGO results to stdout, if we expect them to exist.
170+ if pgo {
171+ fmt .Printf ("pgo: on\n " )
172+ for _ , tc := range tcs {
173+ matches , err := filepath .Glob (filepath .Join (resultsDir , "*" , fmt .Sprintf ("%s.pgo.results" , tc .Name )))
147174 if err != nil {
148- return fmt .Errorf ("opening result %s : %v" , match , err )
175+ return fmt .Errorf ("searching for PGO results for %s in %s : %v" , tc . Name , resultsDir , err )
149176 }
150- if _ , err := io .Copy (os .Stdout , f ); err != nil {
151- f .Close ()
152- return fmt .Errorf ("reading result %s: %v" , match , err )
177+ fmt .Printf ("toolchain: %s\n " , tc .Name )
178+ for _ , match := range matches {
179+ if err := dumpResults (match ); err != nil {
180+ return err
181+ }
153182 }
154- f .Close ()
155183 }
156184 }
157185 return nil
0 commit comments