summaryrefslogtreecommitdiff
path: root/java/base.go
diff options
context:
space:
mode:
author Spandan Das <spandandas@google.com> 2024-05-20 22:23:10 +0000
committer Spandan Das <spandandas@google.com> 2024-05-29 01:05:05 +0000
commit3dbda18e808f79bb94d57b645f686a9f737cdc76 (patch)
treee276ada4a581c8db8f2f9c8e0f4130eece756fa6 /java/base.go
parent1705676dd0ccaf56724ea6e0cfbddd0a73c2b802 (diff)
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
Diffstat (limited to 'java/base.go')
-rw-r--r--java/base.go14
1 files changed, 13 insertions, 1 deletions
diff --git a/java/base.go b/java/base.go
index b9e236cf0..056dbd528 100644
--- a/java/base.go
+++ b/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}