PackageManager: Skip dexopt on install for debuggable apps
To reduce install-to-started latency, skip dexopt at install-time
for debuggable apps. This is a conscious tradeoff, as the app
will run slower, and do repeated work on every startup. However,
for debuggable apps, turnaround time is more important.
Bug: 78200989
Test: m
Test: Device boots
Test: CTS (wrap & JVMTI)
Change-Id: I749934e794b0c89d72ea8ee413b845e7804de184
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index a54cf1a..86fc0cf 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -18873,6 +18873,7 @@
// 1) it is not forward locked.
// 2) it is not on on an external ASEC container.
// 3) it is not an instant app or if it is then dexopt is enabled via gservices.
+ // 4) it is not debuggable.
//
// Note that we do not dexopt instant apps by default. dexopt can take some time to
// complete, so we skip this step during installation. Instead, we'll take extra time
@@ -18884,7 +18885,8 @@
&& !forwardLocked
&& !pkg.applicationInfo.isExternalAsec()
&& (!instantApp || Global.getInt(mContext.getContentResolver(),
- Global.INSTANT_APP_DEXOPT_ENABLED, 0) != 0);
+ Global.INSTANT_APP_DEXOPT_ENABLED, 0) != 0)
+ && ((pkg.applicationInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) == 0);
if (performDexopt) {
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dexopt");