equal
deleted
inserted
replaced
|
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); |