@@ -76,9 +76,11 @@ fn bench_matching_only(blocker: &Blocker, resources: &ResourceStorage, requests:
76
76
( matches, passes)
77
77
}
78
78
79
+ type ParsedRequest = ( String , String , String , String , bool ) ;
80
+
79
81
fn bench_rule_matching_browserlike (
80
82
blocker : & Engine ,
81
- requests : & Vec < ( String , String , String , String , bool ) > ,
83
+ requests : & Vec < ParsedRequest > ,
82
84
) -> ( u32 , u32 ) {
83
85
let mut matches = 0 ;
84
86
let mut passes = 0 ;
@@ -331,27 +333,60 @@ fn rule_match_browserlike_comparable(c: &mut Criterion) {
331
333
. collect :: < Vec < _ > > ( )
332
334
}
333
335
334
- let elep_req = requests_parsed ( & requests) ;
335
- let el_req = elep_req. clone ( ) ;
336
- let slim = elep_req. clone ( ) ;
336
+ let requests = requests_parsed ( & requests) ;
337
337
338
- group. bench_function ( "el+ep" , move |b| {
338
+ group. bench_function ( "el+ep" , |b| {
339
339
let rules = rules_from_lists ( & [
340
340
"data/easylist.to/easylist/easylist.txt" ,
341
341
"data/easylist.to/easylist/easyprivacy.txt" ,
342
342
] ) ;
343
343
let engine = Engine :: from_rules_parametrised ( rules, Default :: default ( ) , false , true ) ;
344
- b. iter ( || bench_rule_matching_browserlike ( & engine, & elep_req ) )
344
+ b. iter ( || bench_rule_matching_browserlike ( & engine, & requests ) )
345
345
} ) ;
346
- group. bench_function ( "el" , move |b| {
346
+ group. bench_function ( "el" , |b| {
347
347
let rules = rules_from_lists ( & [ "data/easylist.to/easylist/easylist.txt" ] ) ;
348
348
let engine = Engine :: from_rules_parametrised ( rules, Default :: default ( ) , false , true ) ;
349
- b. iter ( || bench_rule_matching_browserlike ( & engine, & el_req ) )
349
+ b. iter ( || bench_rule_matching_browserlike ( & engine, & requests ) )
350
350
} ) ;
351
- group. bench_function ( "slimlist" , move |b| {
351
+ group. bench_function ( "slimlist" , |b| {
352
352
let rules = rules_from_lists ( & [ "data/slim-list.txt" ] ) ;
353
353
let engine = Engine :: from_rules_parametrised ( rules, Default :: default ( ) , false , true ) ;
354
- b. iter ( || bench_rule_matching_browserlike ( & engine, & slim) )
354
+ b. iter ( || bench_rule_matching_browserlike ( & engine, & requests) )
355
+ } ) ;
356
+ group. bench_function ( "brave-list" , |b| {
357
+ let rules = rules_from_lists ( & [ "data/brave/brave-main-list.txt" ] ) ;
358
+ let engine = Engine :: from_rules_parametrised ( rules, Default :: default ( ) , false , true ) ;
359
+ b. iter ( || bench_rule_matching_browserlike ( & engine, & requests) )
360
+ } ) ;
361
+
362
+ group. finish ( ) ;
363
+ }
364
+
365
+ fn rule_match_first_request ( c : & mut Criterion ) {
366
+ let mut group = c. benchmark_group ( "rule-match-first-request" ) ;
367
+
368
+ group. sample_size ( 10 ) ;
369
+
370
+ let requests: Vec < ParsedRequest > = vec ! [ (
371
+ "https://example.com" . to_string( ) ,
372
+ "example.com" . to_string( ) ,
373
+ "example.com" . to_string( ) ,
374
+ "document" . to_string( ) ,
375
+ false ,
376
+ ) ] ;
377
+
378
+ group. bench_function ( "brave-list" , |b| {
379
+ b. iter_with_setup (
380
+ || {
381
+ // Setup: Create a fresh engine for each iteration
382
+ let rules = rules_from_lists ( & [ "data/brave/brave-main-list.txt" ] ) ;
383
+ Engine :: from_rules_parametrised ( rules, Default :: default ( ) , false , true )
384
+ } ,
385
+ |engine| {
386
+ // Measured: Single request check with fresh engine
387
+ bench_rule_matching_browserlike ( & engine, & requests)
388
+ }
389
+ )
355
390
} ) ;
356
391
357
392
group. finish ( ) ;
@@ -363,6 +398,7 @@ criterion_group!(
363
398
rule_match_parsed_el,
364
399
rule_match_parsed_elep_slimlist,
365
400
rule_match_browserlike_comparable,
401
+ rule_match_first_request,
366
402
serialization,
367
403
deserialization
368
404
) ;
0 commit comments