Merge "Adds restore/setup specific dex flag" into rvc-dev am: 299a251140

Change-Id: I82df956604ecca107be5e2ff1b4abccbedd10dd8
This commit is contained in:
TreeHugger Robot
2020-04-15 23:47:07 +00:00
committed by Automerger Merge Worker
5 changed files with 27 additions and 4 deletions

View File

@@ -71,6 +71,8 @@ public class Installer extends SystemService {
public static final int DEXOPT_GENERATE_COMPACT_DEX = 1 << 11; public static final int DEXOPT_GENERATE_COMPACT_DEX = 1 << 11;
/** Indicates that dexopt should generate an app image */ /** Indicates that dexopt should generate an app image */
public static final int DEXOPT_GENERATE_APP_IMAGE = 1 << 12; public static final int DEXOPT_GENERATE_APP_IMAGE = 1 << 12;
/** Indicates that dexopt may be run with different performance / priority tuned for restore */
public static final int DEXOPT_FOR_RESTORE = 1 << 13; // TODO(b/135202722): remove
public static final int FLAG_STORAGE_DE = IInstalld.FLAG_STORAGE_DE; public static final int FLAG_STORAGE_DE = IInstalld.FLAG_STORAGE_DE;
public static final int FLAG_STORAGE_CE = IInstalld.FLAG_STORAGE_CE; public static final int FLAG_STORAGE_CE = IInstalld.FLAG_STORAGE_CE;

View File

@@ -22,6 +22,7 @@ import static com.android.server.pm.Installer.DEXOPT_BOOTCOMPLETE;
import static com.android.server.pm.Installer.DEXOPT_DEBUGGABLE; import static com.android.server.pm.Installer.DEXOPT_DEBUGGABLE;
import static com.android.server.pm.Installer.DEXOPT_ENABLE_HIDDEN_API_CHECKS; import static com.android.server.pm.Installer.DEXOPT_ENABLE_HIDDEN_API_CHECKS;
import static com.android.server.pm.Installer.DEXOPT_FORCE; import static com.android.server.pm.Installer.DEXOPT_FORCE;
import static com.android.server.pm.Installer.DEXOPT_FOR_RESTORE;
import static com.android.server.pm.Installer.DEXOPT_GENERATE_APP_IMAGE; import static com.android.server.pm.Installer.DEXOPT_GENERATE_APP_IMAGE;
import static com.android.server.pm.Installer.DEXOPT_GENERATE_COMPACT_DEX; import static com.android.server.pm.Installer.DEXOPT_GENERATE_COMPACT_DEX;
import static com.android.server.pm.Installer.DEXOPT_IDLE_BACKGROUND_JOB; import static com.android.server.pm.Installer.DEXOPT_IDLE_BACKGROUND_JOB;
@@ -706,6 +707,7 @@ public class PackageDexOptimizer {
| (options.isDexoptIdleBackgroundJob() ? DEXOPT_IDLE_BACKGROUND_JOB : 0) | (options.isDexoptIdleBackgroundJob() ? DEXOPT_IDLE_BACKGROUND_JOB : 0)
| (generateCompactDex ? DEXOPT_GENERATE_COMPACT_DEX : 0) | (generateCompactDex ? DEXOPT_GENERATE_COMPACT_DEX : 0)
| (generateAppImage ? DEXOPT_GENERATE_APP_IMAGE : 0) | (generateAppImage ? DEXOPT_GENERATE_APP_IMAGE : 0)
| (options.isDexoptInstallForRestore() ? DEXOPT_FOR_RESTORE : 0)
| hiddenApiFlag; | hiddenApiFlag;
return adjustDexoptFlags(dexFlags); return adjustDexoptFlags(dexFlags);
} }

View File

@@ -66,6 +66,8 @@ import static android.content.pm.PackageManager.INSTALL_FAILED_VERSION_DOWNGRADE
import static android.content.pm.PackageManager.INSTALL_INTERNAL; import static android.content.pm.PackageManager.INSTALL_INTERNAL;
import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES; import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES;
import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_NO_CERTIFICATES; import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_NO_CERTIFICATES;
import static android.content.pm.PackageManager.INSTALL_REASON_DEVICE_RESTORE;
import static android.content.pm.PackageManager.INSTALL_REASON_DEVICE_SETUP;
import static android.content.pm.PackageManager.INSTALL_SUCCEEDED; import static android.content.pm.PackageManager.INSTALL_SUCCEEDED;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS; import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK; import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK;
@@ -16709,10 +16711,15 @@ public class PackageManagerService extends IPackageManager.Stub
// method because `pkg` may not be in `mPackages` yet. // method because `pkg` may not be in `mPackages` yet.
// //
// Also, don't fail application installs if the dexopt step fails. // Also, don't fail application installs if the dexopt step fails.
int flags = DexoptOptions.DEXOPT_BOOT_COMPLETE
| DexoptOptions.DEXOPT_INSTALL_WITH_DEX_METADATA_FILE;
if (reconciledPkg.installArgs.installReason == INSTALL_REASON_DEVICE_RESTORE
|| reconciledPkg.installArgs.installReason == INSTALL_REASON_DEVICE_SETUP) {
flags |= DexoptOptions.DEXOPT_FOR_RESTORE;
}
DexoptOptions dexoptOptions = new DexoptOptions(packageName, DexoptOptions dexoptOptions = new DexoptOptions(packageName,
REASON_INSTALL, REASON_INSTALL,
DexoptOptions.DEXOPT_BOOT_COMPLETE flags);
| DexoptOptions.DEXOPT_INSTALL_WITH_DEX_METADATA_FILE);
ScanResult result = reconciledPkg.scanResult; ScanResult result = reconciledPkg.scanResult;
// This mirrors logic from commitReconciledScanResultLocked, where the library files // This mirrors logic from commitReconciledScanResultLocked, where the library files

View File

@@ -61,6 +61,10 @@ public final class DexoptOptions {
// should get the dex metdata file if present. // should get the dex metdata file if present.
public static final int DEXOPT_INSTALL_WITH_DEX_METADATA_FILE = 1 << 10; public static final int DEXOPT_INSTALL_WITH_DEX_METADATA_FILE = 1 << 10;
// When set, indicates that dexopt is being invoked from the install flow during device restore
// or device setup and should be scheduled appropriately.
public static final int DEXOPT_FOR_RESTORE = 1 << 11; // TODO(b/135202722): remove
// The name of package to optimize. // The name of package to optimize.
private final String mPackageName; private final String mPackageName;
@@ -99,7 +103,8 @@ public final class DexoptOptions {
DEXOPT_DOWNGRADE | DEXOPT_DOWNGRADE |
DEXOPT_AS_SHARED_LIBRARY | DEXOPT_AS_SHARED_LIBRARY |
DEXOPT_IDLE_BACKGROUND_JOB | DEXOPT_IDLE_BACKGROUND_JOB |
DEXOPT_INSTALL_WITH_DEX_METADATA_FILE; DEXOPT_INSTALL_WITH_DEX_METADATA_FILE |
DEXOPT_FOR_RESTORE;
if ((flags & (~validityMask)) != 0) { if ((flags & (~validityMask)) != 0) {
throw new IllegalArgumentException("Invalid flags : " + Integer.toHexString(flags)); throw new IllegalArgumentException("Invalid flags : " + Integer.toHexString(flags));
} }
@@ -155,6 +160,10 @@ public final class DexoptOptions {
return (mFlags & DEXOPT_INSTALL_WITH_DEX_METADATA_FILE) != 0; return (mFlags & DEXOPT_INSTALL_WITH_DEX_METADATA_FILE) != 0;
} }
public boolean isDexoptInstallForRestore() {
return (mFlags & DEXOPT_FOR_RESTORE) != 0;
}
public String getSplitName() { public String getSplitName() {
return mSplitName; return mSplitName;
} }

View File

@@ -54,6 +54,7 @@ public class DexoptOptionsTests {
assertFalse(opt.isForce()); assertFalse(opt.isForce());
assertFalse(opt.isDexoptIdleBackgroundJob()); assertFalse(opt.isDexoptIdleBackgroundJob());
assertFalse(opt.isDexoptInstallWithDexMetadata()); assertFalse(opt.isDexoptInstallWithDexMetadata());
assertFalse(opt.isDexoptInstallForRestore());
} }
@Test @Test
@@ -67,7 +68,8 @@ public class DexoptOptionsTests {
DexoptOptions.DEXOPT_DOWNGRADE | DexoptOptions.DEXOPT_DOWNGRADE |
DexoptOptions.DEXOPT_AS_SHARED_LIBRARY | DexoptOptions.DEXOPT_AS_SHARED_LIBRARY |
DexoptOptions.DEXOPT_IDLE_BACKGROUND_JOB | DexoptOptions.DEXOPT_IDLE_BACKGROUND_JOB |
DexoptOptions.DEXOPT_INSTALL_WITH_DEX_METADATA_FILE; DexoptOptions.DEXOPT_INSTALL_WITH_DEX_METADATA_FILE |
DexoptOptions.DEXOPT_FOR_RESTORE;
DexoptOptions opt = new DexoptOptions(mPackageName, mCompilerFilter, flags); DexoptOptions opt = new DexoptOptions(mPackageName, mCompilerFilter, flags);
assertEquals(mPackageName, opt.getPackageName()); assertEquals(mPackageName, opt.getPackageName());
@@ -82,6 +84,7 @@ public class DexoptOptionsTests {
assertTrue(opt.isDexoptAsSharedLibrary()); assertTrue(opt.isDexoptAsSharedLibrary());
assertTrue(opt.isDexoptIdleBackgroundJob()); assertTrue(opt.isDexoptIdleBackgroundJob());
assertTrue(opt.isDexoptInstallWithDexMetadata()); assertTrue(opt.isDexoptInstallWithDexMetadata());
assertTrue(opt.isDexoptInstallForRestore());
} }
@Test @Test