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

Commit 6a442b18 authored by Dennis Shen's avatar Dennis Shen
Browse files

Update native test mode codegen to fallback to call new storage

Test: m
Change-Id: Idd014b22ed67d338b34402978f3566bb9c2ad291
parent d174d499
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;