rust/hwphysics/benches/ecs_bench.rs
author alfadur
Thu, 23 Mar 2023 23:41:26 +0300
changeset 15935 cd3d16905e0e
child 15940 ea370bfda705
permissions -rw-r--r--
add basic ECS benchmark

use criterion::{black_box, criterion_group, criterion_main, Criterion};
use hwphysics::{
    common::GearId,
    data::{GearDataManager}
};

#[derive(Clone, Copy, Default)]
struct V {
    position: u64,
    velocity: u64
}

pub fn benchmark(c: &mut Criterion) {
    const SIZE: usize = 4 * 1024;
    let mut items = [V::default(); SIZE];

    c.bench_function("array run", |b| b.iter(|| {
        for item in &mut items {
            item.velocity += black_box(item.position);
        }
    }));

    let mut manager = GearDataManager::new();
    manager.register::<V>();
    for i in 1..=items.len() {
        let gear_id = GearId::new(i as u16).unwrap();
        manager.add(gear_id, &items[i - 1]);
    }

    c.bench_function("component run", |b| b.iter(|| {
        manager.iter().run(|(item,): (&mut V,)| item.velocity += black_box(item.position) );
    }));
}

criterion_group!(benches, benchmark);
criterion_main!(benches);