1
- #! [ cfg ( any ( ) ) ] // This attribute disables the entire module
1
+ use adblock :: Engine ;
2
2
use criterion:: * ;
3
3
4
- use adblock:: cosmetic_filter_cache:: CosmeticFilterCache ;
5
- use adblock:: lists:: { parse_filters, FilterFormat } ;
6
-
7
4
#[ path = "../tests/test_utils.rs" ]
8
5
mod 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
+ ] ;
10
23
11
24
fn 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 " ) ;
13
26
14
27
group. throughput ( Throughput :: Elements ( 1 ) ) ;
15
28
group. sample_size ( 20 ) ;
16
29
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
+ } )
44
38
} ) ;
45
39
46
40
group. finish ( ) ;
@@ -52,68 +46,29 @@ fn by_classes_ids(c: &mut Criterion) {
52
46
group. throughput ( Throughput :: Elements ( 1 ) ) ;
53
47
group. sample_size ( 20 ) ;
54
48
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 ! [ ] ;
116
51
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
+ } ) ;
117
72
group. finish ( ) ;
118
73
}
119
74
0 commit comments