| # Test go build -pgo flag. |
| # Specifically, the build cache handles profile content correctly. |
| |
| # this test rebuild runtime with different flags, skip in short mode |
| [short] skip |
| |
| # build without PGO |
| go build triv.go |
| |
| # build with PGO, should trigger rebuild |
| # starting with an empty profile (the compiler accepts it) |
| go build -x -pgo=prof triv.go |
| stderr 'compile.*-pgoprofile=.*prof.*triv.go' |
| |
| # store the build ID |
| go list -export -json=BuildID -pgo=prof triv.go |
| stdout '"BuildID":' # check that output actually contains a build ID |
| cp stdout list.out |
| |
| # build again with the same profile, should be cached |
| go build -x -pgo=prof triv.go |
| ! stderr 'compile.*triv.go' |
| |
| # check that the build ID is the same |
| go list -export -json=BuildID -pgo=prof triv.go |
| cmp stdout list.out |
| |
| # overwrite the prof |
| go run overwrite.go |
| |
| # build again, profile content changed, should trigger rebuild |
| go build -n -pgo=prof triv.go |
| stderr 'compile.*-pgoprofile=.*prof.*p.go' |
| |
| # check that the build ID is different |
| go list -export -json=BuildID -pgo=prof triv.go |
| ! cmp stdout list.out |
| |
| -- prof -- |
| -- triv.go -- |
| package main |
| func main() {} |
| -- overwrite.go -- |
| package main |
| |
| import ( |
| "os" |
| "runtime/pprof" |
| ) |
| |
| func main() { |
| f, err := os.Create("prof") |
| if err != nil { |
| panic(err) |
| } |
| err = pprof.StartCPUProfile(f) |
| if err != nil { |
| panic(err) |
| } |
| pprof.StopCPUProfile() |
| f.Close() |
| } |