tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

localization.rs (2387B)


      1 use criterion::criterion_group;
      2 use criterion::criterion_main;
      3 use criterion::Criterion;
      4 
      5 use fluent_bundle::FluentArgs;
      6 use fluent_fallback::{types::L10nKey, Localization};
      7 use fluent_testing::get_scenarios;
      8 use l10nregistry_tests::TestFileFetcher;
      9 
     10 fn preferences_bench(c: &mut Criterion) {
     11    let fetcher = TestFileFetcher::new();
     12 
     13    let mut group = c.benchmark_group("localization/scenarios");
     14 
     15    for scenario in get_scenarios() {
     16        let res_ids = scenario.res_ids.clone();
     17        let l10n_keys: Vec<(String, Option<FluentArgs>)> = scenario
     18            .queries
     19            .iter()
     20            .map(|q| {
     21                (
     22                    q.input.id.clone(),
     23                    q.input.args.as_ref().map(|args| {
     24                        let mut result = FluentArgs::new();
     25                        for arg in args.as_slice() {
     26                            result.set(arg.id.clone(), arg.value.clone());
     27                        }
     28                        result
     29                    }),
     30                )
     31            })
     32            .collect();
     33 
     34        group.bench_function(format!("{}/format_value_sync", scenario.name), |b| {
     35            b.iter(|| {
     36                let (env, reg) = fetcher.get_registry_and_environment(&scenario);
     37                let mut errors = vec![];
     38 
     39                let loc = Localization::with_env(res_ids.clone(), true, env.clone(), reg.clone());
     40                let bundles = loc.bundles();
     41 
     42                for key in l10n_keys.iter() {
     43                    bundles.format_value_sync(&key.0, key.1.as_ref(), &mut errors);
     44                }
     45            })
     46        });
     47 
     48        let keys: Vec<L10nKey> = l10n_keys
     49            .into_iter()
     50            .map(|key| L10nKey {
     51                id: key.0.into(),
     52                args: key.1,
     53            })
     54            .collect();
     55        group.bench_function(format!("{}/format_messages_sync", scenario.name), |b| {
     56            b.iter(|| {
     57                let (env, reg) = fetcher.get_registry_and_environment(&scenario);
     58                let mut errors = vec![];
     59                let loc = Localization::with_env(res_ids.clone(), true, env.clone(), reg.clone());
     60                let bundles = loc.bundles();
     61                bundles.format_messages_sync(&keys, &mut errors);
     62            })
     63        });
     64    }
     65 
     66    group.finish();
     67 }
     68 
     69 criterion_group!(benches, preferences_bench);
     70 criterion_main!(benches);