1- #! [ cfg ( any ( ) ) ] // This attribute disables the entire module
1+ use adblock :: Engine ;
22use criterion:: * ;
33
4- use adblock:: cosmetic_filter_cache:: CosmeticFilterCache ;
5- use adblock:: lists:: { parse_filters, FilterFormat } ;
6-
74#[ path = "../tests/test_utils.rs" ]
85mod test_utils;
9- use test_utils:: rules_from_lists;
6+
7+ pub fn make_engine ( ) -> Engine {
8+ use adblock:: resources:: Resource ;
9+
10+ let rules = test_utils:: rules_from_lists ( & [ "data/brave/brave-main-list.txt" ] ) ;
11+ let resource_json = std:: fs:: read_to_string ( "data/brave/brave-resources.json" ) . unwrap ( ) ;
12+ let resource_list: Vec < Resource > = serde_json:: from_str ( & resource_json) . unwrap ( ) ;
13+ let mut engine = Engine :: from_rules_parametrised ( rules, Default :: default ( ) , true , true ) ;
14+ engine. use_resources ( resource_list) ;
15+ engine
16+ }
17+
18+ const TEST_URLS : [ & str ; 3 ] = [
19+ "https://search.brave.com/search?q=test" ,
20+ "https://mail.google.com/" ,
21+ "https://google.com" ,
22+ ] ;
1023
1124fn by_hostname ( c : & mut Criterion ) {
12- let mut group = c. benchmark_group ( "cosmetic-hostname-match " ) ;
25+ let mut group = c. benchmark_group ( "url_cosmetic_resources " ) ;
1326
1427 group. throughput ( Throughput :: Elements ( 1 ) ) ;
1528 group. sample_size ( 20 ) ;
1629
17- group. bench_function ( "easylist" , move |b| {
18- let rules = rules_from_lists ( & [ "data/easylist.to/easylist/easylist.txt" ] ) ;
19- let ( _, cosmetic_filters) = parse_filters ( & rules, false , FilterFormat :: Standard ) ;
20- let cfcache = CosmeticFilterCache :: from_rules ( cosmetic_filters) ;
21- b. iter ( || cfcache. hostname_cosmetic_resources ( "google.com" ) )
22- } ) ;
23- group. bench_function ( "many lists" , move |b| {
24- let rules = rules_from_lists ( & [
25- "data/easylist.to/easylist/easylist.txt" ,
26- "data/easylist.to/easylistgermany/easylistgermany.txt" ,
27- "data/uBlockOrigin/filters.txt" ,
28- "data/uBlockOrigin/unbreak.txt" ,
29- ] ) ;
30- let ( _, cosmetic_filters) = parse_filters ( & rules, false , FilterFormat :: Standard ) ;
31- let cfcache = CosmeticFilterCache :: from_rules ( cosmetic_filters) ;
32- b. iter ( || cfcache. hostname_cosmetic_resources ( "google.com" ) )
33- } ) ;
34- group. bench_function ( "complex_hostname" , move |b| {
35- let rules = rules_from_lists ( & [
36- "data/easylist.to/easylist/easylist.txt" ,
37- "data/easylist.to/easylistgermany/easylistgermany.txt" ,
38- "data/uBlockOrigin/filters.txt" ,
39- "data/uBlockOrigin/unbreak.txt" ,
40- ] ) ;
41- let ( _, cosmetic_filters) = parse_filters ( & rules, false , FilterFormat :: Standard ) ;
42- let cfcache = CosmeticFilterCache :: from_rules ( cosmetic_filters) ;
43- b. iter ( || cfcache. hostname_cosmetic_resources ( "ads.serve.1.domain.google.com" ) )
30+ group. bench_function ( "brave-list" , move |b| {
31+ let engine = make_engine ( ) ;
32+ b. iter ( || {
33+ TEST_URLS
34+ . iter ( )
35+ . map ( |url| engine. url_cosmetic_resources ( url) )
36+ . collect :: < Vec < _ > > ( )
37+ } )
4438 } ) ;
4539
4640 group. finish ( ) ;
@@ -52,68 +46,29 @@ fn by_classes_ids(c: &mut Criterion) {
5246 group. throughput ( Throughput :: Elements ( 1 ) ) ;
5347 group. sample_size ( 20 ) ;
5448
55- group. bench_function ( "easylist" , move |b| {
56- let rules = rules_from_lists ( & [ "data/easylist.to/easylist/easylist.txt" ] ) ;
57- let ( _, cosmetic_filters) = parse_filters ( & rules, false , FilterFormat :: Standard ) ;
58- let cfcache = CosmeticFilterCache :: from_rules ( cosmetic_filters) ;
59- let exceptions = Default :: default ( ) ;
60- b. iter ( || cfcache. hidden_class_id_selectors ( & [ "ad" ] , & [ "ad" ] , & exceptions) )
61- } ) ;
62- group. bench_function ( "many lists" , move |b| {
63- let rules = rules_from_lists ( & [
64- "data/easylist.to/easylist/easylist.txt" ,
65- "data/easylist.to/easylistgermany/easylistgermany.txt" ,
66- "data/uBlockOrigin/filters.txt" ,
67- "data/uBlockOrigin/unbreak.txt" ,
68- ] ) ;
69- let ( _, cosmetic_filters) = parse_filters ( & rules, false , FilterFormat :: Standard ) ;
70- let cfcache = CosmeticFilterCache :: from_rules ( cosmetic_filters) ;
71- let exceptions = Default :: default ( ) ;
72- b. iter ( || cfcache. hidden_class_id_selectors ( & [ "ad" ] , & [ "ad" ] , & exceptions) )
73- } ) ;
74- group. bench_function ( "many matching classes and ids" , move |b| {
75- let rules = rules_from_lists ( & [
76- "data/easylist.to/easylist/easylist.txt" ,
77- "data/easylist.to/easylistgermany/easylistgermany.txt" ,
78- "data/uBlockOrigin/filters.txt" ,
79- "data/uBlockOrigin/unbreak.txt" ,
80- ] ) ;
81- let ( _, cosmetic_filters) = parse_filters ( & rules, false , FilterFormat :: Standard ) ;
82- let cfcache = CosmeticFilterCache :: from_rules ( cosmetic_filters) ;
83- let exceptions = Default :: default ( ) ;
84- let class_list = [
85- "block-bg-advertisement-region-1" ,
86- "photobox-adbox" ,
87- "headerad-720" ,
88- "rscontainer" ,
89- "rail-article-sponsored" ,
90- "fbPhotoSnowboxAds" ,
91- "sidebar_ad_module" ,
92- "ad-728x90_forum" ,
93- "commercial-unit-desktop-rhs" ,
94- "sponsored-editorial" ,
95- "rr-300x600-ad" ,
96- "adfoot" ,
97- "lads" ,
98- ] ;
99- let id_list = [
100- "footer-adspace" ,
101- "adsponsored_links_box" ,
102- "lsadvert-top" ,
103- "mn" ,
104- "col-right-ad" ,
105- "view_ads_bottom_bg_middle" ,
106- "ad_468x60" ,
107- "rightAdColumn" ,
108- "content" ,
109- "rhs_block" ,
110- "center_col" ,
111- "header" ,
112- "advertisingModule160x600" ,
113- ] ;
114- b. iter ( || cfcache. hidden_class_id_selectors ( & class_list, & id_list, & exceptions) )
115- } ) ;
49+ let mut classes = vec ! [ ] ;
50+ let mut ids = vec ! [ ] ;
11651
52+ group. bench_function ( "brave-list" , |b| {
53+ for i in 0 ..1000 {
54+ classes. push ( format ! ( "class{}" , i) ) ;
55+ ids. push ( format ! ( "id{}" , i) ) ;
56+ }
57+
58+ let engine = make_engine ( ) ;
59+ let cases = TEST_URLS
60+ . iter ( )
61+ . map ( |url| engine. url_cosmetic_resources ( url) . exceptions )
62+ . collect :: < Vec < _ > > ( ) ;
63+
64+ let engine = make_engine ( ) ;
65+ b. iter ( || {
66+ cases
67+ . iter ( )
68+ . map ( |e| engine. hidden_class_id_selectors ( & classes, & ids, e) )
69+ . collect :: < Vec < _ > > ( )
70+ } )
71+ } ) ;
11772 group. finish ( ) ;
11873}
11974
0 commit comments