summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2018-03-08 17:07:15 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-03-08 17:07:15 +0000
commit1812ea7c47738847a86847b5550c12d26d3637f4 (patch)
treebd284fd370dd0ca7c46a62474ac7ee4622948c61
parenta11d432df3a3f0485f900568d6e7cb177de18c87 (diff)
parentdbc4ce6f9a60b5e4d7e7bcbb4c3fac8a71b7984c (diff)
downloadnative-o-mr1-iot-preview-7.tar.gz
Merge "Add otapreopt logic for CompactDex version bump"android-o-mr1-iot-preview-7o-mr1-iot-preview-7
-rw-r--r--cmds/installd/otapreopt_parameters.cpp18
-rw-r--r--cmds/installd/tests/installd_otapreopt_test.cpp11
2 files changed, 23 insertions, 6 deletions
diff --git a/cmds/installd/otapreopt_parameters.cpp b/cmds/installd/otapreopt_parameters.cpp
index 802d5d7da7..d56aec9e2b 100644
--- a/cmds/installd/otapreopt_parameters.cpp
+++ b/cmds/installd/otapreopt_parameters.cpp
@@ -133,6 +133,9 @@ void OTAPreoptParameters::SetDefaultsForPostV1Arguments() {
// The compilation reason is ab-ota (match the system property pm.dexopt.ab-ota)
compilation_reason = "ab-ota";
+
+ // Flag is enabled by default for A/B otas.
+ dexopt_flags = DEXOPT_GENERATE_COMPACT_DEX;
}
bool OTAPreoptParameters::ReadArgumentsV1(const char** argv) {
@@ -146,6 +149,8 @@ bool OTAPreoptParameters::ReadArgumentsV1(const char** argv) {
return false;
}
+ SetDefaultsForPostV1Arguments();
+
size_t param_index = 0;
for (;; ++param_index) {
const char* param = argv[3 + param_index];
@@ -193,8 +198,9 @@ bool OTAPreoptParameters::ReadArgumentsV1(const char** argv) {
constexpr int OLD_DEXOPT_BOOTCOMPLETE = 1 << 4;
constexpr int OLD_DEXOPT_PROFILE_GUIDED = 1 << 5;
constexpr int OLD_DEXOPT_OTA = 1 << 6;
+ static_assert(DEXOPT_GENERATE_COMPACT_DEX > OLD_DEXOPT_OTA, "must not overlap");
int input = atoi(param);
- dexopt_flags =
+ dexopt_flags |=
ReplaceMask(input, OLD_DEXOPT_PUBLIC, DEXOPT_PUBLIC) |
ReplaceMask(input, OLD_DEXOPT_DEBUGGABLE, DEXOPT_DEBUGGABLE) |
ReplaceMask(input, OLD_DEXOPT_BOOTCOMPLETE, DEXOPT_BOOTCOMPLETE) |
@@ -226,8 +232,6 @@ bool OTAPreoptParameters::ReadArgumentsV1(const char** argv) {
return false;
}
- SetDefaultsForPostV1Arguments();
-
return true;
}
@@ -239,7 +243,9 @@ bool OTAPreoptParameters::ReadArgumentsPostV1(uint32_t version, const char** arg
case 4: num_args_expected = 13; break;
case 5: num_args_expected = 14; break;
case 6: num_args_expected = 15; break;
- case 7: num_args_expected = 16; break;
+ case 7:
+ // Version 8 adds a new dexopt flag: DEXOPT_GENERATE_COMPACT_DEX
+ case 8: num_args_expected = 16; break;
default:
LOG(ERROR) << "Don't know how to read arguments for version " << version;
return false;
@@ -302,6 +308,10 @@ bool OTAPreoptParameters::ReadArgumentsPostV1(uint32_t version, const char** arg
case 6:
dexopt_flags = atoi(param);
+ // Add CompactDex generation flag for versions less than 8 since it wasn't passed
+ // from the package manager. Only conditionally set the flag here so that it can
+ // be fully controlled by the package manager.
+ dexopt_flags |= (version < 8) ? DEXOPT_GENERATE_COMPACT_DEX : 0u;
break;
case 7:
diff --git a/cmds/installd/tests/installd_otapreopt_test.cpp b/cmds/installd/tests/installd_otapreopt_test.cpp
index 82bf932bee..63426cb4e0 100644
--- a/cmds/installd/tests/installd_otapreopt_test.cpp
+++ b/cmds/installd/tests/installd_otapreopt_test.cpp
@@ -20,6 +20,7 @@
#include <android-base/logging.h>
#include <gtest/gtest.h>
+#include "installd_constants.h"
#include "otapreopt_parameters.h"
namespace android {
@@ -61,7 +62,7 @@ protected:
ASSERT_STREQ(params.instruction_set, args[i++]);
ASSERT_EQ(params.dexopt_needed, atoi(args[i++]));
ASSERT_STREQ(params.oat_dir, args[i++]);
- ASSERT_EQ(params.dexopt_flags, atoi(args[i++]));
+ const int dexopt_flags = atoi(args[i++]);
ASSERT_STREQ(params.compiler_filter, args[i++]);
ASSERT_STREQ(params.volume_uuid, ParseNull(args[i++]));
ASSERT_STREQ(params.shared_libraries, ParseNull(args[i++]));
@@ -78,7 +79,7 @@ protected:
if (version > 3) {
ASSERT_EQ(params.target_sdk_version, atoi(args[i++]));
} else {
- ASSERT_EQ(params.target_sdk_version, 0);
+ ASSERT_EQ(params.target_sdk_version, 0);
}
if (version > 4) {
ASSERT_STREQ(params.profile_name, ParseNull(args[i++]));
@@ -95,6 +96,11 @@ protected:
} else {
ASSERT_STREQ(params.compilation_reason, "ab-ota");
}
+ if (version > 7) {
+ ASSERT_EQ(params.dexopt_flags, dexopt_flags);
+ } else {
+ ASSERT_EQ(params.dexopt_flags, dexopt_flags | DEXOPT_GENERATE_COMPACT_DEX);
+ }
}
const char* getVersionCStr(uint32_t version) {
@@ -106,6 +112,7 @@ protected:
case 5: return "5";
case 6: return "6";
case 7: return "7";
+ case 8: return "8";
}
return nullptr;
}