Make dex_preopt.enable_prof_rewrite=false an error for optimized apps
If profile guided dexpreopt _and_ optimization/obfuscation is true, then apps must use the rewritten profile created by r8/d8 Bug: 335418838 Test: m nothing --no-skip-soong-tests Change-Id: Iac45b614f43e52ac40ad1d13df0338bcafa788c3
This commit is contained in:
parent
2f9af23734
commit
15a67111f8
3 changed files with 33 additions and 0 deletions
|
@ -1650,6 +1650,11 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath
|
|||
classesJar: implementationAndResourcesJar,
|
||||
jarName: jarName,
|
||||
}
|
||||
if j.GetProfileGuided() && j.optimizeOrObfuscateEnabled() && !j.EnableProfileRewriting() {
|
||||
ctx.PropertyErrorf("enable_profile_rewriting",
|
||||
"Enable_profile_rewriting must be true when profile_guided dexpreopt and R8 optimization/obfuscation is turned on. The attached profile should be sourced from an unoptimized/unobfuscated APK.",
|
||||
)
|
||||
}
|
||||
if j.EnableProfileRewriting() {
|
||||
profile := j.GetProfile()
|
||||
if profile == "" || !j.GetProfileGuided() {
|
||||
|
|
|
@ -119,6 +119,10 @@ func (d *DexProperties) optimizedResourceShrinkingEnabled(ctx android.ModuleCont
|
|||
return d.resourceShrinkingEnabled(ctx) && Bool(d.Optimize.Optimized_shrink_resources)
|
||||
}
|
||||
|
||||
func (d *dexer) optimizeOrObfuscateEnabled() bool {
|
||||
return d.effectiveOptimizeEnabled() && (proptools.Bool(d.dexProperties.Optimize.Optimize) || proptools.Bool(d.dexProperties.Optimize.Obfuscate))
|
||||
}
|
||||
|
||||
var d8, d8RE = pctx.MultiCommandRemoteStaticRules("d8",
|
||||
blueprint.RuleParams{
|
||||
Command: `rm -rf "$outDir" && mkdir -p "$outDir" && ` +
|
||||
|
|
|
@ -689,3 +689,27 @@ func TestR8FlagsArtProfile(t *testing.T) {
|
|||
"--create-profile-from=out/soong/.intermediates/app/android_common/profile.prof.txt --output-profile-type=app",
|
||||
)
|
||||
}
|
||||
|
||||
// This test checks that users explicitly set `enable_profile_rewriting` to true when the following are true
|
||||
// 1. optimize or obfuscate is enabled AND
|
||||
// 2. dex_preopt.profile_guided is enabled
|
||||
//
|
||||
// The rewritten profile should be used since the dex signatures in the checked-in profile will not match the optimized binary.
|
||||
func TestEnableProfileRewritingIsRequiredForOptimizedApps(t *testing.T) {
|
||||
testJavaError(t,
|
||||
"Enable_profile_rewriting must be true when profile_guided dexpreopt and R8 optimization/obfuscation is turned on",
|
||||
`
|
||||
android_app {
|
||||
name: "app",
|
||||
srcs: ["foo.java"],
|
||||
platform_apis: true,
|
||||
dex_preopt: {
|
||||
profile_guided: true,
|
||||
profile: "profile.txt.prof",
|
||||
// enable_profile_rewriting is not set, this is an error
|
||||
},
|
||||
optimize: {
|
||||
optimize: true,
|
||||
}
|
||||
}`)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue