Skip to content

Commit 0d0fa6a

Browse files
authored
Use run_system instead of SystemState for ECS benches (#23687)
# Objective We want to use `World::run_system` where possible - especially in older code that did not have the benefit of using it when it was written. This is a small step towards #23238. More work is needed on the unit tests and possibly elsewhere if this approach has been verified. ## Solution - Instead of `SystemState` I used a closure system and registered it. - I called the registered system with `World::run_system` inside the bench. ## Testing I ran the benches effected and found that they did not regress on my machine. Quick check: ```sh cargo bench -p benches --bench ecs -- 50000_entities_table ```
1 parent 249fc6f commit 0d0fa6a

1 file changed

Lines changed: 21 additions & 15 deletions

File tree

benches/benches/bevy_ecs/world/world_get.rs

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use bevy_ecs::{
55
bundle::{Bundle, NoBundleEffect},
66
component::Component,
77
entity::Entity,
8-
system::{Query, SystemState},
8+
system::Query,
99
world::{EntityMut, World},
1010
};
1111
use chacha20::ChaCha8Rng;
@@ -268,17 +268,19 @@ pub fn query_get(criterion: &mut Criterion) {
268268
.spawn_batch((0..entity_count).map(|_| Table::default()))
269269
.collect();
270270
entities.shuffle(&mut deterministic_rand());
271-
let mut query = SystemState::<Query<&Table>>::new(&mut world);
272-
let query = query.get(&world).unwrap();
273271

274-
bencher.iter(|| {
272+
let query = move |query: Query<&Table>| {
275273
let mut count = 0;
276274
for comp in entities.iter().flat_map(|&e| query.get(e)) {
277275
black_box(comp);
278276
count += 1;
279277
black_box(count);
280278
}
281279
assert_eq!(black_box(count), entity_count);
280+
};
281+
let query_id = world.register_system(query);
282+
bencher.iter(|| {
283+
world.run_system(query_id).unwrap();
282284
});
283285
});
284286
group.bench_function(format!("{entity_count}_entities_sparse"), |bencher| {
@@ -287,17 +289,19 @@ pub fn query_get(criterion: &mut Criterion) {
287289
.spawn_batch((0..entity_count).map(|_| Sparse::default()))
288290
.collect();
289291
entities.shuffle(&mut deterministic_rand());
290-
let mut query = SystemState::<Query<&Sparse>>::new(&mut world);
291-
let query = query.get(&world).unwrap();
292292

293-
bencher.iter(|| {
293+
let query = move |query: Query<&Sparse>| {
294294
let mut count = 0;
295295
for comp in entities.iter().flat_map(|&e| query.get(e)) {
296296
black_box(comp);
297297
count += 1;
298298
black_box(count);
299299
}
300300
assert_eq!(black_box(count), entity_count);
301+
};
302+
let query_id = world.register_system(query);
303+
bencher.iter(|| {
304+
world.run_system(query_id).unwrap();
301305
});
302306
});
303307
}
@@ -318,10 +322,7 @@ pub fn query_get_many<const N: usize>(criterion: &mut Criterion) {
318322
.collect();
319323
entity_groups.shuffle(&mut deterministic_rand());
320324

321-
let mut query = SystemState::<Query<&Table>>::new(&mut world);
322-
let query = query.get(&world).unwrap();
323-
324-
bencher.iter(|| {
325+
let query = move |query: Query<&Table>| {
325326
let mut count = 0;
326327
for comp in entity_groups
327328
.iter()
@@ -332,6 +333,10 @@ pub fn query_get_many<const N: usize>(criterion: &mut Criterion) {
332333
black_box(count);
333334
}
334335
assert_eq!(black_box(count), entity_count);
336+
};
337+
let query_id = world.register_system(query);
338+
bencher.iter(|| {
339+
world.run_system(query_id).unwrap();
335340
});
336341
});
337342
group.bench_function(format!("{entity_count}_calls_sparse"), |bencher| {
@@ -341,10 +346,7 @@ pub fn query_get_many<const N: usize>(criterion: &mut Criterion) {
341346
.collect();
342347
entity_groups.shuffle(&mut deterministic_rand());
343348

344-
let mut query = SystemState::<Query<&Sparse>>::new(&mut world);
345-
let query = query.get(&world).unwrap();
346-
347-
bencher.iter(|| {
349+
let query = move |query: Query<&Sparse>| {
348350
let mut count = 0;
349351
for comp in entity_groups
350352
.iter()
@@ -355,6 +357,10 @@ pub fn query_get_many<const N: usize>(criterion: &mut Criterion) {
355357
black_box(count);
356358
}
357359
assert_eq!(black_box(count), entity_count);
360+
};
361+
let query_id = world.register_system(query);
362+
bencher.iter(|| {
363+
world.run_system(query_id).unwrap();
358364
});
359365
});
360366
}

0 commit comments

Comments
 (0)