diff options
| author | 2017-08-06 19:20:19 -0700 | |
|---|---|---|
| committer | 2017-08-08 22:20:29 +0000 | |
| commit | 41a57a65b2a4fb51faa55bcba57ebe544e9f799f (patch) | |
| tree | f7bc35d4f773b94866e5e03874686ac9cfcb123b | |
| parent | df421a8b471bfe9998bad94ceccb73d839f90206 (diff) | |
Add package use info to dexopt dump
Bug: 64153885
Test: adb shell dumpsys package dexopt
Change-Id: I57768076de821980b1de84d5fe44ab642ceebeba
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageDexOptimizer.java | 65 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 3 | 
2 files changed, 52 insertions, 16 deletions
| diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index b72abc79ed19..2f4f5ab723da 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -40,6 +40,7 @@ import java.io.File;  import java.io.IOException;  import java.util.ArrayList;  import java.util.List; +import java.util.Map;  import dalvik.system.DexFile; @@ -380,26 +381,60 @@ public class PackageDexOptimizer {      /**       * Dumps the dexopt state of the given package {@code pkg} to the given {@code PrintWriter}.       */ -    void dumpDexoptState(IndentingPrintWriter pw, PackageParser.Package pkg) { +    void dumpDexoptState(IndentingPrintWriter pw, PackageParser.Package pkg, +            PackageDexUsage.PackageUseInfo useInfo) {          final String[] instructionSets = getAppDexInstructionSets(pkg.applicationInfo);          final String[] dexCodeInstructionSets = getDexCodeInstructionSets(instructionSets);          final List<String> paths = pkg.getAllCodePathsExcludingResourceOnly(); -        for (String instructionSet : dexCodeInstructionSets) { -             pw.println("Instruction Set: " + instructionSet); -             pw.increaseIndent(); -             for (String path : paths) { -                  String status = null; -                  try { -                      status = DexFile.getDexFileStatus(path, instructionSet); -                  } catch (IOException ioe) { -                      status = "[Exception]: " + ioe.getMessage(); -                  } -                  pw.println("path: " + path); -                  pw.println("status: " + status); -             } -             pw.decreaseIndent(); +        for (String path : paths) { +            pw.println("path: " + path); +            pw.increaseIndent(); + +            for (String isa : dexCodeInstructionSets) { +                String status = null; +                try { +                    status = DexFile.getDexFileStatus(path, isa); +                } catch (IOException ioe) { +                     status = "[Exception]: " + ioe.getMessage(); +                } +                pw.println(isa + ": " + status); +            } + +            if (useInfo.isUsedByOtherApps(path)) { +                pw.println("used be other apps: " + useInfo.getLoadingPackages(path)); +            } + +            Map<String, PackageDexUsage.DexUseInfo> dexUseInfoMap = useInfo.getDexUseInfoMap(); + +            if (!dexUseInfoMap.isEmpty()) { +                pw.println("known secondary dex files:"); +                pw.increaseIndent(); +                for (Map.Entry<String, PackageDexUsage.DexUseInfo> e : dexUseInfoMap.entrySet()) { +                    String dex = e.getKey(); +                    PackageDexUsage.DexUseInfo dexUseInfo = e.getValue(); +                    pw.println(dex); +                    pw.increaseIndent(); +                    for (String isa : dexUseInfo.getLoaderIsas()) { +                        String status = null; +                        try { +                            status = DexFile.getDexFileStatus(path, isa); +                        } catch (IOException ioe) { +                             status = "[Exception]: " + ioe.getMessage(); +                        } +                        pw.println(isa + ": " + status); +                    } + +                    pw.println("class loader context: " + dexUseInfo.getClassLoaderContext()); +                    if (dexUseInfo.isUsedByOtherApps()) { +                        pw.println("used be other apps: " + dexUseInfo.getLoadingPackages()); +                    } +                    pw.decreaseIndent(); +                } +                pw.decreaseIndent(); +            } +            pw.decreaseIndent();          }      } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 90515df2ff62..48f8622ec5de 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -22872,7 +22872,8 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());          for (PackageParser.Package pkg : packages) {              ipw.println("[" + pkg.packageName + "]");              ipw.increaseIndent(); -            mPackageDexOptimizer.dumpDexoptState(ipw, pkg); +            mPackageDexOptimizer.dumpDexoptState(ipw, pkg, +                    mDexManager.getPackageUseInfoOrDefault(pkg.packageName));              ipw.decreaseIndent();          }      } |