diff options
author | Fyodor Kupolov <fkupolov@google.com> | 2016-10-26 18:36:57 -0700 |
---|---|---|
committer | gitbuildkicker <android-build@google.com> | 2016-10-28 11:15:55 -0700 |
commit | 9af3e25f77ed6a7a638eebcac35a290d613c3889 (patch) | |
tree | e95bd962726d8e9c6e33af30e7e0f6e70e1b0787 | |
parent | 71591f3922a98cd536b9b1e9e1d9d1d3bf9e51a4 (diff) | |
download | base-9af3e25f77ed6a7a638eebcac35a290d613c3889.tar.gz |
[DO NOT MERGE] Only setSize if -s arg is specified
Calculate size of installed APKs only when INSTALL_EXTERNAL flag is set.
calculateInstalledSize is expensive and may take up to 20% of total
installation time.
Bug: 32180551
Bug: 29932779
Change-Id: I173d2b38820cc86cbfacecd1bacef57369d10af7
(cherry picked from commit b87a491de63069fb903c95727f57511c7e4eeaa0)
-rw-r--r-- | cmds/pm/src/com/android/commands/pm/Pm.java | 24 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerShellCommand.java | 23 |
2 files changed, 30 insertions, 17 deletions
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java index 5f83d191a731..1b4eda804312 100644 --- a/cmds/pm/src/com/android/commands/pm/Pm.java +++ b/cmds/pm/src/com/android/commands/pm/Pm.java @@ -367,18 +367,24 @@ public final class Pm { private int runInstall() throws RemoteException { final InstallParams params = makeInstallParams(); final String inPath = nextArg(); + boolean installExternal = + (params.sessionParams.installFlags & PackageManager.INSTALL_EXTERNAL) != 0; if (params.sessionParams.sizeBytes < 0 && inPath != null) { File file = new File(inPath); if (file.isFile()) { - try { - ApkLite baseApk = PackageParser.parseApkLite(file, 0); - PackageLite pkgLite = new PackageLite(null, baseApk, null, null, null); - params.sessionParams.setSize( - PackageHelper.calculateInstalledSize(pkgLite, false, - params.sessionParams.abiOverride)); - } catch (PackageParserException | IOException e) { - System.err.println("Error: Failed to parse APK file : " + e); - return 1; + if (installExternal) { + try { + ApkLite baseApk = PackageParser.parseApkLite(file, 0); + PackageLite pkgLite = new PackageLite(null, baseApk, null, null, null); + params.sessionParams.setSize( + PackageHelper.calculateInstalledSize(pkgLite, false, + params.sessionParams.abiOverride)); + } catch (PackageParserException | IOException e) { + System.err.println("Error: Failed to parse APK file : " + e); + return 1; + } + } else { + params.sessionParams.setSize(file.length()); } } } diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index e18d4e011d97..3bfa6b880315 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -143,17 +143,24 @@ class PackageManagerShellCommand extends ShellCommand { final PrintWriter pw = getOutPrintWriter(); final InstallParams params = makeInstallParams(); final String inPath = getNextArg(); + boolean installExternal = + (params.sessionParams.installFlags & PackageManager.INSTALL_EXTERNAL) != 0; if (params.sessionParams.sizeBytes < 0 && inPath != null) { File file = new File(inPath); if (file.isFile()) { - try { - ApkLite baseApk = PackageParser.parseApkLite(file, 0); - PackageLite pkgLite = new PackageLite(null, baseApk, null, null, null); - params.sessionParams.setSize( - PackageHelper.calculateInstalledSize(pkgLite,false, params.sessionParams.abiOverride)); - } catch (PackageParserException | IOException e) { - pw.println("Error: Failed to parse APK file : " + e); - return 1; + if (installExternal) { + try { + ApkLite baseApk = PackageParser.parseApkLite(file, 0); + PackageLite pkgLite = new PackageLite(null, baseApk, null, null, null); + params.sessionParams.setSize( + PackageHelper.calculateInstalledSize(pkgLite, false, + params.sessionParams.abiOverride)); + } catch (PackageParserException | IOException e) { + pw.println("Error: Failed to parse APK file : " + e); + return 1; + } + } else { + params.sessionParams.setSize(file.length()); } } } |