From a2849296ef2159b3428ca35110e6ec616573ae6b Mon Sep 17 00:00:00 2001 From: Martin Stjernholm Date: Sat, 14 Jan 2023 10:55:00 +0000 Subject: Call into ART Service for dexopt dumpsys when it is enabled. Test: adb shell dumpsys package adb shell dumpsys package dexopt adb shell dumpsys package com.android.egg adb shell dumpsys package something.else with and without dalvik.vm.useartservice=true Bug: 251903639 Change-Id: Ib3e4c27e784a5bf4147772ed2056a28f478c16e5 --- .../java/com/android/server/pm/ComputerEngine.java | 51 ++++++++++++---------- .../java/com/android/server/pm/DexOptHelper.java | 21 +++++++++ 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 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 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; @@ -843,6 +844,26 @@ public final class DexOptHelper { mPm.mPackageDexOptimizer.controlDexOptBlocking(block); } + /** + * 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. */ -- cgit v1.2.3-59-g8ed1b