summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFyodor Kupolov <fkupolov@google.com>2016-10-26 18:36:57 -0700
committergitbuildkicker <android-build@google.com>2016-10-28 11:15:55 -0700
commit9af3e25f77ed6a7a638eebcac35a290d613c3889 (patch)
treee95bd962726d8e9c6e33af30e7e0f6e70e1b0787
parent71591f3922a98cd536b9b1e9e1d9d1d3bf9e51a4 (diff)
downloadbase-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.java24
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerShellCommand.java23
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());
}
}
}