Loading cmds/installd/otapreopt_parameters.cpp +14 −4 Original line number Original line Diff line number Diff line Loading @@ -133,6 +133,9 @@ void OTAPreoptParameters::SetDefaultsForPostV1Arguments() { // The compilation reason is ab-ota (match the system property pm.dexopt.ab-ota) // The compilation reason is ab-ota (match the system property pm.dexopt.ab-ota) compilation_reason = "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) { bool OTAPreoptParameters::ReadArgumentsV1(const char** argv) { Loading @@ -146,6 +149,8 @@ bool OTAPreoptParameters::ReadArgumentsV1(const char** argv) { return false; return false; } } SetDefaultsForPostV1Arguments(); size_t param_index = 0; size_t param_index = 0; for (;; ++param_index) { for (;; ++param_index) { const char* param = argv[3 + param_index]; const char* param = argv[3 + param_index]; Loading Loading @@ -193,8 +198,9 @@ bool OTAPreoptParameters::ReadArgumentsV1(const char** argv) { constexpr int OLD_DEXOPT_BOOTCOMPLETE = 1 << 4; constexpr int OLD_DEXOPT_BOOTCOMPLETE = 1 << 4; constexpr int OLD_DEXOPT_PROFILE_GUIDED = 1 << 5; constexpr int OLD_DEXOPT_PROFILE_GUIDED = 1 << 5; constexpr int OLD_DEXOPT_OTA = 1 << 6; constexpr int OLD_DEXOPT_OTA = 1 << 6; static_assert(DEXOPT_GENERATE_COMPACT_DEX > OLD_DEXOPT_OTA, "must not overlap"); int input = atoi(param); int input = atoi(param); dexopt_flags = dexopt_flags |= ReplaceMask(input, OLD_DEXOPT_PUBLIC, DEXOPT_PUBLIC) | ReplaceMask(input, OLD_DEXOPT_PUBLIC, DEXOPT_PUBLIC) | ReplaceMask(input, OLD_DEXOPT_DEBUGGABLE, DEXOPT_DEBUGGABLE) | ReplaceMask(input, OLD_DEXOPT_DEBUGGABLE, DEXOPT_DEBUGGABLE) | ReplaceMask(input, OLD_DEXOPT_BOOTCOMPLETE, DEXOPT_BOOTCOMPLETE) | ReplaceMask(input, OLD_DEXOPT_BOOTCOMPLETE, DEXOPT_BOOTCOMPLETE) | Loading Loading @@ -226,8 +232,6 @@ bool OTAPreoptParameters::ReadArgumentsV1(const char** argv) { return false; return false; } } SetDefaultsForPostV1Arguments(); return true; return true; } } Loading @@ -239,7 +243,9 @@ bool OTAPreoptParameters::ReadArgumentsPostV1(uint32_t version, const char** arg case 4: num_args_expected = 13; break; case 4: num_args_expected = 13; break; case 5: num_args_expected = 14; break; case 5: num_args_expected = 14; break; case 6: num_args_expected = 15; 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: default: LOG(ERROR) << "Don't know how to read arguments for version " << version; LOG(ERROR) << "Don't know how to read arguments for version " << version; return false; return false; Loading Loading @@ -302,6 +308,10 @@ bool OTAPreoptParameters::ReadArgumentsPostV1(uint32_t version, const char** arg case 6: case 6: dexopt_flags = atoi(param); 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; break; case 7: case 7: Loading cmds/installd/tests/installd_otapreopt_test.cpp +9 −2 Original line number Original line Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <android-base/logging.h> #include <android-base/logging.h> #include <gtest/gtest.h> #include <gtest/gtest.h> #include "installd_constants.h" #include "otapreopt_parameters.h" #include "otapreopt_parameters.h" namespace android { namespace android { Loading Loading @@ -61,7 +62,7 @@ protected: ASSERT_STREQ(params.instruction_set, args[i++]); ASSERT_STREQ(params.instruction_set, args[i++]); ASSERT_EQ(params.dexopt_needed, atoi(args[i++])); ASSERT_EQ(params.dexopt_needed, atoi(args[i++])); ASSERT_STREQ(params.oat_dir, 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.compiler_filter, args[i++]); ASSERT_STREQ(params.volume_uuid, ParseNull(args[i++])); ASSERT_STREQ(params.volume_uuid, ParseNull(args[i++])); ASSERT_STREQ(params.shared_libraries, ParseNull(args[i++])); ASSERT_STREQ(params.shared_libraries, ParseNull(args[i++])); Loading Loading @@ -95,6 +96,11 @@ protected: } else { } else { ASSERT_STREQ(params.compilation_reason, "ab-ota"); 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) { const char* getVersionCStr(uint32_t version) { Loading @@ -106,6 +112,7 @@ protected: case 5: return "5"; case 5: return "5"; case 6: return "6"; case 6: return "6"; case 7: return "7"; case 7: return "7"; case 8: return "8"; } } return nullptr; return nullptr; } } Loading Loading
cmds/installd/otapreopt_parameters.cpp +14 −4 Original line number Original line Diff line number Diff line Loading @@ -133,6 +133,9 @@ void OTAPreoptParameters::SetDefaultsForPostV1Arguments() { // The compilation reason is ab-ota (match the system property pm.dexopt.ab-ota) // The compilation reason is ab-ota (match the system property pm.dexopt.ab-ota) compilation_reason = "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) { bool OTAPreoptParameters::ReadArgumentsV1(const char** argv) { Loading @@ -146,6 +149,8 @@ bool OTAPreoptParameters::ReadArgumentsV1(const char** argv) { return false; return false; } } SetDefaultsForPostV1Arguments(); size_t param_index = 0; size_t param_index = 0; for (;; ++param_index) { for (;; ++param_index) { const char* param = argv[3 + param_index]; const char* param = argv[3 + param_index]; Loading Loading @@ -193,8 +198,9 @@ bool OTAPreoptParameters::ReadArgumentsV1(const char** argv) { constexpr int OLD_DEXOPT_BOOTCOMPLETE = 1 << 4; constexpr int OLD_DEXOPT_BOOTCOMPLETE = 1 << 4; constexpr int OLD_DEXOPT_PROFILE_GUIDED = 1 << 5; constexpr int OLD_DEXOPT_PROFILE_GUIDED = 1 << 5; constexpr int OLD_DEXOPT_OTA = 1 << 6; constexpr int OLD_DEXOPT_OTA = 1 << 6; static_assert(DEXOPT_GENERATE_COMPACT_DEX > OLD_DEXOPT_OTA, "must not overlap"); int input = atoi(param); int input = atoi(param); dexopt_flags = dexopt_flags |= ReplaceMask(input, OLD_DEXOPT_PUBLIC, DEXOPT_PUBLIC) | ReplaceMask(input, OLD_DEXOPT_PUBLIC, DEXOPT_PUBLIC) | ReplaceMask(input, OLD_DEXOPT_DEBUGGABLE, DEXOPT_DEBUGGABLE) | ReplaceMask(input, OLD_DEXOPT_DEBUGGABLE, DEXOPT_DEBUGGABLE) | ReplaceMask(input, OLD_DEXOPT_BOOTCOMPLETE, DEXOPT_BOOTCOMPLETE) | ReplaceMask(input, OLD_DEXOPT_BOOTCOMPLETE, DEXOPT_BOOTCOMPLETE) | Loading Loading @@ -226,8 +232,6 @@ bool OTAPreoptParameters::ReadArgumentsV1(const char** argv) { return false; return false; } } SetDefaultsForPostV1Arguments(); return true; return true; } } Loading @@ -239,7 +243,9 @@ bool OTAPreoptParameters::ReadArgumentsPostV1(uint32_t version, const char** arg case 4: num_args_expected = 13; break; case 4: num_args_expected = 13; break; case 5: num_args_expected = 14; break; case 5: num_args_expected = 14; break; case 6: num_args_expected = 15; 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: default: LOG(ERROR) << "Don't know how to read arguments for version " << version; LOG(ERROR) << "Don't know how to read arguments for version " << version; return false; return false; Loading Loading @@ -302,6 +308,10 @@ bool OTAPreoptParameters::ReadArgumentsPostV1(uint32_t version, const char** arg case 6: case 6: dexopt_flags = atoi(param); 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; break; case 7: case 7: Loading
cmds/installd/tests/installd_otapreopt_test.cpp +9 −2 Original line number Original line Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <android-base/logging.h> #include <android-base/logging.h> #include <gtest/gtest.h> #include <gtest/gtest.h> #include "installd_constants.h" #include "otapreopt_parameters.h" #include "otapreopt_parameters.h" namespace android { namespace android { Loading Loading @@ -61,7 +62,7 @@ protected: ASSERT_STREQ(params.instruction_set, args[i++]); ASSERT_STREQ(params.instruction_set, args[i++]); ASSERT_EQ(params.dexopt_needed, atoi(args[i++])); ASSERT_EQ(params.dexopt_needed, atoi(args[i++])); ASSERT_STREQ(params.oat_dir, 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.compiler_filter, args[i++]); ASSERT_STREQ(params.volume_uuid, ParseNull(args[i++])); ASSERT_STREQ(params.volume_uuid, ParseNull(args[i++])); ASSERT_STREQ(params.shared_libraries, ParseNull(args[i++])); ASSERT_STREQ(params.shared_libraries, ParseNull(args[i++])); Loading Loading @@ -95,6 +96,11 @@ protected: } else { } else { ASSERT_STREQ(params.compilation_reason, "ab-ota"); 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) { const char* getVersionCStr(uint32_t version) { Loading @@ -106,6 +112,7 @@ protected: case 5: return "5"; case 5: return "5"; case 6: return "6"; case 6: return "6"; case 7: return "7"; case 7: return "7"; case 8: return "8"; } } return nullptr; return nullptr; } } Loading