15935
|
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); |