--- /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::<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);
\ No newline at end of file