registry.rs (4381B)
1 use criterion::criterion_group; 2 use criterion::criterion_main; 3 use criterion::Criterion; 4 5 use futures::stream::StreamExt; 6 use l10nregistry::source::ResourceId; 7 use l10nregistry_tests::{FileSource, RegistrySetup, TestFileFetcher}; 8 use unic_langid::LanguageIdentifier; 9 10 fn get_paths() -> Vec<ResourceId> { 11 let paths: Vec<&'static str> = vec![ 12 "branding/brand.ftl", 13 "browser/sanitize.ftl", 14 "browser/preferences/colors.ftl", 15 "browser/preferences/selectBookmark.ftl", 16 "browser/preferences/connection.ftl", 17 "browser/preferences/siteDataSettings.ftl", 18 "browser/preferences/fonts.ftl", 19 "browser/preferences/languages.ftl", 20 "browser/preferences/preferences.ftl", 21 "security/certificates/certManager.ftl", 22 "security/certificates/deviceManager.ftl", 23 "toolkit/global/textActions.ftl", 24 "toolkit/printing/printUI.ftl", 25 "toolkit/updates/history.ftl", 26 "toolkit/firefoxlabs/features.ftl", 27 ]; 28 29 paths.into_iter().map(ResourceId::from).collect() 30 } 31 32 fn registry_bench(c: &mut Criterion) { 33 let en_us: LanguageIdentifier = "en-US".parse().unwrap(); 34 let mut group = c.benchmark_group("non-metasource"); 35 36 let setup = RegistrySetup::new( 37 "test", 38 vec![ 39 FileSource::new("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"), 40 FileSource::new("browser", None, vec![en_us.clone()], "browser/{locale}/"), 41 FileSource::new("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"), 42 FileSource::new("browser", None, vec![en_us.clone()], "browser/{locale}/"), 43 ], 44 vec![en_us.clone()], 45 ); 46 let fetcher = TestFileFetcher::new(); 47 let (_, reg) = fetcher.get_registry_and_environment(setup); 48 49 group.bench_function(&format!("serial",), |b| { 50 b.iter(|| { 51 let lang_ids = vec![en_us.clone()]; 52 let mut i = reg.generate_bundles_sync(lang_ids.into_iter(), get_paths()); 53 while let Some(_) = i.next() {} 54 }) 55 }); 56 57 let rt = tokio::runtime::Runtime::new().unwrap(); 58 group.bench_function(&format!("parallel",), |b| { 59 b.iter(|| { 60 let lang_ids = vec![en_us.clone()]; 61 let mut i = reg.generate_bundles(lang_ids.into_iter(), get_paths()); 62 rt.block_on(async { while let Some(_) = i.as_mut().unwrap().next().await {} }); 63 }) 64 }); 65 66 group.finish(); 67 } 68 69 fn registry_metasource_bench(c: &mut Criterion) { 70 let en_us: LanguageIdentifier = "en-US".parse().unwrap(); 71 let mut group = c.benchmark_group("metasource"); 72 73 let setup = RegistrySetup::new( 74 "test", 75 vec![ 76 FileSource::new( 77 "toolkit", 78 Some("app"), 79 vec![en_us.clone()], 80 "toolkit/{locale}/", 81 ), 82 FileSource::new( 83 "browser", 84 Some("app"), 85 vec![en_us.clone()], 86 "browser/{locale}/", 87 ), 88 FileSource::new( 89 "toolkit", 90 Some("langpack"), 91 vec![en_us.clone()], 92 "toolkit/{locale}/", 93 ), 94 FileSource::new( 95 "browser", 96 Some("langpack"), 97 vec![en_us.clone()], 98 "browser/{locale}/", 99 ), 100 ], 101 vec![en_us.clone()], 102 ); 103 let fetcher = TestFileFetcher::new(); 104 let (_, reg) = fetcher.get_registry_and_environment(setup); 105 106 group.bench_function(&format!("serial",), |b| { 107 b.iter(|| { 108 let lang_ids = vec![en_us.clone()]; 109 let mut i = reg.generate_bundles_sync(lang_ids.into_iter(), get_paths()); 110 while let Some(_) = i.next() {} 111 }) 112 }); 113 114 let rt = tokio::runtime::Runtime::new().unwrap(); 115 group.bench_function(&format!("parallel",), |b| { 116 b.iter(|| { 117 let lang_ids = vec![en_us.clone()]; 118 let mut i = reg.generate_bundles(lang_ids.into_iter(), get_paths()); 119 rt.block_on(async { while let Some(_) = i.as_mut().unwrap().next().await {} }); 120 }) 121 }); 122 123 group.finish(); 124 } 125 126 criterion_group!( 127 name = benches; 128 config = Criterion::default().sample_size(10); 129 targets = registry_bench, registry_metasource_bench 130 ); 131 criterion_main!(benches);