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);