aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2019-02-21 14:58:58 -0800
committerLuca Stefani <luca.stefani.ge1@gmail.com>2019-03-01 11:58:32 +0100
commitef83e2fb6b7f41da3615d585588ee1bf0bc8f2c7 (patch)
tree3c35d54524d09ef4b71b784c2adc825f477ae854
parent1c272bea6f81eb5ee0a64df9581262262532ed71 (diff)
downloadbuild_soong-ef83e2fb6b7f41da3615d585588ee1bf0bc8f2c7.tar.gz
build_soong-ef83e2fb6b7f41da3615d585588ee1bf0bc8f2c7.tar.bz2
build_soong-ef83e2fb6b7f41da3615d585588ee1bf0bc8f2c7.zip
Optimize CPU time when running d8, r8, dx and desugar
Pass -XX:+TieredCompilation -XX:TieredStopAtLevel=1 to the JVM to reduce the time spent JITing, which in local experiments reduced the CPU time of R8 while increasing the wall time, and reduced the total number of runnable threads. Without the new flags: $ time out/soong/host/linux-x86/bin/r8-compat-proguard -injars out/target/common/obj/APPS/Dialer_intermediates/classes.jar ... real 0m30.090s user 4m35.337s sys 0m12.853s With the new flags: $ time out/soong/host/linux-x86/bin/r8-compat-proguard -JXX:+TieredCompilation -JXX:TieredStopAtLevel=1 -injars out/target/common/obj/APPS/Dialer_intermediates/classes.jar ... real 0m35.674s user 2m45.135s sys 0m9.531s The increase in wall time should be offset by the better parallelism from the reduced CPU time. Bug: 119270658 Test: m checkbuild Change-Id: I8fc78b5ef1f8c6f51fd97a29461b96ae2b35cada
-rw-r--r--java/config/config.go1
-rw-r--r--java/config/makevars.go2
-rw-r--r--java/dex.go8
3 files changed, 7 insertions, 4 deletions
diff --git a/java/config/config.go b/java/config/config.go
index 980db3b0..948b2854 100644
--- a/java/config/config.go
+++ b/java/config/config.go
@@ -49,6 +49,7 @@ func init() {
pctx.StaticVariable("JavacHeapSize", "2048M")
pctx.StaticVariable("JavacHeapFlags", "-J-Xmx${JavacHeapSize}")
+ pctx.StaticVariable("DexFlags", "-JXX:+TieredCompilation -JXX:TieredStopAtLevel=1")
pctx.StaticVariable("CommonJdkFlags", strings.Join([]string{
`-Xmaxerrs 9999999`,
diff --git a/java/config/makevars.go b/java/config/makevars.go
index 27c7daaa..a5d7c5bb 100644
--- a/java/config/makevars.go
+++ b/java/config/makevars.go
@@ -79,4 +79,6 @@ func makeVarsProvider(ctx android.MakeVarsContext) {
ctx.Strict("DEFAULT_JACOCO_EXCLUDE_FILTER", strings.Join(DefaultJacocoExcludeFilter, ","))
ctx.Strict("EXTRACT_JAR_PACKAGES", "${ExtractJarPackagesCmd}")
+
+ ctx.Strict("DEX_FLAGS", "${DexFlags}")
}
diff --git a/java/dex.go b/java/dex.go
index 642dee4a..97c64e3a 100644
--- a/java/dex.go
+++ b/java/dex.go
@@ -25,7 +25,7 @@ import (
var desugar = pctx.AndroidStaticRule("desugar",
blueprint.RuleParams{
Command: `rm -rf $dumpDir && mkdir -p $dumpDir && ` +
- `${config.JavaCmd} ` +
+ `${config.JavaCmd} ${config.DexFlags}` +
`-Djdk.internal.lambda.dumpProxyClasses=$$(cd $dumpDir && pwd) ` +
`$javaFlags ` +
`-jar ${config.DesugarJar} $classpathFlags $desugarFlags ` +
@@ -83,7 +83,7 @@ func (j *Module) desugar(ctx android.ModuleContext, flags javaBuilderFlags,
var dx = pctx.AndroidStaticRule("dx",
blueprint.RuleParams{
Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
- `${config.DxCmd} --dex --output=$outDir $dxFlags $in && ` +
+ `${config.DxCmd} ${config.DexFlags} --dex --output=$outDir $dxFlags $in && ` +
`${config.SoongZipCmd} -o $outDir/classes.dex.jar -C $outDir -D $outDir && ` +
`${config.MergeZipsCmd} -D -stripFile "*.class" $out $outDir/classes.dex.jar $in`,
CommandDeps: []string{
@@ -97,7 +97,7 @@ var dx = pctx.AndroidStaticRule("dx",
var d8 = pctx.AndroidStaticRule("d8",
blueprint.RuleParams{
Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
- `${config.D8Cmd} --output $outDir $dxFlags $in && ` +
+ `${config.D8Cmd} ${config.DexFlags} --output $outDir $dxFlags $in && ` +
`${config.SoongZipCmd} -o $outDir/classes.dex.jar -C $outDir -D $outDir && ` +
`${config.MergeZipsCmd} -D -stripFile "*.class" $out $outDir/classes.dex.jar $in`,
CommandDeps: []string{
@@ -111,7 +111,7 @@ var d8 = pctx.AndroidStaticRule("d8",
var r8 = pctx.AndroidStaticRule("r8",
blueprint.RuleParams{
Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
- `${config.R8Cmd} -injars $in --output $outDir ` +
+ `${config.R8Cmd} ${config.DexFlags} -injars $in --output $outDir ` +
`--force-proguard-compatibility ` +
`-printmapping $outDict ` +
`$dxFlags $r8Flags && ` +