Merge "Allow profiling Soong from the full build" am: 2f213d0946 am: 516d6f6f6a am: 3ff7d3fe83

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2309616

Change-Id: I0b147c9fe4bd4a01967ab1bc838f2ed823226ced
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Alexander Smundak 2022-11-22 20:14:36 +00:00 committed by Automerger Merge Worker
commit 1203478671
2 changed files with 23 additions and 4 deletions

View file

@ -49,9 +49,22 @@ in the build graph will improve total build times.
### Soong ### Soong
Soong can be traced and profiled using the standard Go tools. It understands Soong proper (i.e., `soong_build` executable that processes the blueprint
the `-cpuprofile`, `-trace`, and `-memprofile` command line arguments, but we files) can be traced and profiled using the standard Go tools. It understands
don't currently have an easy way to enable them in the context of a full build. the `-trace`, `-cpuprofile`, and `-memprofile` command line arguments.
Setting `SOONG_PROFILE_CPU` and/or `SOONG_PROFILE_MEM` environment variables
for the build enables respective profiling, e.g., running
```shell
SOONG_PROFILE_CPU=/tmp/foo m ..._
```
saves CPU profile for each Soong invocation in /tmp/foo._step_ file, where
_step_ is Soong execution step. The main step is `build`. The others as
`bp2build_files`, `bp2build_workspace`, `modulegraph`, `queryview`,
`api_bp2build`, `soong_docs` (not all of them necessarily run during the build).
The profiles can be inspected with `go tool pprof` from the command line or
with _Run>Open Profiler Snapshot_ in IntelliJ IDEA.
### Kati ### Kati

View file

@ -195,6 +195,12 @@ func primaryBuilderInvocation(
allArgs = append(allArgs, commonArgs...) allArgs = append(allArgs, commonArgs...)
allArgs = append(allArgs, environmentArgs(config, name)...) allArgs = append(allArgs, environmentArgs(config, name)...)
if profileCpu := os.Getenv("SOONG_PROFILE_CPU"); profileCpu != "" {
allArgs = append(allArgs, "--cpuprofile", profileCpu+"."+name)
}
if profileMem := os.Getenv("SOONG_PROFILE_MEM"); profileMem != "" {
allArgs = append(allArgs, "--memprofile", profileMem+"."+name)
}
allArgs = append(allArgs, "Android.bp") allArgs = append(allArgs, "Android.bp")
return bootstrap.PrimaryBuilderInvocation{ return bootstrap.PrimaryBuilderInvocation{