summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author LaMont Jones <lamontjones@google.com> 2024-12-10 12:34:24 -0800
committer LaMont Jones <lamontjones@google.com> 2024-12-10 13:54:49 -0800
commitb47760106f2d8acb17b786e3a5e444c3a11c4721 (patch)
tree9293394413077a0907946d7d95dbb4b50f359153
parentdd7ac83fdaae8b8f0b61ac4bae1cc3c258b9629b (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.go8
-rwxr-xr-x[-rw-r--r--]cmd/find_input_delta/find_input_delta_proto_internal/regen.sh0
-rw-r--r--cmd/soong_ui/main.go3
-rw-r--r--java/builder.go3
-rw-r--r--java/config/config.go1
-rw-r--r--java/kotlin.go3
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}",