diff options
author | Jiakai Zhang <jiakaiz@google.com> | 2022-06-23 14:24:00 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-06-23 14:24:00 +0000 |
commit | e8a08386489fb8b249e2d22c3d1d0e2dc738dd36 (patch) | |
tree | edc43e0a7db28d3b8cef8df9c45ced7e2216c8e2 | |
parent | 7a1c7017127519ead880294f1c674aa7dce39844 (diff) | |
parent | 80ee5fc12d1fbf2b973d42d9189567df4098d3a2 (diff) | |
download | base-e8a08386489fb8b249e2d22c3d1d0e2dc738dd36.tar.gz |
Merge "Fix a logic error in `getDexoptNeeded`." into tm-dev
-rw-r--r-- | services/core/java/com/android/server/pm/PackageDexOptimizer.java | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index af0a20ddf337..6cfe093df6d0 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -936,12 +936,15 @@ public class PackageDexOptimizer { String classLoaderContext, int profileAnalysisResult, boolean downgrade, int dexoptFlags, String oatDir) { final boolean shouldBePublic = (dexoptFlags & DEXOPT_PUBLIC) != 0; - // If the artifacts should be public while the current artifacts are not, we should - // re-compile anyway. - if (shouldBePublic && isOdexPrivate(packageName, path, isa, oatDir)) { - // Ensure compilation by pretending a compiler filter change on the apk/odex location - // (the reason for the '-'. A positive value means the 'oat' location). - return adjustDexoptNeeded(-DexFile.DEX2OAT_FOR_FILTER); + final boolean isProfileGuidedFilter = (dexoptFlags & DEXOPT_PROFILE_GUIDED) != 0; + boolean newProfile = profileAnalysisResult == PROFILE_ANALYSIS_OPTIMIZE; + + if (!newProfile && isProfileGuidedFilter && shouldBePublic + && isOdexPrivate(packageName, path, isa, oatDir)) { + // The profile that will be used is a cloud profile, while the profile used previously + // is a user profile. Typically, this happens after an app starts being used by other + // apps. + newProfile = true; } int dexoptNeeded; @@ -959,7 +962,6 @@ public class PackageDexOptimizer { && profileAnalysisResult == PROFILE_ANALYSIS_DONT_OPTIMIZE_EMPTY_PROFILES) { actualCompilerFilter = "verify"; } - boolean newProfile = profileAnalysisResult == PROFILE_ANALYSIS_OPTIMIZE; dexoptNeeded = DexFile.getDexOptNeeded(path, isa, actualCompilerFilter, classLoaderContext, newProfile, downgrade); } catch (IOException ioe) { |