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

Commit f1c1a844 authored by Dennis Shen's avatar Dennis Shen Committed by Gerrit Code Review
Browse files

Merge "Update native test mode codegen to fallback to call new storage" into main

parents b5cb266f 6a442b18
Loading
Loading
Loading
Loading
+87 −12
Original line number Diff line number Diff line
@@ -29,10 +29,71 @@ namespace {cpp_namespace} \{
    private:
        std::unordered_map<std::string, bool> overrides_;

    {{ if allow_instrumentation- }}
        uint32_t boolean_start_index_;

        std::unique_ptr<aconfig_storage::MappedStorageFile> flag_value_file_;

        bool package_exists_in_storage_;
    {{ -endif }}

    public:
    {{ if allow_instrumentation- }}
        flag_provider()
            : overrides_()
            , boolean_start_index_()
            , flag_value_file_(nullptr)
            , package_exists_in_storage_(true) \{

            auto package_map_file = aconfig_storage::get_mapped_file(
                 "{container}",
                 aconfig_storage::StorageFileType::package_map);

            if (!package_map_file.ok()) \{
                ALOGE("error: failed to get package map file: %s", package_map_file.error().c_str());
                package_exists_in_storage_ = false;
                return;
            }

            auto context = aconfig_storage::get_package_read_context(
                **package_map_file, "{package}");

            if (!context.ok()) \{
                ALOGE("error: failed to get package read context: %s", context.error().c_str());
                package_exists_in_storage_ = false;
                return;
            }

            if (!(context->package_exists)) \{
                package_exists_in_storage_ = false;
                return;
            }

            // cache package boolean flag start index
            boolean_start_index_ = context->boolean_start_index;

            // unmap package map file and free memory
            delete *package_map_file;

            auto flag_value_file = aconfig_storage::get_mapped_file(
                "{container}",
                aconfig_storage::StorageFileType::flag_val);
            if (!flag_value_file.ok()) \{
                ALOGE("error: failed to get flag value file: %s", flag_value_file.error().c_str());
                package_exists_in_storage_ = false;
                return;
            }

            // cache flag value file
            flag_value_file_ = std::unique_ptr<aconfig_storage::MappedStorageFile>(
                *flag_value_file);

        }
    {{ -else }}
        flag_provider()
            : overrides_()
        \{}
    {{ -endif }}

{{ for item in class_elements }}
        virtual bool {item.flag_name}() override \{
@@ -41,10 +102,27 @@ namespace {cpp_namespace} \{
                return it->second;
            } else \{
                {{ if item.readwrite- }}
                {{ if allow_instrumentation- }}
                if (!package_exists_in_storage_) \{
                    return {item.default_value};
                }

                auto value = aconfig_storage::get_boolean_flag_value(
                    *flag_value_file_,
                    boolean_start_index_ + {item.flag_offset});

                if (!value.ok()) \{
                    ALOGE("error: failed to read flag value: %s", value.error().c_str());
                    return {item.default_value};
                } else \{
                    return *value;
                }
                {{ -else }}
                return server_configurable_flags::GetServerConfigurableFlag(
                  "aconfig_flags.{item.device_config_namespace}",
                  "{item.device_config_flag}",
                  "{item.default_value}") == "true";
                {{ -endif }}
                {{ -else }}
                return {item.default_value};
                {{ -endif }}
@@ -66,15 +144,11 @@ namespace {cpp_namespace} \{
    class flag_provider : public flag_provider_interface \{
    public:

        {{ if allow_instrumentation- }}
        {{ if readwrite- }}
        {{ if allow_instrumentation- }}
        flag_provider()
            {{ if readwrite- }}
            : cache_({readwrite_count}, -1)
            , boolean_start_index_()
            {{ -else- }}
            : boolean_start_index_()
            {{ -endif }}
            , flag_value_file_(nullptr)
            , package_exists_in_storage_(true) \{

@@ -138,6 +212,7 @@ namespace {cpp_namespace} \{

                if (!value.ok()) \{
                    ALOGE("error: failed to read flag value: %s", value.error().c_str());
                    return {item.default_value};
                }

                cache_[{item.readwrite_idx}] = *value;