Skip to content

Commit fda7daa

Browse files
micro-benches
1 parent 0e49f63 commit fda7daa

2 files changed

Lines changed: 71 additions & 0 deletions

File tree

benches/benches/bevy_ecs/main.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@ mod fragmentation;
1515
mod iteration;
1616
mod observers;
1717
mod param;
18+
mod resources;
1819
mod scheduling;
1920
mod world;
2021

2122
criterion_main!(
2223
bundles::benches,
2324
change_detection::benches,
2425
components::benches,
26+
resources::benches,
2527
empty_archetypes::benches,
2628
entity_cloning::benches,
2729
events::benches,
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
use std::{alloc::Layout, hint::black_box, ptr::NonNull};
2+
3+
use benches::bench;
4+
use bevy_ecs::{
5+
change_detection::MaybeLocation,
6+
component::{ComponentCloneBehavior, ComponentDescriptor, StorageType},
7+
prelude::*,
8+
ptr::OwningPtr,
9+
};
10+
use criterion::{criterion_group, Criterion};
11+
12+
criterion_group!(benches, get, get_mut, insert_remove);
13+
14+
fn create_world() -> World {
15+
let mut world = World::new();
16+
for _ in 0..500 {
17+
// SAFETY: Uses zero-sized value, never drops
18+
unsafe {
19+
let resource_id =
20+
world.register_component_with_descriptor(ComponentDescriptor::new_with_layout(
21+
"",
22+
StorageType::SparseSet,
23+
Layout::new::<()>(),
24+
None,
25+
true,
26+
ComponentCloneBehavior::Default,
27+
None,
28+
));
29+
world.insert_resource_by_id(
30+
resource_id,
31+
OwningPtr::new(NonNull::dangling()),
32+
MaybeLocation::caller(),
33+
);
34+
}
35+
}
36+
world
37+
}
38+
39+
#[derive(Resource)]
40+
struct R;
41+
42+
pub fn get(criterion: &mut Criterion) {
43+
let mut world = create_world();
44+
world.insert_resource(R);
45+
criterion.bench_function(bench!("get"), |bencher| {
46+
bencher.iter(|| world.get_resource::<R>());
47+
});
48+
}
49+
50+
pub fn get_mut(criterion: &mut Criterion) {
51+
let mut world = create_world();
52+
world.insert_resource(R);
53+
criterion.bench_function(bench!("get_mut"), |bencher| {
54+
bencher.iter(|| {
55+
black_box(world.get_resource_mut::<R>());
56+
});
57+
});
58+
}
59+
60+
pub fn insert_remove(criterion: &mut Criterion) {
61+
let mut world = create_world();
62+
criterion.bench_function(bench!("insert_remove"), |bencher| {
63+
bencher.iter(|| {
64+
world.insert_resource(R);
65+
black_box(&mut world);
66+
world.remove_resource::<R>()
67+
});
68+
});
69+
}

0 commit comments

Comments
 (0)