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

Commit 737b8e30 authored by Dennis Shen's avatar Dennis Shen
Browse files

aconfig: Cache flag values for rust codegen

Bug: b/307336730
Test: atest aconfig.test
Change-Id: I01741a4205cbe4e9b007f43b043505bcbcf05cd8
parent 96506f43
Loading
Loading
Loading
Loading
+19 −8
Original line number Diff line number Diff line
@@ -32,10 +32,12 @@ where
{
    let template_flags: Vec<TemplateParsedFlag> =
        parsed_flags_iter.map(|pf| TemplateParsedFlag::new(package, pf)).collect();
    let has_readwrite = template_flags.iter().any(|item| item.readwrite);
    let context = TemplateContext {
        package: package.to_string(),
        template_flags,
        modules: package.split('.').map(|s| s.to_string()).collect::<Vec<_>>(),
        has_readwrite,
    };
    let mut template = TinyTemplate::new();
    template.add_template(
@@ -55,6 +57,7 @@ struct TemplateContext {
    pub package: String,
    pub template_flags: Vec<TemplateParsedFlag>,
    pub modules: Vec<String>,
    pub has_readwrite: bool,
}

#[derive(Serialize)]
@@ -94,6 +97,20 @@ mod tests {
/// flag provider
pub struct FlagProvider;

lazy_static::lazy_static! {
    /// flag value cache for disabled_rw
    static ref CACHED_disabled_rw: bool = flags_rust::GetServerConfigurableFlag(
        "aconfig_flags.aconfig_test",
        "com.android.aconfig.test.disabled_rw",
        "false") == "true";

    /// flag value cache for enabled_rw
    static ref CACHED_enabled_rw: bool = flags_rust::GetServerConfigurableFlag(
        "aconfig_flags.aconfig_test",
        "com.android.aconfig.test.enabled_rw",
        "true") == "true";
}

impl FlagProvider {
    /// query flag disabled_ro
    pub fn disabled_ro(&self) -> bool {
@@ -102,10 +119,7 @@ impl FlagProvider {

    /// query flag disabled_rw
    pub fn disabled_rw(&self) -> bool {
        flags_rust::GetServerConfigurableFlag(
            "aconfig_flags.aconfig_test",
            "com.android.aconfig.test.disabled_rw",
            "false") == "true"
        *CACHED_disabled_rw
    }

    /// query flag enabled_fixed_ro
@@ -120,10 +134,7 @@ impl FlagProvider {

    /// query flag enabled_rw
    pub fn enabled_rw(&self) -> bool {
        flags_rust::GetServerConfigurableFlag(
            "aconfig_flags.aconfig_test",
            "com.android.aconfig.test.enabled_rw",
            "true") == "true"
        *CACHED_enabled_rw
    }
}

+15 −4
Original line number Diff line number Diff line
@@ -3,16 +3,27 @@
/// flag provider
pub struct FlagProvider;

{{ if has_readwrite - }}
lazy_static::lazy_static! \{
    {{ for flag in template_flags }}
    {{ if flag.readwrite -}}
    /// flag value cache for {flag.name}
    static ref CACHED_{flag.name}: bool = flags_rust::GetServerConfigurableFlag(
        "aconfig_flags.{flag.device_config_namespace}",
        "{flag.device_config_flag}",
        "{flag.default_value}") == "true";
    {{ -endif }}
    {{ endfor }}
}
{{ -endif }}

impl FlagProvider \{

    {{ for flag in template_flags }}
    /// query flag {flag.name}
    pub fn {flag.name}(&self) -> bool \{
    {{ if flag.readwrite -}}
        flags_rust::GetServerConfigurableFlag(
          "aconfig_flags.{flag.device_config_namespace}",
          "{flag.device_config_flag}",
          "{flag.default_value}") == "true"
        *CACHED_{flag.name}
    {{ -else- }}
        {flag.default_value}
    {{ -endif }}