#![cfg_attr(crown, feature(register_tool))]
#![cfg_attr(crown, register_tool(crown))]
use std::hint::black_box;
use criterion::{Criterion, criterion_group, criterion_main};
use dom_struct::dom_struct;
use js::gc::Traceable as JSTraceable;
use jstraceable_derive::JSTraceable;
use malloc_size_of_derive::MallocSizeOf;
use script_bindings::inheritance::HasParent;
use script_bindings::reflector::{DomObject, MutDomObject, Reflector};
#[dom_struct]
struct BenchDom {
reflector: Reflector,
}
fn bench(c: &mut Criterion) {
let a = Box::new(BenchDom {
reflector: Reflector::new(),
});
let b = Box::new(BenchDom {
reflector: Reflector::new(),
});
let same = &*a;
let other = &*b;
c.bench_function("ptr_eq_same", |bencher| {
bencher.iter(|| black_box(std::ptr::eq(black_box(same), black_box(same))))
});
c.bench_function("ptr_eq_different", |bencher| {
bencher.iter(|| black_box(std::ptr::eq(black_box(same), black_box(other))))
});
c.bench_function("dom_eq_same", |bencher| {
bencher.iter(|| black_box(black_box(same) == black_box(same)))
});
c.bench_function("dom_eq_different", |bencher| {
bencher.iter(|| black_box(black_box(same) == black_box(other)))
});
}
criterion_group!(benches, bench);
criterion_main!(benches);