/* Copyright (c) 2025 The Brave Authors. All rights reserved. *ThisSourceCodeFormissubjecttothetermsoftheMozillaPublic *License,v.2.0.IfacopyoftheMPLwasnotdistributedwiththisfile,
* You can obtain one at https://mozilla.org/MPL/2.0/. */
use criterion::*; use serde::{Deserialize, Serialize}; use std::alloc::{GlobalAlloc, Layout, System}; use std::sync::atomic::{AtomicUsize, Ordering};
use adblock::request::Request; use adblock::resources::Resource; use adblock::Engine;
#[path = "../tests/test_utils.rs"] mod test_utils; use test_utils::rules_from_lists;
letmut noise = 0; let all_requests = load_requests(); let first_1000_requests: Vec<_> = all_requests.iter().take(1000).collect();
letmut cb = |metric: fn() -> usize, run_requests: bool, b: &mut Bencher| { letmut result = 0;
b.iter_custom(|iters| { for _ in0..iters {
ALLOCATOR.reset(); let rules = rules_from_lists(&["data/brave/brave-main-list.txt"]); letmut engine = Engine::from_rules(rules, Default::default()); let resource_json =
std::fs::read_to_string("data/brave/brave-resources.json").unwrap(); let resource_list: Vec<Resource> = serde_json::from_str(&resource_json).unwrap();
std::mem::drop(resource_json);
engine.use_resources(resource_list);
if run_requests {
ALLOCATOR.reset(); for request in first_1000_requests.clone() {
criterion::black_box(engine.check_network_request(&request.into()));
}
}
noise += 1; // add some noise to make criterion happy
result += metric() + noise;
// Prevent engine from being optimized
criterion::black_box(&engine);
}
// Return the memory usage as a Duration
std::time::Duration::from_nanos(result as u64)
});
};
group.bench_function("brave-list-initial", |b| {
cb(|| ALLOCATOR.current_usage(), false, b)
});
group.bench_function("brave-list-initial/max", |b| {
cb(|| ALLOCATOR.max_usage(), false, b)
});
group.bench_function("brave-list-initial/alloc-count", |b| {
cb(|| ALLOCATOR.allocations_count(), false, b)
});
group.bench_function("brave-list-1000-requests", |b| {
cb(|| ALLOCATOR.current_usage(), true, b)
});
group.bench_function("brave-list-1000-requests/alloc-count", |b| {
cb(|| ALLOCATOR.allocations_count(), true, b)
});