rust/hwphysics/benches/ecs_bench.rs
changeset 15935 cd3d16905e0e
child 15940 ea370bfda705
equal deleted inserted replaced
15934:d754d03e4dfe 15935:cd3d16905e0e
       
     1 use criterion::{black_box, criterion_group, criterion_main, Criterion};
       
     2 use hwphysics::{
       
     3     common::GearId,
       
     4     data::{GearDataManager}
       
     5 };
       
     6 
       
     7 #[derive(Clone, Copy, Default)]
       
     8 struct V {
       
     9     position: u64,
       
    10     velocity: u64
       
    11 }
       
    12 
       
    13 pub fn benchmark(c: &mut Criterion) {
       
    14     const SIZE: usize = 4 * 1024;
       
    15     let mut items = [V::default(); SIZE];
       
    16 
       
    17     c.bench_function("array run", |b| b.iter(|| {
       
    18         for item in &mut items {
       
    19             item.velocity += black_box(item.position);
       
    20         }
       
    21     }));
       
    22 
       
    23     let mut manager = GearDataManager::new();
       
    24     manager.register::<V>();
       
    25     for i in 1..=items.len() {
       
    26         let gear_id = GearId::new(i as u16).unwrap();
       
    27         manager.add(gear_id, &items[i - 1]);
       
    28     }
       
    29 
       
    30     c.bench_function("component run", |b| b.iter(|| {
       
    31         manager.iter().run(|(item,): (&mut V,)| item.velocity += black_box(item.position) );
       
    32     }));
       
    33 }
       
    34 
       
    35 criterion_group!(benches, benchmark);
       
    36 criterion_main!(benches);