Merge "Dexopt the launcher(s) after a Mainline update." into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
305d693bcd
@@ -40,6 +40,7 @@ import static dalvik.system.DexFile.isProfileGuidedCompilerFilter;
|
|||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.app.AppGlobals;
|
import android.app.AppGlobals;
|
||||||
|
import android.app.role.RoleManager;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -272,7 +273,6 @@ public final class DexOptHelper {
|
|||||||
* compiles it if needed.
|
* compiles it if needed.
|
||||||
*/
|
*/
|
||||||
private void checkAndDexOptSystemUi(int reason) throws LegacyDexoptDisabledException {
|
private void checkAndDexOptSystemUi(int reason) throws LegacyDexoptDisabledException {
|
||||||
Installer.checkLegacyDexoptDisabled();
|
|
||||||
Computer snapshot = mPm.snapshotComputer();
|
Computer snapshot = mPm.snapshotComputer();
|
||||||
String sysUiPackageName =
|
String sysUiPackageName =
|
||||||
mPm.mContext.getString(com.android.internal.R.string.config_systemUi);
|
mPm.mContext.getString(com.android.internal.R.string.config_systemUi);
|
||||||
@@ -288,7 +288,7 @@ public final class DexOptHelper {
|
|||||||
String compilerFilter;
|
String compilerFilter;
|
||||||
|
|
||||||
if (isProfileGuidedCompilerFilter(targetCompilerFilter)) {
|
if (isProfileGuidedCompilerFilter(targetCompilerFilter)) {
|
||||||
compilerFilter = defaultCompilerFilter;
|
compilerFilter = "verify";
|
||||||
File profileFile = new File(getPrebuildProfilePath(pkg));
|
File profileFile = new File(getPrebuildProfilePath(pkg));
|
||||||
|
|
||||||
// Copy the profile to the reference profile path if it exists. Installd can only use a
|
// Copy the profile to the reference profile path if it exists. Installd can only use a
|
||||||
@@ -312,7 +312,26 @@ public final class DexOptHelper {
|
|||||||
compilerFilter = targetCompilerFilter;
|
compilerFilter = targetCompilerFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We don't expect updates in current profiles to be significant here, but
|
performDexoptPackage(sysUiPackageName, reason, compilerFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dexoptLauncher(int reason) throws LegacyDexoptDisabledException {
|
||||||
|
Computer snapshot = mPm.snapshotComputer();
|
||||||
|
RoleManager roleManager = mPm.mContext.getSystemService(RoleManager.class);
|
||||||
|
for (var packageName : roleManager.getRoleHolders(RoleManager.ROLE_HOME)) {
|
||||||
|
AndroidPackage pkg = snapshot.getPackage(packageName);
|
||||||
|
if (pkg == null) {
|
||||||
|
Log.w(TAG, "Launcher package " + packageName + " is not found for dexopting");
|
||||||
|
} else {
|
||||||
|
performDexoptPackage(packageName, reason, "speed-profile");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void performDexoptPackage(@NonNull String packageName, int reason,
|
||||||
|
@NonNull String compilerFilter) throws LegacyDexoptDisabledException {
|
||||||
|
Installer.checkLegacyDexoptDisabled();
|
||||||
|
|
||||||
// DEXOPT_CHECK_FOR_PROFILES_UPDATES is set to replicate behaviour that will be
|
// DEXOPT_CHECK_FOR_PROFILES_UPDATES is set to replicate behaviour that will be
|
||||||
// unconditionally enabled for profile guided filters when ART Service is called instead of
|
// unconditionally enabled for profile guided filters when ART Service is called instead of
|
||||||
// the legacy PackageDexOptimizer implementation.
|
// the legacy PackageDexOptimizer implementation.
|
||||||
@@ -320,8 +339,8 @@ public final class DexOptHelper {
|
|||||||
? DexoptOptions.DEXOPT_CHECK_FOR_PROFILES_UPDATES
|
? DexoptOptions.DEXOPT_CHECK_FOR_PROFILES_UPDATES
|
||||||
: 0;
|
: 0;
|
||||||
|
|
||||||
performDexOptTraced(new DexoptOptions(pkg.getPackageName(), REASON_BOOT_AFTER_OTA,
|
performDexOptTraced(new DexoptOptions(
|
||||||
compilerFilter, null /* splitName */, dexoptFlags));
|
packageName, reason, compilerFilter, null /* splitName */, dexoptFlags));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -343,6 +362,10 @@ public final class DexOptHelper {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log.i(TAG,
|
||||||
|
"Starting boot dexopt for reason "
|
||||||
|
+ DexoptOptions.convertToArtServiceDexoptReason(reason));
|
||||||
|
|
||||||
final long startTime = System.nanoTime();
|
final long startTime = System.nanoTime();
|
||||||
|
|
||||||
if (useArtService()) {
|
if (useArtService()) {
|
||||||
@@ -351,9 +374,10 @@ public final class DexOptHelper {
|
|||||||
null /* progressCallbackExecutor */, null /* progressCallback */);
|
null /* progressCallbackExecutor */, null /* progressCallback */);
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
// System UI is important to user experience, so we check it after a mainline update
|
// System UI and the launcher are important to user experience, so we check them
|
||||||
// or an OTA. It may need to be re-compiled in these cases.
|
// after a mainline update or OTA. They may need to be re-compiled in these cases.
|
||||||
checkAndDexOptSystemUi(reason);
|
checkAndDexOptSystemUi(reason);
|
||||||
|
dexoptLauncher(reason);
|
||||||
|
|
||||||
if (reason != REASON_BOOT_AFTER_OTA && reason != REASON_FIRST_BOOT) {
|
if (reason != REASON_BOOT_AFTER_OTA && reason != REASON_FIRST_BOOT) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user