From 9544bf7db6985e65bb86f601d15671b728a9f9be Mon Sep 17 00:00:00 2001 From: Keun young Park Date: Wed, 12 Jan 2022 10:21:25 -0800 Subject: [PATCH] pm: add delete-dexopt command - Use to clean up dex optimization of specific package for dexopt related tests Bug: 214247875 Test: adb shell pm delete-dexopt PACKAGE and confirm that status are updated from adb shell dumpsys package dexopt for the package Change-Id: Id534c276d9b23e59ed76ee2b079ad4a8a984fb39 --- .../server/pm/PackageManagerShellCommand.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index be2bdaac13e47..9015c3144c789 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -230,6 +230,8 @@ class PackageManagerShellCommand extends ShellCommand { return runDexoptJob(); case "cancel-bg-dexopt-job": return cancelBgDexOptJob(); + case "delete-dexopt": + return runDeleteDexOpt(); case "dump-profiles": return runDumpProfiles(); case "snapshot-profile": @@ -1917,6 +1919,24 @@ class PackageManagerShellCommand extends ShellCommand { return 0; } + private int runDeleteDexOpt() throws RemoteException { + PrintWriter pw = getOutPrintWriter(); + String packageName = getNextArg(); + if (TextUtils.isEmpty(packageName)) { + pw.println("Error: no package name"); + return 1; + } + long freedBytes = LocalServices.getService( + PackageManagerInternal.class).deleteOatArtifactsOfPackage(packageName); + if (freedBytes < 0) { + pw.println("Error: delete failed"); + return 1; + } + pw.println("Success: freed " + freedBytes + " bytes"); + Slog.i(TAG, "delete-dexopt " + packageName + " ,freed " + freedBytes + " bytes"); + return 0; + } + private int runDumpProfiles() throws RemoteException { String packageName = getNextArg(); mInterface.dumpProfiles(packageName); @@ -4000,6 +4020,9 @@ class PackageManagerShellCommand extends ShellCommand { pw.println(" force-dex-opt PACKAGE"); pw.println(" Force immediate execution of dex opt for the given PACKAGE."); pw.println(""); + pw.println(" delete-dexopt PACKAGE"); + pw.println(" Delete dex optimization results for the given PACKAGE."); + pw.println(""); pw.println(" bg-dexopt-job"); pw.println(" Execute the background optimizations immediately."); pw.println(" Note that the command only runs the background optimizer logic. It may");