summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
author Jiakai Zhang <jiakaiz@google.com> 2023-05-04 22:13:08 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2023-05-04 22:13:08 +0000
commitdbfcf85c53dd9d582e1a582dfa3b77a7436e4f37 (patch)
tree52c527788ea2ffa7912cab0df8ced2c71bb5b80e /java
parentc0bdca91104e72b1435d02e7caf64c4eaef1998d (diff)
parent7b845e808f07a607a9ecf630eea00a334636f0c5 (diff)
Merge changes I4e721b47,I1bf05ade
* changes: Generate app profiles even if dexpreopt is disabled. Generate boot image profiles even if dexpreopt is disabled.
Diffstat (limited to 'java')
-rw-r--r--java/bootclasspath_fragment.go15
-rw-r--r--java/dex_test.go10
-rw-r--r--java/dexpreopt.go10
-rw-r--r--java/dexpreopt_bootjars.go7
-rw-r--r--java/dexpreopt_test.go25
-rw-r--r--java/platform_bootclasspath.go15
6 files changed, 49 insertions, 33 deletions
diff --git a/java/bootclasspath_fragment.go b/java/bootclasspath_fragment.go
index f69256347..d1a020e4d 100644
--- a/java/bootclasspath_fragment.go
+++ b/java/bootclasspath_fragment.go
@@ -506,10 +506,6 @@ func (b *BootclasspathFragmentModule) DepsMutator(ctx android.BottomUpMutatorCon
}
}
- if SkipDexpreoptBootJars(ctx) {
- return
- }
-
// Add a dependency onto the dex2oat tool which is needed for creating the boot image. The
// path is retrieved from the dependency by GetGlobalSoongConfig(ctx).
dexpreopt.RegisterToolDeps(ctx)
@@ -901,10 +897,6 @@ func (b *BootclasspathFragmentModule) produceHiddenAPIOutput(ctx android.ModuleC
// produceBootImageFiles builds the boot image files from the source if it is required.
func (b *BootclasspathFragmentModule) produceBootImageFiles(ctx android.ModuleContext, imageConfig *bootImageConfig) bootImageOutputs {
- if SkipDexpreoptBootJars(ctx) {
- return bootImageOutputs{}
- }
-
// Only generate the boot image if the configuration does not skip it.
return b.generateBootImageBuildActions(ctx, imageConfig)
}
@@ -932,6 +924,13 @@ func (b *BootclasspathFragmentModule) generateBootImageBuildActions(ctx android.
// Build boot image files for the host variants.
buildBootImageVariantsForBuildOs(ctx, imageConfig, profile)
+ // If dexpreopt of boot image jars should be skipped, generate only a profile.
+ if SkipDexpreoptBootJars(ctx) {
+ return bootImageOutputs{
+ profile: profile,
+ }
+ }
+
// Build boot image files for the android variants.
bootImageFiles := buildBootImageVariantsForAndroidOs(ctx, imageConfig, profile)
diff --git a/java/dex_test.go b/java/dex_test.go
index 97fc3d0dd..2ba3831f4 100644
--- a/java/dex_test.go
+++ b/java/dex_test.go
@@ -23,7 +23,7 @@ import (
)
func TestR8(t *testing.T) {
- result := PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd.RunTestWithBp(t, `
+ result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, `
android_app {
name: "app",
srcs: ["foo.java"],
@@ -191,7 +191,7 @@ func TestR8TransitiveDeps(t *testing.T) {
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
- fixturePreparer := PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd
+ fixturePreparer := PrepareForTestWithJavaDefaultModules
if tc.unbundled {
fixturePreparer = android.GroupFixturePreparers(
fixturePreparer,
@@ -258,7 +258,7 @@ func TestR8TransitiveDeps(t *testing.T) {
}
func TestR8Flags(t *testing.T) {
- result := PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd.RunTestWithBp(t, `
+ result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, `
android_app {
name: "app",
srcs: ["foo.java"],
@@ -287,7 +287,7 @@ func TestR8Flags(t *testing.T) {
}
func TestD8(t *testing.T) {
- result := PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd.RunTestWithBp(t, `
+ result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, `
java_library {
name: "foo",
srcs: ["foo.java"],
@@ -328,7 +328,7 @@ func TestD8(t *testing.T) {
}
func TestProguardFlagsInheritance(t *testing.T) {
- result := PrepareForTestWithJavaDefaultModulesWithoutFakeDex2oatd.RunTestWithBp(t, `
+ result := PrepareForTestWithJavaDefaultModules.RunTestWithBp(t, `
android_app {
name: "app",
static_libs: [
diff --git a/java/dexpreopt.go b/java/dexpreopt.go
index 0ffedf6c4..f0bb9a32c 100644
--- a/java/dexpreopt.go
+++ b/java/dexpreopt.go
@@ -180,6 +180,8 @@ func moduleName(ctx android.BaseModuleContext) string {
return android.RemoveOptionalPrebuiltPrefix(ctx.ModuleName())
}
+// Returns whether dexpreopt is applicable to the module.
+// When it returns true, neither profile nor dexpreopt artifacts will be generated.
func (d *dexpreopter) dexpreoptDisabled(ctx android.BaseModuleContext) bool {
if !ctx.Device() {
return true
@@ -205,14 +207,6 @@ func (d *dexpreopter) dexpreoptDisabled(ctx android.BaseModuleContext) bool {
global := dexpreopt.GetGlobalConfig(ctx)
- if global.DisablePreopt {
- return true
- }
-
- if inList(moduleName(ctx), global.DisablePreoptModules) {
- return true
- }
-
isApexSystemServerJar := global.AllApexSystemServerJars(ctx).ContainsJar(moduleName(ctx))
if isApexVariant(ctx) {
// Don't preopt APEX variant module unless the module is an APEX system server jar.
diff --git a/java/dexpreopt_bootjars.go b/java/dexpreopt_bootjars.go
index f4c093510..36802d6d3 100644
--- a/java/dexpreopt_bootjars.go
+++ b/java/dexpreopt_bootjars.go
@@ -500,9 +500,6 @@ func (d *dexpreoptBootJars) GenerateAndroidBuildActions(ctx android.ModuleContex
// Generate build rules for boot images.
func (d *dexpreoptBootJars) GenerateSingletonBuildActions(ctx android.SingletonContext) {
- if SkipDexpreoptBootJars(ctx) {
- return
- }
if dexpreopt.GetCachedGlobalSoongConfig(ctx) == nil {
// No module has enabled dexpreopting, so we assume there will be no boot image to make.
return
@@ -1014,6 +1011,10 @@ func (d *dexpreoptBootJars) MakeVars(ctx android.MakeVarsContext) {
ctx.Strict("DEXPREOPT_IMAGE_PROFILE_LICENSE_METADATA", image.profileLicenseMetadataFile.String())
}
+ if SkipDexpreoptBootJars(ctx) {
+ return
+ }
+
global := dexpreopt.GetGlobalConfig(ctx)
dexPaths, dexLocations := bcpForDexpreopt(ctx, global.PreoptWithUpdatableBcp)
ctx.Strict("DEXPREOPT_BOOTCLASSPATH_DEX_FILES", strings.Join(dexPaths.Strings(), " "))
diff --git a/java/dexpreopt_test.go b/java/dexpreopt_test.go
index 3d2c5c3a1..f91ac5cc3 100644
--- a/java/dexpreopt_test.go
+++ b/java/dexpreopt_test.go
@@ -438,3 +438,28 @@ func TestAndroidMkEntriesForApex(t *testing.T) {
android.AssertIntEquals(t, "entries count", 0, len(entriesList))
}
+
+func TestGenerateProfileEvenIfDexpreoptIsDisabled(t *testing.T) {
+ preparers := android.GroupFixturePreparers(
+ PrepareForTestWithJavaDefaultModules,
+ PrepareForTestWithFakeApexMutator,
+ dexpreopt.FixtureDisableDexpreopt(true),
+ )
+
+ result := preparers.RunTestWithBp(t, `
+ java_library {
+ name: "foo",
+ installable: true,
+ dex_preopt: {
+ profile: "art-profile",
+ },
+ srcs: ["a.java"],
+ }`)
+
+ ctx := result.TestContext
+ dexpreopt := ctx.ModuleForTests("foo", "android_common").MaybeRule("dexpreopt")
+
+ expected := []string{"out/soong/.intermediates/foo/android_common/dexpreopt/profile.prof"}
+
+ android.AssertArrayString(t, "outputs", expected, dexpreopt.AllOutputs())
+}
diff --git a/java/platform_bootclasspath.go b/java/platform_bootclasspath.go
index 0ea360979..254c40535 100644
--- a/java/platform_bootclasspath.go
+++ b/java/platform_bootclasspath.go
@@ -103,10 +103,6 @@ func (b *platformBootclasspathModule) OutputFiles(tag string) (android.Paths, er
func (b *platformBootclasspathModule) DepsMutator(ctx android.BottomUpMutatorContext) {
b.hiddenAPIDepsMutator(ctx)
- if SkipDexpreoptBootJars(ctx) {
- return
- }
-
// Add a dependency onto the dex2oat tool which is needed for creating the boot image. The
// path is retrieved from the dependency by GetGlobalSoongConfig(ctx).
dexpreopt.RegisterToolDeps(ctx)
@@ -187,11 +183,6 @@ func (b *platformBootclasspathModule) GenerateAndroidBuildActions(ctx android.Mo
bootDexJarByModule := b.generateHiddenAPIBuildActions(ctx, b.configuredModules, b.fragments)
buildRuleForBootJarsPackageCheck(ctx, bootDexJarByModule)
- // Nothing to do if skipping the dexpreopt of boot image jars.
- if SkipDexpreoptBootJars(ctx) {
- return
- }
-
b.generateBootImageBuildActions(ctx, platformModules, apexModules)
}
@@ -429,6 +420,12 @@ func (b *platformBootclasspathModule) generateBootImage(ctx android.ModuleContex
// Build a profile for the image config and then use that to build the boot image.
profile := bootImageProfileRule(ctx, imageConfig)
+ // If dexpreopt of boot image jars should be skipped, generate only a profile.
+ global := dexpreopt.GetGlobalConfig(ctx)
+ if global.DisablePreoptBootImages {
+ return
+ }
+
// Build boot image files for the android variants.
androidBootImageFiles := buildBootImageVariantsForAndroidOs(ctx, imageConfig, profile)