summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jiakai Zhang <jiakaiz@google.com> 2023-01-19 03:55:19 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-01-19 03:55:19 +0000
commitf00a89eea7b73d7f5438ded49f6b0728dd5de732 (patch)
tree5106578ce2b06aef6001b79570808c67b9ca293a
parente2b82c89a3714223800f17ac3447362cdd6107ed (diff)
parenta2849296ef2159b3428ca35110e6ec616573ae6b (diff)
Merge "Call into ART Service for dexopt dumpsys when it is enabled."
-rw-r--r--services/core/java/com/android/server/pm/ComputerEngine.java51
-rw-r--r--services/core/java/com/android/server/pm/DexOptHelper.java21
2 files changed, 49 insertions, 23 deletions
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index c2f0f5262305..094b18212580 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -2998,35 +2998,40 @@ public class ComputerEngine implements Computer {
}
ipw.println("Dexopt state:");
ipw.increaseIndent();
- Collection<? extends PackageStateInternal> pkgSettings;
- if (setting != null) {
- pkgSettings = Collections.singletonList(setting);
+ if (DexOptHelper.useArtService()) {
+ DexOptHelper.dumpDexoptState(ipw, packageName);
} else {
- pkgSettings = mSettings.getPackages().values();
- }
-
- for (PackageStateInternal pkgSetting : pkgSettings) {
- final AndroidPackage pkg = pkgSetting.getPkg();
- if (pkg == null || pkg.isApex()) {
- // Skip APEX which is not dex-optimized
- continue;
+ Collection<? extends PackageStateInternal> pkgSettings;
+ if (setting != null) {
+ pkgSettings = Collections.singletonList(setting);
+ } else {
+ pkgSettings = mSettings.getPackages().values();
}
- final String pkgName = pkg.getPackageName();
- ipw.println("[" + pkgName + "]");
- ipw.increaseIndent();
- // TODO(b/251903639): Call into ART Service.
- try {
- mPackageDexOptimizer.dumpDexoptState(ipw, pkg, pkgSetting,
- mDexManager.getPackageUseInfoOrDefault(pkgName));
- } catch (LegacyDexoptDisabledException e) {
- throw new RuntimeException(e);
+ for (PackageStateInternal pkgSetting : pkgSettings) {
+ final AndroidPackage pkg = pkgSetting.getPkg();
+ if (pkg == null || pkg.isApex()) {
+ // Skip APEX which is not dex-optimized
+ continue;
+ }
+ final String pkgName = pkg.getPackageName();
+ ipw.println("[" + pkgName + "]");
+ ipw.increaseIndent();
+
+ // TODO(b/251903639): Call into ART Service.
+ try {
+ mPackageDexOptimizer.dumpDexoptState(ipw, pkg, pkgSetting,
+ mDexManager.getPackageUseInfoOrDefault(pkgName));
+ } catch (LegacyDexoptDisabledException e) {
+ throw new RuntimeException(e);
+ }
+ ipw.decreaseIndent();
}
+ ipw.println("BgDexopt state:");
+ ipw.increaseIndent();
+ mBackgroundDexOptService.dump(ipw);
ipw.decreaseIndent();
}
- ipw.println("BgDexopt state:");
- ipw.increaseIndent();
- mBackgroundDexOptService.dump(ipw);
ipw.decreaseIndent();
break;
}
diff --git a/services/core/java/com/android/server/pm/DexOptHelper.java b/services/core/java/com/android/server/pm/DexOptHelper.java
index 4db180d9bb7b..382ae26e59ec 100644
--- a/services/core/java/com/android/server/pm/DexOptHelper.java
+++ b/services/core/java/com/android/server/pm/DexOptHelper.java
@@ -57,6 +57,7 @@ import android.util.Log;
import android.util.Slog;
import com.android.internal.logging.MetricsLogger;
+import com.android.internal.util.IndentingPrintWriter;
import com.android.server.LocalManagerRegistry;
import com.android.server.art.ArtManagerLocal;
import com.android.server.art.DexUseManagerLocal;
@@ -844,6 +845,26 @@ public final class DexOptHelper {
}
/**
+ * Dumps the dexopt state for the given package, or all packages if it is null.
+ */
+ public static void dumpDexoptState(
+ @NonNull IndentingPrintWriter ipw, @Nullable String packageName) {
+ try (PackageManagerLocal.FilteredSnapshot snapshot =
+ getPackageManagerLocal().withFilteredSnapshot()) {
+ if (packageName != null) {
+ try {
+ DexOptHelper.getArtManagerLocal().dumpPackage(ipw, snapshot, packageName);
+ } catch (IllegalArgumentException e) {
+ // Package isn't found, but that should only happen due to race.
+ ipw.println(e);
+ }
+ } else {
+ DexOptHelper.getArtManagerLocal().dump(ipw, snapshot);
+ }
+ }
+ }
+
+ /**
* Returns the module names of the APEXes that contribute to bootclasspath.
*/
private static List<String> getBcpApexes() {