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

Commit dbc4ce6f authored by Mathieu Chartier's avatar Mathieu Chartier
Browse files

Add otapreopt logic for CompactDex version bump

For old versions, or in the flag.

Bug: 63756964
Bug: 74245837
Test: adb shell /data/nativetest64/installd_otapreopt_test/installd_otapreopt_test

Change-Id: Ie316f5327ca479f55b34a3ddb7cd6640043116cd
parent a11d432d
Loading
Loading
Loading
Loading
+14 −4
Original line number Original line 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)
    // 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) {
@@ -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];
@@ -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) |
@@ -226,8 +232,6 @@ bool OTAPreoptParameters::ReadArgumentsV1(const char** argv) {
        return false;
        return false;
    }
    }


    SetDefaultsForPostV1Arguments();

    return true;
    return true;
}
}


@@ -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;
@@ -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:
+9 −2
Original line number Original line Diff line number Diff line
@@ -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 {
@@ -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++]));
@@ -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) {
@@ -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;
    }
    }