Revert^2 "Generate app profiles even if dexpreopt is disabled."
Revert submission 2580631-revert-2574032-XXTWCJDTDQ Reason for revert: Fixed build breakages Reverted changes: /q/submissionid:2580631-revert-2574032-XXTWCJDTDQ Bug: 280440941 Test: lunch aosp_cf_riscv64_minidroid-userdebug && m UNSAFE_DISABLE_HIDDENAPI_FLAGS=true dist Test: Disable dex2oat on host (to simulate macOS) and build Change-Id: I6090b4b74cedb6d129fcbeef58d075c8ccdcc4e2
This commit is contained in:
parent
bc698cd28a
commit
cf61e3c591
6 changed files with 63 additions and 20 deletions
|
@ -813,6 +813,20 @@ func normalizePathRelativeToTop(path Path) Path {
|
|||
return path.RelativeToTop()
|
||||
}
|
||||
|
||||
func allOutputs(p BuildParams) []string {
|
||||
outputs := append(WritablePaths(nil), p.Outputs...)
|
||||
outputs = append(outputs, p.ImplicitOutputs...)
|
||||
if p.Output != nil {
|
||||
outputs = append(outputs, p.Output)
|
||||
}
|
||||
return outputs.Strings()
|
||||
}
|
||||
|
||||
// AllOutputs returns all 'BuildParams.Output's and 'BuildParams.Outputs's in their full path string forms.
|
||||
func (p TestingBuildParams) AllOutputs() []string {
|
||||
return allOutputs(p.BuildParams)
|
||||
}
|
||||
|
||||
// baseTestingComponent provides functionality common to both TestingModule and TestingSingleton.
|
||||
type baseTestingComponent struct {
|
||||
config Config
|
||||
|
@ -954,12 +968,7 @@ func (b baseTestingComponent) buildParamsFromOutput(file string) TestingBuildPar
|
|||
func (b baseTestingComponent) allOutputs() []string {
|
||||
var outputFullPaths []string
|
||||
for _, p := range b.provider.BuildParamsForTests() {
|
||||
outputs := append(WritablePaths(nil), p.Outputs...)
|
||||
outputs = append(outputs, p.ImplicitOutputs...)
|
||||
if p.Output != nil {
|
||||
outputs = append(outputs, p.Output)
|
||||
}
|
||||
outputFullPaths = append(outputFullPaths, outputs.Strings()...)
|
||||
outputFullPaths = append(outputFullPaths, allOutputs(p)...)
|
||||
}
|
||||
return outputFullPaths
|
||||
}
|
||||
|
|
|
@ -100,11 +100,19 @@ func GenerateDexpreoptRule(ctx android.BuilderContext, globalSoong *GlobalSoongC
|
|||
return rule, nil
|
||||
}
|
||||
|
||||
// If dexpreopt is applicable to the module, returns whether dexpreopt is disabled. Otherwise, the
|
||||
// behavior is undefined.
|
||||
// When it returns true, dexpreopt artifacts will not be generated, but profile will still be
|
||||
// generated if profile-guided compilation is requested.
|
||||
func dexpreoptDisabled(ctx android.PathContext, global *GlobalConfig, module *ModuleConfig) bool {
|
||||
if ctx.Config().UnbundledBuild() {
|
||||
return true
|
||||
}
|
||||
|
||||
if global.DisablePreopt {
|
||||
return true
|
||||
}
|
||||
|
||||
if contains(global.DisablePreoptModules, module.Name) {
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -181,3 +181,10 @@ func FixtureDisableDexpreoptBootImages(disable bool) android.FixturePreparer {
|
|||
dexpreoptConfig.DisablePreoptBootImages = disable
|
||||
})
|
||||
}
|
||||
|
||||
// FixtureDisableDexpreopt sets the DisablePreopt property in the global config.
|
||||
func FixtureDisableDexpreopt(disable bool) android.FixturePreparer {
|
||||
return FixtureModifyGlobalConfig(func(_ android.PathContext, dexpreoptConfig *GlobalConfig) {
|
||||
dexpreoptConfig.DisablePreopt = disable
|
||||
})
|
||||
}
|
||||
|
|
|
@ -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: [
|
||||
|
|
|
@ -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.
|
||||
|
@ -232,7 +226,7 @@ func (d *dexpreopter) dexpreoptDisabled(ctx android.BaseModuleContext) bool {
|
|||
}
|
||||
|
||||
func dexpreoptToolDepsMutator(ctx android.BottomUpMutatorContext) {
|
||||
if d, ok := ctx.Module().(DexpreopterInterface); !ok || d.dexpreoptDisabled(ctx) {
|
||||
if d, ok := ctx.Module().(DexpreopterInterface); !ok || d.dexpreoptDisabled(ctx) || !dexpreopt.IsDex2oatNeeded(ctx) {
|
||||
return
|
||||
}
|
||||
dexpreopt.RegisterToolDeps(ctx)
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue