From: Nicolas Geoffray Date: Fri, 22 Sep 2017 08:01:32 +0000 (+0100) Subject: Move code around for deleting oat artifacts. X-Git-Tag: android-x86-9.0-r1~348^2~1^2~3^2~6^2~89^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=575697a574e8ef398e1aeb87f8a9044fc46002a8;p=android-x86%2Fframeworks-base.git Move code around for deleting oat artifacts. Test: make and boot (partially cherry-picked from commit 246dccf9327631597767afe418ce43ae6d07d102) Change-Id: Id3ce5fdee116df264241dfdee95734ac4bbad7ce --- diff --git a/services/core/java/com/android/server/pm/OtaDexoptService.java b/services/core/java/com/android/server/pm/OtaDexoptService.java index 54ca6b950ed7..a43f8afa4d97 100644 --- a/services/core/java/com/android/server/pm/OtaDexoptService.java +++ b/services/core/java/com/android/server/pm/OtaDexoptService.java @@ -152,7 +152,7 @@ public class OtaDexoptService extends IOtaDexopt.Stub { Log.i(TAG, "Low on space, deleting oat files in an attempt to free up space: " + PackageManagerServiceUtils.packagesToString(others)); for (PackageParser.Package pkg : others) { - deleteOatArtifactsOfPackage(pkg); + mPackageManagerService.deleteOatArtifactsOfPackage(pkg.packageName); } } long spaceAvailableNow = getAvailableSpace(); @@ -242,30 +242,6 @@ public class OtaDexoptService extends IOtaDexopt.Stub { return usableSpace - lowThreshold; } - private static String getOatDir(PackageParser.Package pkg) { - if (!pkg.canHaveOatDir()) { - return null; - } - File codePath = new File(pkg.codePath); - if (codePath.isDirectory()) { - return PackageDexOptimizer.getOatDir(codePath).getAbsolutePath(); - } - return null; - } - - private void deleteOatArtifactsOfPackage(PackageParser.Package pkg) { - String[] instructionSets = getAppDexInstructionSets(pkg.applicationInfo); - for (String codePath : pkg.getAllCodePaths()) { - for (String isa : instructionSets) { - try { - mPackageManagerService.mInstaller.deleteOdex(codePath, isa, getOatDir(pkg)); - } catch (InstallerException e) { - Log.e(TAG, "Failed deleting oat files for " + codePath, e); - } - } - } - } - /** * Generate all dexopt commands for the given package. */ diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 9f518c392803..1e61daa78a81 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -24872,6 +24872,50 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); return mInstantAppRegistry.getInstantAppAndroidIdLPw(packageName, userId); } } + + boolean canHaveOatDir(String packageName) { + synchronized (mPackages) { + PackageParser.Package p = mPackages.get(packageName); + if (p == null) { + return false; + } + return p.canHaveOatDir(); + } + } + + private String getOatDir(PackageParser.Package pkg) { + if (!pkg.canHaveOatDir()) { + return null; + } + File codePath = new File(pkg.codePath); + if (codePath.isDirectory()) { + return PackageDexOptimizer.getOatDir(codePath).getAbsolutePath(); + } + return null; + } + + void deleteOatArtifactsOfPackage(String packageName) { + final String[] instructionSets; + final List codePaths; + final String oatDir; + final PackageParser.Package pkg; + synchronized (mPackages) { + pkg = mPackages.get(packageName); + } + instructionSets = getAppDexInstructionSets(pkg.applicationInfo); + codePaths = pkg.getAllCodePaths(); + oatDir = getOatDir(pkg); + + for (String codePath : codePaths) { + for (String isa : instructionSets) { + try { + mInstaller.deleteOdex(codePath, isa, oatDir); + } catch (InstallerException e) { + Log.e(TAG, "Failed deleting oat files for " + codePath, e); + } + } + } + } } interface PackageSender {