Loading tools/aconfig/aconfig/templates/cpp_source_file.template +87 −12 Original line number Diff line number Diff line Loading @@ -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 \{ Loading @@ -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 }} Loading @@ -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) \{ Loading Loading @@ -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; Loading Loading
tools/aconfig/aconfig/templates/cpp_source_file.template +87 −12 Original line number Diff line number Diff line Loading @@ -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 \{ Loading @@ -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 }} Loading @@ -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) \{ Loading Loading @@ -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; Loading