Use r8/d8 optimized profile for dexpreopt
Currently, dexpreopt supports profile guided optimization. This does not work well with r8/d8 optimization, since the checked-in profile will not match the dex signatures after r8/d8 has optimized the dex code. This CL introduces a new property `dex_preopt.enable_profile_rewrting`. If set, the checked-in profile will passed as `input` to r8 via `--art-profile <input> <output>`. The <output> from the previous command will be used as the profile for dexpreopt. Test: m nothing --no-skip-soong-tests Test: m CredentialManager with https://ag.corp.google.com/27448930 and obfuscation turned on Test: nm -U symbol.odex # contains obfuscated methods Bug: 335418838 Change-Id: I53beed9ed76f013262f1c503de0f2b74997c2a7f
This commit is contained in:
14
java/base.go
14
java/base.go
@@ -1650,11 +1650,23 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars, extraClasspath
|
||||
classesJar: implementationAndResourcesJar,
|
||||
jarName: jarName,
|
||||
}
|
||||
dexOutputFile = j.dexer.compileDex(ctx, params)
|
||||
if j.EnableProfileRewriting() {
|
||||
profile := j.GetProfile()
|
||||
if profile == "" || !j.GetProfileGuided() {
|
||||
ctx.PropertyErrorf("enable_profile_rewriting", "Profile and Profile_guided must be set when enable_profile_rewriting is true")
|
||||
}
|
||||
params.artProfileInput = &profile
|
||||
}
|
||||
dexOutputFile, dexArtProfileOutput := j.dexer.compileDex(ctx, params)
|
||||
if ctx.Failed() {
|
||||
return
|
||||
}
|
||||
|
||||
// If r8/d8 provides a profile that matches the optimized dex, use that for dexpreopt.
|
||||
if dexArtProfileOutput != nil {
|
||||
j.dexpreopter.SetRewrittenProfile(*dexArtProfileOutput)
|
||||
}
|
||||
|
||||
// merge dex jar with resources if necessary
|
||||
if j.resourceJar != nil {
|
||||
jars := android.Paths{dexOutputFile, j.resourceJar}
|
||||
|
Reference in New Issue
Block a user