diff options
author | 2024-12-10 12:34:24 -0800 | |
---|---|---|
committer | 2024-12-10 13:54:49 -0800 | |
commit | b47760106f2d8acb17b786e3a5e444c3a11c4721 (patch) | |
tree | 9293394413077a0907946d7d95dbb4b50f359153 | |
parent | dd7ac83fdaae8b8f0b61ac4bae1cc3c258b9629b (diff) |
Collect file delta metrics for java and kotlin compiles
- Update the kotlinc and javac build rules to generate changed file
metrics.
- Upload the aggregated metrics at build completion.
- Also fixes parsing of --inputs_file and --target to be consistent with
existing use cases.
Bug: b/365537477
Test: manual, TH
Change-Id: I48efe06917baa98081e18b6351b63a624b55dba8
-rw-r--r-- | cmd/find_input_delta/find_input_delta/main.go | 8 | ||||
-rwxr-xr-x[-rw-r--r--] | cmd/find_input_delta/find_input_delta_proto_internal/regen.sh | 0 | ||||
-rw-r--r-- | cmd/soong_ui/main.go | 3 | ||||
-rw-r--r-- | java/builder.go | 3 | ||||
-rw-r--r-- | java/config/config.go | 1 | ||||
-rw-r--r-- | java/kotlin.go | 3 |
6 files changed, 14 insertions, 4 deletions
diff --git a/cmd/find_input_delta/find_input_delta/main.go b/cmd/find_input_delta/find_input_delta/main.go index 036b239d0..65ef88145 100644 --- a/cmd/find_input_delta/find_input_delta/main.go +++ b/cmd/find_input_delta/find_input_delta/main.go @@ -17,11 +17,13 @@ package main import ( "flag" "os" - "strings" + "regexp" fid_lib "android/soong/cmd/find_input_delta/find_input_delta_lib" ) +var fileSepRegex = regexp.MustCompile("[^[:space:]]+") + func main() { var top string var prior_state_file string @@ -46,6 +48,8 @@ func main() { if target == "" { panic("must specify --target") } + // Drop any extra file names that arrived in `target`. + target = fileSepRegex.FindString(target) if prior_state_file == "" { prior_state_file = target + ".pc_state" } @@ -63,7 +67,7 @@ func main() { if err != nil { panic(err) } - inputs = append(inputs, strings.Split(string(data), "\n")...) + inputs = append(inputs, fileSepRegex.FindAllString(string(data), -1)...) } // Read the prior state diff --git a/cmd/find_input_delta/find_input_delta_proto_internal/regen.sh b/cmd/find_input_delta/find_input_delta_proto_internal/regen.sh index cbaf7d056..cbaf7d056 100644..100755 --- a/cmd/find_input_delta/find_input_delta_proto_internal/regen.sh +++ b/cmd/find_input_delta/find_input_delta_proto_internal/regen.sh diff --git a/cmd/soong_ui/main.go b/cmd/soong_ui/main.go index 972179422..c119823cd 100644 --- a/cmd/soong_ui/main.go +++ b/cmd/soong_ui/main.go @@ -215,8 +215,7 @@ func main() { emet.Dump(executionMetricsFile, args) // If there are execution metrics, upload them. if _, err := os.Stat(executionMetricsFile); err == nil { - // TODO: Upload the metrics file. - // metricsFiles = append(metricsFiles, executionMetricsFile) + metricsFiles = append(metricsFiles, executionMetricsFile) } if !config.SkipMetricsUpload() { build.UploadMetrics(buildCtx, config, c.simpleOutput, buildStarted, metricsFiles...) diff --git a/java/builder.go b/java/builder.go index 895ddb6f9..01fbbddf5 100644 --- a/java/builder.go +++ b/java/builder.go @@ -46,6 +46,7 @@ var ( `mkdir -p "$outDir" "$annoDir" "$srcJarDir" && ` + `${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` + `(if [ -s $srcJarDir/list ] || [ -s $out.rsp ] ; then ` + + `${config.FindInputDeltaCmd} --template '' --target "$out" --inputs_file "$out.rsp" && ` + `${config.SoongJavacWrapper} $javaTemplate${config.JavacCmd} ` + `${config.JavacHeapFlags} ${config.JavacVmFlags} ${config.CommonJdkFlags} ` + `$processorpath $processor $javacFlags $bootClasspath $classpath ` + @@ -55,8 +56,10 @@ var ( `$zipTemplate${config.SoongZipCmd} -jar -o $out.tmp -C $outDir -D $outDir && ` + `if ! cmp -s "$out.tmp" "$out"; then mv "$out.tmp" "$out"; fi && ` + `if ! cmp -s "$annoSrcJar.tmp" "$annoSrcJar"; then mv "$annoSrcJar.tmp" "$annoSrcJar"; fi && ` + + `if [[ -f "$out.pc_state.new" ]]; then mv "$out.pc_state.new" "$out.pc_state"; fi && ` + `rm -rf "$srcJarDir" "$outDir"`, CommandDeps: []string{ + "${config.FindInputDeltaCmd}", "${config.JavacCmd}", "${config.SoongZipCmd}", "${config.ZipSyncCmd}", diff --git a/java/config/config.go b/java/config/config.go index 87703d821..7c29722a2 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -159,6 +159,7 @@ func init() { pctx.SourcePathVariable("ResourceProcessorBusyBox", "prebuilts/bazel/common/android_tools/android_tools/all_android_tools_deploy.jar") pctx.HostBinToolVariable("GenKotlinBuildFileCmd", "gen-kotlin-build-file") + pctx.HostBinToolVariable("FindInputDeltaCmd", "find_input_delta") pctx.SourcePathVariable("JarArgsCmd", "build/soong/scripts/jar-args.sh") pctx.SourcePathVariable("PackageCheckCmd", "build/soong/scripts/package-check.sh") diff --git a/java/kotlin.go b/java/kotlin.go index f42d16304..e1a3f71a3 100644 --- a/java/kotlin.go +++ b/java/kotlin.go @@ -181,6 +181,7 @@ var kaptStubs = pctx.AndroidRemoteStaticRule("kaptStubs", android.RemoteRuleSupp Command: `rm -rf "$srcJarDir" "$kotlinBuildFile" "$kaptDir" && ` + `mkdir -p "$srcJarDir" "$kaptDir/sources" "$kaptDir/classes" && ` + `${config.ZipSyncCmd} -d $srcJarDir -l $srcJarDir/list -f "*.java" $srcJars && ` + + `${config.FindInputDeltaCmd} --template '' --target "$out" --inputs_file "$out.rsp" && ` + `${config.GenKotlinBuildFileCmd} --classpath "$classpath" --name "$name"` + ` --srcs "$out.rsp" --srcs "$srcJarDir/list"` + ` $commonSrcFilesArg --out "$kotlinBuildFile" && ` + @@ -197,8 +198,10 @@ var kaptStubs = pctx.AndroidRemoteStaticRule("kaptStubs", android.RemoteRuleSupp `$kaptProcessor ` + `-Xbuild-file=$kotlinBuildFile && ` + `${config.SoongZipCmd} -jar -write_if_changed -o $out -C $kaptDir/stubs -D $kaptDir/stubs && ` + + `if [[ -f "$out.pc_state.new" ]]; then mv "$out.pc_state.new" "$out.pc_state"; fi && ` + `rm -rf "$srcJarDir"`, CommandDeps: []string{ + "${config.FindInputDeltaCmd}", "${config.KotlincCmd}", "${config.KotlinCompilerJar}", "${config.KotlinKaptJar}", |