Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1812ea7c authored by Mathieu Chartier's avatar Mathieu Chartier Committed by Gerrit Code Review
Browse files

Merge "Add otapreopt logic for CompactDex version bump"

parents a11d432d dbc4ce6f
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -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:
+9 −2
Original line number Diff line number Diff line
@@ -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++]));
@@ -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;
    }