Generate app profiles even if dexpreopt is disabled.

Bug: 280440941
Test: -
  1. Patch ag/22302622 to disable dexpreopt.
  2. lunch aosp_cf_x86_64_phone-userdebug && m
  3. See app profiles still generated.
Test: -
  1. Patch ag/20592051 to enable profile for service-art.
  2. banchan com.android.art x86_64 && m
  3. See the profile for service-art generated.
Change-Id: I4e721b475b84a2f667bbccc030a8947078f26bb0
This commit is contained in:
Jiakai Zhang
2023-05-02 14:35:47 +01:00
parent b95f8345c8
commit 7b845e808f
6 changed files with 62 additions and 19 deletions

View File

@@ -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: [

View File

@@ -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.

View File

@@ -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())
}