diff --git a/benches/benches/bevy_ecs/world/despawn.rs b/benches/benches/bevy_ecs/world/despawn.rs new file mode 100644 index 0000000000000..ace88e744a482 --- /dev/null +++ b/benches/benches/bevy_ecs/world/despawn.rs @@ -0,0 +1,32 @@ +use bevy_ecs::prelude::*; +use criterion::Criterion; +use glam::*; + +#[derive(Component)] +struct A(Mat4); +#[derive(Component)] +struct B(Vec4); + +pub fn world_despawn(criterion: &mut Criterion) { + let mut group = criterion.benchmark_group("despawn_world"); + group.warm_up_time(core::time::Duration::from_millis(500)); + group.measurement_time(core::time::Duration::from_secs(4)); + + for entity_count in (0..5).map(|i| 10_u32.pow(i)) { + let mut world = World::default(); + for _ in 0..entity_count { + world.spawn((A(Mat4::default()), B(Vec4::default()))); + } + + let ents = world.iter_entities().map(|e| e.id()).collect::>(); + group.bench_function(format!("{}_entities", entity_count), |bencher| { + bencher.iter(|| { + ents.iter().for_each(|e| { + world.despawn(*e); + }); + }); + }); + } + + group.finish(); +} diff --git a/benches/benches/bevy_ecs/world/despawn_recursive.rs b/benches/benches/bevy_ecs/world/despawn_recursive.rs new file mode 100644 index 0000000000000..3c2b523b5faa3 --- /dev/null +++ b/benches/benches/bevy_ecs/world/despawn_recursive.rs @@ -0,0 +1,39 @@ +use bevy_ecs::prelude::*; +use bevy_hierarchy::despawn_with_children_recursive; +use bevy_hierarchy::BuildChildren; +use bevy_hierarchy::ChildBuild; +use criterion::Criterion; +use glam::*; + +#[derive(Component)] +struct A(Mat4); +#[derive(Component)] +struct B(Vec4); + +pub fn world_despawn_recursive(criterion: &mut Criterion) { + let mut group = criterion.benchmark_group("despawn_world_recursive"); + group.warm_up_time(core::time::Duration::from_millis(500)); + group.measurement_time(core::time::Duration::from_secs(4)); + + for entity_count in (0..5).map(|i| 10_u32.pow(i)) { + let mut world = World::default(); + for _ in 0..entity_count { + world + .spawn((A(Mat4::default()), B(Vec4::default()))) + .with_children(|parent| { + parent.spawn((A(Mat4::default()), B(Vec4::default()))); + }); + } + + let ents = world.iter_entities().map(|e| e.id()).collect::>(); + group.bench_function(format!("{}_entities", entity_count), |bencher| { + bencher.iter(|| { + ents.iter().for_each(|e| { + despawn_with_children_recursive(&mut world, *e); + }); + }); + }); + } + + group.finish(); +} diff --git a/benches/benches/bevy_ecs/world/mod.rs b/benches/benches/bevy_ecs/world/mod.rs index 8b12a08fcd783..8af5e399018a1 100644 --- a/benches/benches/bevy_ecs/world/mod.rs +++ b/benches/benches/bevy_ecs/world/mod.rs @@ -3,6 +3,12 @@ use criterion::criterion_group; mod commands; use commands::*; +mod despawn; +use despawn::*; + +mod despawn_recursive; +use despawn_recursive::*; + mod spawn; use spawn::*; @@ -28,6 +34,8 @@ criterion_group!( world_query_iter, world_query_for_each, world_spawn, + world_despawn, + world_despawn_recursive, query_get, query_get_many::<2>, query_get_many::<5>,