diff -r d754d03e4dfe -r cd3d16905e0e rust/hwphysics/benches/ecs_bench.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rust/hwphysics/benches/ecs_bench.rs Thu Mar 23 23:41:26 2023 +0300 @@ -0,0 +1,36 @@ +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::(); + 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); \ No newline at end of file