From 5d26f56eb9404d14b8272ce8fa47e7eb318c2b18 Mon Sep 17 00:00:00 2001 From: BD103 <59022059+BD103@users.noreply.github.com> Date: Wed, 4 Dec 2024 11:20:11 -0500 Subject: [PATCH 1/9] refactor: organize benches to be consistent --- benches/Cargo.toml | 54 +++++-------------- benches/benches/bevy_ecs/change_detection.rs | 5 +- benches/benches/bevy_ecs/empty_archetypes.rs | 28 +++++----- .../benches/bevy_ecs/{benches.rs => main.rs} | 4 ++ benches/benches/bevy_ecs/world/entity_hash.rs | 5 +- benches/benches/bevy_ecs/world/mod.rs | 2 +- benches/benches/bevy_math/bezier.rs | 3 +- benches/benches/bevy_math/main.rs | 7 +++ benches/benches/bevy_picking/main.rs | 7 +++ .../bevy_picking/ray_mesh_intersection.rs | 3 +- benches/benches/bevy_reflect/function.rs | 3 +- benches/benches/bevy_reflect/list.rs | 3 +- benches/benches/bevy_reflect/main.rs | 15 ++++++ benches/benches/bevy_reflect/map.rs | 3 +- benches/benches/bevy_reflect/path.rs | 3 +- benches/benches/bevy_reflect/struct.rs | 3 +- benches/benches/bevy_render/main.rs | 9 ++++ benches/benches/bevy_render/render_layers.rs | 3 +- benches/benches/bevy_render/torus.rs | 5 +- benches/benches/bevy_tasks/iter.rs | 3 +- benches/benches/bevy_tasks/main.rs | 5 ++ 21 files changed, 88 insertions(+), 85 deletions(-) rename benches/benches/bevy_ecs/{benches.rs => main.rs} (79%) create mode 100644 benches/benches/bevy_math/main.rs create mode 100644 benches/benches/bevy_picking/main.rs create mode 100644 benches/benches/bevy_reflect/main.rs create mode 100644 benches/benches/bevy_render/main.rs create mode 100644 benches/benches/bevy_tasks/main.rs diff --git a/benches/Cargo.toml b/benches/Cargo.toml index 6375af6d5e198..17b98eaaaf6d8 100644 --- a/benches/Cargo.toml +++ b/benches/Cargo.toml @@ -4,6 +4,8 @@ edition = "2021" description = "Benchmarks that test Bevy's performance" publish = false license = "MIT OR Apache-2.0" +# Do not automatically discover benchmarks, we specify them manually instead. +autobenches = false [dev-dependencies] glam = "0.29" @@ -30,62 +32,32 @@ bevy_winit = { path = "../crates/bevy_winit", features = ["x11"] } opt-level = 3 lto = true -[[bench]] -name = "change_detection" -path = "benches/bevy_ecs/change_detection.rs" -harness = false - [[bench]] name = "ecs" -path = "benches/bevy_ecs/benches.rs" -harness = false - -[[bench]] -name = "ray_mesh_intersection" -path = "benches/bevy_picking/ray_mesh_intersection.rs" -harness = false - -[[bench]] -name = "reflect_function" -path = "benches/bevy_reflect/function.rs" -harness = false - -[[bench]] -name = "reflect_list" -path = "benches/bevy_reflect/list.rs" -harness = false - -[[bench]] -name = "reflect_map" -path = "benches/bevy_reflect/map.rs" -harness = false - -[[bench]] -name = "reflect_struct" -path = "benches/bevy_reflect/struct.rs" +path = "benches/bevy_ecs/main.rs" harness = false [[bench]] -name = "parse_reflect_path" -path = "benches/bevy_reflect/path.rs" +name = "math" +path = "benches/bevy_math/main.rs" harness = false [[bench]] -name = "iter" -path = "benches/bevy_tasks/iter.rs" +name = "picking" +path = "benches/bevy_picking/main.rs" harness = false [[bench]] -name = "bezier" -path = "benches/bevy_math/bezier.rs" +name = "reflect" +path = "benches/bevy_reflect/main.rs" harness = false [[bench]] -name = "torus" -path = "benches/bevy_render/torus.rs" +name = "render" +path = "benches/bevy_render/main.rs" harness = false [[bench]] -name = "entity_hash" -path = "benches/bevy_ecs/world/entity_hash.rs" +name = "tasks" +path = "benches/bevy_tasks/main.rs" harness = false diff --git a/benches/benches/bevy_ecs/change_detection.rs b/benches/benches/bevy_ecs/change_detection.rs index f0a3eaa61466d..3f9f1d4bc1c53 100644 --- a/benches/benches/bevy_ecs/change_detection.rs +++ b/benches/benches/bevy_ecs/change_detection.rs @@ -5,19 +5,18 @@ use bevy_ecs::{ query::QueryFilter, world::World, }; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use criterion::{black_box, criterion_group, Criterion}; use rand::{prelude::SliceRandom, SeedableRng}; use rand_chacha::ChaCha8Rng; criterion_group!( - benches, + change_detection_benches, all_added_detection, all_changed_detection, few_changed_detection, none_changed_detection, multiple_archetype_none_changed_detection ); -criterion_main!(benches); macro_rules! modify { ($components:ident;$($index:tt),*) => { diff --git a/benches/benches/bevy_ecs/empty_archetypes.rs b/benches/benches/bevy_ecs/empty_archetypes.rs index d6521303f6fc0..254dde461454a 100644 --- a/benches/benches/bevy_ecs/empty_archetypes.rs +++ b/benches/benches/bevy_ecs/empty_archetypes.rs @@ -1,9 +1,7 @@ use bevy_ecs::{component::Component, prelude::*, world::World}; -use bevy_tasks::{ComputeTaskPool, TaskPool}; -use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion}; +use criterion::{black_box, criterion_group, BenchmarkId, Criterion}; -criterion_group!(benches, empty_archetypes); -criterion_main!(benches); +criterion_group!(empty_archetypes_benches, empty_archetypes); #[derive(Component)] struct A(f32); @@ -47,13 +45,12 @@ fn for_each( &A<12>, )>, ) { - query.for_each(|comp| { + query.iter().for_each(|comp| { black_box(comp); }); } fn par_for_each( - task_pool: Res, query: Query<( &A<0>, &A<1>, @@ -70,17 +67,18 @@ fn par_for_each( &A<12>, )>, ) { - query.par_for_each(&*task_pool, 64, |comp| { + query.par_iter().for_each(|comp| { black_box(comp); }); } +#[expect( + unused_variables, + reason = "`parallel` has no effect, it needs to be removed or parallel support needs to be re-added." +)] fn setup(parallel: bool, setup: impl FnOnce(&mut Schedule)) -> (World, Schedule) { - let mut world = World::new(); + let world = World::new(); let mut schedule = Schedule::default(); - if parallel { - world.insert_resource(ComputeTaskPool(TaskPool::default())); - } setup(&mut schedule); (world, schedule) } @@ -88,7 +86,7 @@ fn setup(parallel: bool, setup: impl FnOnce(&mut Schedule)) -> (World, Schedule) /// create `count` entities with distinct archetypes fn add_archetypes(world: &mut World, count: u16) { for i in 0..count { - let mut e = world.spawn(); + let mut e = world.spawn_empty(); e.insert(A::<0>(1.0)); e.insert(A::<1>(1.0)); e.insert(A::<2>(1.0)); @@ -158,7 +156,7 @@ fn empty_archetypes(criterion: &mut Criterion) { }); add_archetypes(&mut world, archetype_count); world.clear_entities(); - let mut e = world.spawn(); + let mut e = world.spawn_empty(); e.insert(A::<0>(1.0)); e.insert(A::<1>(1.0)); e.insert(A::<2>(1.0)); @@ -189,7 +187,7 @@ fn empty_archetypes(criterion: &mut Criterion) { }); add_archetypes(&mut world, archetype_count); world.clear_entities(); - let mut e = world.spawn(); + let mut e = world.spawn_empty(); e.insert(A::<0>(1.0)); e.insert(A::<1>(1.0)); e.insert(A::<2>(1.0)); @@ -220,7 +218,7 @@ fn empty_archetypes(criterion: &mut Criterion) { }); add_archetypes(&mut world, archetype_count); world.clear_entities(); - let mut e = world.spawn(); + let mut e = world.spawn_empty(); e.insert(A::<0>(1.0)); e.insert(A::<1>(1.0)); e.insert(A::<2>(1.0)); diff --git a/benches/benches/bevy_ecs/benches.rs b/benches/benches/bevy_ecs/main.rs similarity index 79% rename from benches/benches/bevy_ecs/benches.rs rename to benches/benches/bevy_ecs/main.rs index 58300bda95b5c..b60492b41f397 100644 --- a/benches/benches/bevy_ecs/benches.rs +++ b/benches/benches/bevy_ecs/main.rs @@ -2,7 +2,9 @@ use criterion::criterion_main; +mod change_detection; mod components; +mod empty_archetypes; mod events; mod fragmentation; mod iteration; @@ -12,7 +14,9 @@ mod scheduling; mod world; criterion_main!( + change_detection::change_detection_benches, components::components_benches, + empty_archetypes::empty_archetypes_benches, events::event_benches, iteration::iterations_benches, fragmentation::fragmentation_benches, diff --git a/benches/benches/bevy_ecs/world/entity_hash.rs b/benches/benches/bevy_ecs/world/entity_hash.rs index 3bd148d90da63..d4ba9b659820f 100644 --- a/benches/benches/bevy_ecs/world/entity_hash.rs +++ b/benches/benches/bevy_ecs/world/entity_hash.rs @@ -1,11 +1,8 @@ use bevy_ecs::entity::{Entity, EntityHashSet}; -use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput}; +use criterion::{BenchmarkId, Criterion, Throughput}; use rand::{Rng, SeedableRng}; use rand_chacha::ChaCha8Rng; -criterion_group!(benches, entity_set_build_and_lookup,); -criterion_main!(benches); - const SIZES: [usize; 5] = [100, 316, 1000, 3162, 10000]; fn make_entity(rng: &mut impl Rng, size: usize) -> Entity { diff --git a/benches/benches/bevy_ecs/world/mod.rs b/benches/benches/bevy_ecs/world/mod.rs index a88f034776852..652221c126872 100644 --- a/benches/benches/bevy_ecs/world/mod.rs +++ b/benches/benches/bevy_ecs/world/mod.rs @@ -39,5 +39,5 @@ criterion_group!( query_get_many::<2>, query_get_many::<5>, query_get_many::<10>, - entity_set_build_and_lookup + entity_set_build_and_lookup, ); diff --git a/benches/benches/bevy_math/bezier.rs b/benches/benches/bevy_math/bezier.rs index 4728d2b058ef0..c367cb30298dd 100644 --- a/benches/benches/bevy_math/bezier.rs +++ b/benches/benches/bevy_math/bezier.rs @@ -1,4 +1,4 @@ -use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use criterion::{black_box, criterion_group, Criterion}; use bevy_math::prelude::*; @@ -92,4 +92,3 @@ criterion_group!( build_pos_cubic, build_accel_cubic, ); -criterion_main!(benches); diff --git a/benches/benches/bevy_math/main.rs b/benches/benches/bevy_math/main.rs new file mode 100644 index 0000000000000..56f2904bcd866 --- /dev/null +++ b/benches/benches/bevy_math/main.rs @@ -0,0 +1,7 @@ +use criterion::criterion_main; + +mod bezier; + +criterion_main!( + bezier::benches, +); diff --git a/benches/benches/bevy_picking/main.rs b/benches/benches/bevy_picking/main.rs new file mode 100644 index 0000000000000..c9177c0080aba --- /dev/null +++ b/benches/benches/bevy_picking/main.rs @@ -0,0 +1,7 @@ +use criterion::criterion_main; + +mod ray_mesh_intersection; + +criterion_main!( + ray_mesh_intersection::benches, +); diff --git a/benches/benches/bevy_picking/ray_mesh_intersection.rs b/benches/benches/bevy_picking/ray_mesh_intersection.rs index f451b790612c3..1d019d43ee37f 100644 --- a/benches/benches/bevy_picking/ray_mesh_intersection.rs +++ b/benches/benches/bevy_picking/ray_mesh_intersection.rs @@ -1,6 +1,6 @@ use bevy_math::{Dir3, Mat4, Ray3d, Vec3}; use bevy_picking::mesh_picking::ray_cast; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use criterion::{black_box, criterion_group, Criterion}; fn ptoxznorm(p: u32, size: u32) -> (f32, f32) { let ij = (p / (size), p % (size)); @@ -117,4 +117,3 @@ criterion_group!( ray_mesh_intersection_no_cull, ray_mesh_intersection_no_intersection ); -criterion_main!(benches); diff --git a/benches/benches/bevy_reflect/function.rs b/benches/benches/bevy_reflect/function.rs index 03673d3a9a2eb..7489130418896 100644 --- a/benches/benches/bevy_reflect/function.rs +++ b/benches/benches/bevy_reflect/function.rs @@ -1,8 +1,7 @@ use bevy_reflect::func::{ArgList, IntoFunction, IntoFunctionMut, TypedFunction}; -use criterion::{criterion_group, criterion_main, BatchSize, Criterion}; +use criterion::{criterion_group, BatchSize, Criterion}; criterion_group!(benches, typed, into, call, clone); -criterion_main!(benches); fn add(a: i32, b: i32) -> i32 { a + b diff --git a/benches/benches/bevy_reflect/list.rs b/benches/benches/bevy_reflect/list.rs index e5fffaa3cddf0..c02205e3f941f 100644 --- a/benches/benches/bevy_reflect/list.rs +++ b/benches/benches/bevy_reflect/list.rs @@ -2,7 +2,7 @@ use core::{iter, time::Duration}; use bevy_reflect::{DynamicList, List}; use criterion::{ - black_box, criterion_group, criterion_main, measurement::Measurement, BatchSize, + black_box, criterion_group, measurement::Measurement, BatchSize, BenchmarkGroup, BenchmarkId, Criterion, Throughput, }; @@ -13,7 +13,6 @@ criterion_group!( dynamic_list_apply, dynamic_list_push ); -criterion_main!(benches); const WARM_UP_TIME: Duration = Duration::from_millis(500); const MEASUREMENT_TIME: Duration = Duration::from_secs(4); diff --git a/benches/benches/bevy_reflect/main.rs b/benches/benches/bevy_reflect/main.rs new file mode 100644 index 0000000000000..3785652295318 --- /dev/null +++ b/benches/benches/bevy_reflect/main.rs @@ -0,0 +1,15 @@ +use criterion::criterion_main; + +mod function; +mod list; +mod map; +mod path; +mod r#struct; + +criterion_main!( + function::benches, + list::benches, + map::benches, + path::benches, + r#struct::benches, +); diff --git a/benches/benches/bevy_reflect/map.rs b/benches/benches/bevy_reflect/map.rs index ae3894881358e..8857cb9facd7e 100644 --- a/benches/benches/bevy_reflect/map.rs +++ b/benches/benches/bevy_reflect/map.rs @@ -3,7 +3,7 @@ use core::{fmt::Write, iter, time::Duration}; use bevy_reflect::{DynamicMap, Map}; use bevy_utils::HashMap; use criterion::{ - black_box, criterion_group, criterion_main, measurement::Measurement, BatchSize, + black_box, criterion_group, measurement::Measurement, BatchSize, BenchmarkGroup, BenchmarkId, Criterion, Throughput, }; @@ -14,7 +14,6 @@ criterion_group!( dynamic_map_get, dynamic_map_insert ); -criterion_main!(benches); const WARM_UP_TIME: Duration = Duration::from_millis(500); const MEASUREMENT_TIME: Duration = Duration::from_secs(4); diff --git a/benches/benches/bevy_reflect/path.rs b/benches/benches/bevy_reflect/path.rs index f18885132ac3f..576884191df56 100644 --- a/benches/benches/bevy_reflect/path.rs +++ b/benches/benches/bevy_reflect/path.rs @@ -2,13 +2,12 @@ use core::{fmt::Write, str, time::Duration}; use bevy_reflect::ParsedPath; use criterion::{ - black_box, criterion_group, criterion_main, BatchSize, BenchmarkId, Criterion, Throughput, + black_box, criterion_group, BatchSize, BenchmarkId, Criterion, Throughput, }; use rand::{distributions::Uniform, Rng, SeedableRng}; use rand_chacha::ChaCha8Rng; criterion_group!(benches, parse_reflect_path); -criterion_main!(benches); const WARM_UP_TIME: Duration = Duration::from_millis(500); const MEASUREMENT_TIME: Duration = Duration::from_secs(2); diff --git a/benches/benches/bevy_reflect/struct.rs b/benches/benches/bevy_reflect/struct.rs index 0a38088666f84..9b73a1d850563 100644 --- a/benches/benches/bevy_reflect/struct.rs +++ b/benches/benches/bevy_reflect/struct.rs @@ -2,7 +2,7 @@ use core::time::Duration; use bevy_reflect::{DynamicStruct, GetField, PartialReflect, Reflect, Struct}; use criterion::{ - black_box, criterion_group, criterion_main, BatchSize, BenchmarkId, Criterion, Throughput, + black_box, criterion_group, BatchSize, BenchmarkId, Criterion, Throughput, }; criterion_group!( @@ -16,7 +16,6 @@ criterion_group!( dynamic_struct_get_field, dynamic_struct_insert, ); -criterion_main!(benches); const WARM_UP_TIME: Duration = Duration::from_millis(500); const MEASUREMENT_TIME: Duration = Duration::from_secs(4); diff --git a/benches/benches/bevy_render/main.rs b/benches/benches/bevy_render/main.rs new file mode 100644 index 0000000000000..e3987123ebc1c --- /dev/null +++ b/benches/benches/bevy_render/main.rs @@ -0,0 +1,9 @@ +use criterion::criterion_main; + +mod render_layers; +mod torus; + +criterion_main!( + render_layers::benches, + torus::benches, +); diff --git a/benches/benches/bevy_render/render_layers.rs b/benches/benches/bevy_render/render_layers.rs index 84f6b8907754c..409079f202d06 100644 --- a/benches/benches/bevy_render/render_layers.rs +++ b/benches/benches/bevy_render/render_layers.rs @@ -1,4 +1,4 @@ -use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use criterion::{black_box, criterion_group, Criterion}; use bevy_render::view::RenderLayers; @@ -16,4 +16,3 @@ criterion_group!( benches, render_layers, ); -criterion_main!(benches); diff --git a/benches/benches/bevy_render/torus.rs b/benches/benches/bevy_render/torus.rs index 199cc7ce4c5ef..a5ef753bc8ccb 100644 --- a/benches/benches/bevy_render/torus.rs +++ b/benches/benches/bevy_render/torus.rs @@ -1,4 +1,4 @@ -use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use criterion::{black_box, criterion_group, Criterion}; use bevy_render::mesh::TorusMeshBuilder; @@ -8,5 +8,4 @@ fn torus(c: &mut Criterion) { }); } -criterion_group!(benches, torus,); -criterion_main!(benches); +criterion_group!(benches, torus); diff --git a/benches/benches/bevy_tasks/iter.rs b/benches/benches/bevy_tasks/iter.rs index 3d4410926cf11..4f8f75c8ed0e8 100644 --- a/benches/benches/bevy_tasks/iter.rs +++ b/benches/benches/bevy_tasks/iter.rs @@ -1,5 +1,5 @@ use bevy_tasks::{ParallelIterator, TaskPoolBuilder}; -use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion}; +use criterion::{black_box, criterion_group, BenchmarkId, Criterion}; struct ParChunks<'a, T>(core::slice::Chunks<'a, T>); impl<'a, T> ParallelIterator> for ParChunks<'a, T> @@ -141,4 +141,3 @@ fn bench_many_maps(c: &mut Criterion) { } criterion_group!(benches, bench_overhead, bench_for_each, bench_many_maps); -criterion_main!(benches); diff --git a/benches/benches/bevy_tasks/main.rs b/benches/benches/bevy_tasks/main.rs new file mode 100644 index 0000000000000..cfe74f5dca3de --- /dev/null +++ b/benches/benches/bevy_tasks/main.rs @@ -0,0 +1,5 @@ +use criterion::criterion_main; + +mod iter; + +criterion_main!(iter::benches); From afc8d33a87d52df65d52392d207acfdfe189f5b2 Mon Sep 17 00:00:00 2001 From: BD103 <59022059+BD103@users.noreply.github.com> Date: Wed, 4 Dec 2024 11:21:22 -0500 Subject: [PATCH 2/9] refactor: run rustfmt --- benches/benches/bevy_ecs/components/mod.rs | 2 +- benches/benches/bevy_ecs/fragmentation/mod.rs | 2 +- benches/benches/bevy_ecs/main.rs | 5 ++++- benches/benches/bevy_math/main.rs | 4 +--- benches/benches/bevy_picking/main.rs | 4 +--- benches/benches/bevy_reflect/list.rs | 4 ++-- benches/benches/bevy_reflect/map.rs | 4 ++-- benches/benches/bevy_reflect/path.rs | 4 +--- benches/benches/bevy_reflect/struct.rs | 4 +--- benches/benches/bevy_render/main.rs | 5 +---- benches/benches/bevy_render/render_layers.rs | 9 ++------- 11 files changed, 17 insertions(+), 30 deletions(-) diff --git a/benches/benches/bevy_ecs/components/mod.rs b/benches/benches/bevy_ecs/components/mod.rs index f696d33870756..e77e23d730a4e 100644 --- a/benches/benches/bevy_ecs/components/mod.rs +++ b/benches/benches/bevy_ecs/components/mod.rs @@ -1,11 +1,11 @@ use criterion::*; +mod add_remove; mod add_remove_big_sparse_set; mod add_remove_big_table; mod add_remove_sparse_set; mod add_remove_table; mod add_remove_very_big_table; -mod add_remove; mod archetype_updates; mod insert_simple; mod insert_simple_unbatched; diff --git a/benches/benches/bevy_ecs/fragmentation/mod.rs b/benches/benches/bevy_ecs/fragmentation/mod.rs index ae44aae4a48c5..0f9396a409652 100644 --- a/benches/benches/bevy_ecs/fragmentation/mod.rs +++ b/benches/benches/bevy_ecs/fragmentation/mod.rs @@ -1,8 +1,8 @@ use bevy_ecs::prelude::*; use bevy_ecs::system::SystemState; +use core::hint::black_box; use criterion::*; use glam::*; -use core::hint::black_box; criterion_group!(fragmentation_benches, iter_frag_empty); diff --git a/benches/benches/bevy_ecs/main.rs b/benches/benches/bevy_ecs/main.rs index b60492b41f397..7c1c8684cef6b 100644 --- a/benches/benches/bevy_ecs/main.rs +++ b/benches/benches/bevy_ecs/main.rs @@ -1,4 +1,7 @@ -#![expect(dead_code, reason = "Many fields are unused/unread as they are just for benchmarking purposes.")] +#![expect( + dead_code, + reason = "Many fields are unused/unread as they are just for benchmarking purposes." +)] use criterion::criterion_main; diff --git a/benches/benches/bevy_math/main.rs b/benches/benches/bevy_math/main.rs index 56f2904bcd866..7b84b6d60f41b 100644 --- a/benches/benches/bevy_math/main.rs +++ b/benches/benches/bevy_math/main.rs @@ -2,6 +2,4 @@ use criterion::criterion_main; mod bezier; -criterion_main!( - bezier::benches, -); +criterion_main!(bezier::benches); diff --git a/benches/benches/bevy_picking/main.rs b/benches/benches/bevy_picking/main.rs index c9177c0080aba..d3939d82ee6fc 100644 --- a/benches/benches/bevy_picking/main.rs +++ b/benches/benches/bevy_picking/main.rs @@ -2,6 +2,4 @@ use criterion::criterion_main; mod ray_mesh_intersection; -criterion_main!( - ray_mesh_intersection::benches, -); +criterion_main!(ray_mesh_intersection::benches); diff --git a/benches/benches/bevy_reflect/list.rs b/benches/benches/bevy_reflect/list.rs index c02205e3f941f..d9c92dd03ef06 100644 --- a/benches/benches/bevy_reflect/list.rs +++ b/benches/benches/bevy_reflect/list.rs @@ -2,8 +2,8 @@ use core::{iter, time::Duration}; use bevy_reflect::{DynamicList, List}; use criterion::{ - black_box, criterion_group, measurement::Measurement, BatchSize, - BenchmarkGroup, BenchmarkId, Criterion, Throughput, + black_box, criterion_group, measurement::Measurement, BatchSize, BenchmarkGroup, BenchmarkId, + Criterion, Throughput, }; criterion_group!( diff --git a/benches/benches/bevy_reflect/map.rs b/benches/benches/bevy_reflect/map.rs index 8857cb9facd7e..69963316b61d2 100644 --- a/benches/benches/bevy_reflect/map.rs +++ b/benches/benches/bevy_reflect/map.rs @@ -3,8 +3,8 @@ use core::{fmt::Write, iter, time::Duration}; use bevy_reflect::{DynamicMap, Map}; use bevy_utils::HashMap; use criterion::{ - black_box, criterion_group, measurement::Measurement, BatchSize, - BenchmarkGroup, BenchmarkId, Criterion, Throughput, + black_box, criterion_group, measurement::Measurement, BatchSize, BenchmarkGroup, BenchmarkId, + Criterion, Throughput, }; criterion_group!( diff --git a/benches/benches/bevy_reflect/path.rs b/benches/benches/bevy_reflect/path.rs index 576884191df56..fa5582982b606 100644 --- a/benches/benches/bevy_reflect/path.rs +++ b/benches/benches/bevy_reflect/path.rs @@ -1,9 +1,7 @@ use core::{fmt::Write, str, time::Duration}; use bevy_reflect::ParsedPath; -use criterion::{ - black_box, criterion_group, BatchSize, BenchmarkId, Criterion, Throughput, -}; +use criterion::{black_box, criterion_group, BatchSize, BenchmarkId, Criterion, Throughput}; use rand::{distributions::Uniform, Rng, SeedableRng}; use rand_chacha::ChaCha8Rng; diff --git a/benches/benches/bevy_reflect/struct.rs b/benches/benches/bevy_reflect/struct.rs index 9b73a1d850563..5fc3a462c5762 100644 --- a/benches/benches/bevy_reflect/struct.rs +++ b/benches/benches/bevy_reflect/struct.rs @@ -1,9 +1,7 @@ use core::time::Duration; use bevy_reflect::{DynamicStruct, GetField, PartialReflect, Reflect, Struct}; -use criterion::{ - black_box, criterion_group, BatchSize, BenchmarkId, Criterion, Throughput, -}; +use criterion::{black_box, criterion_group, BatchSize, BenchmarkId, Criterion, Throughput}; criterion_group!( benches, diff --git a/benches/benches/bevy_render/main.rs b/benches/benches/bevy_render/main.rs index e3987123ebc1c..7a369bc905705 100644 --- a/benches/benches/bevy_render/main.rs +++ b/benches/benches/bevy_render/main.rs @@ -3,7 +3,4 @@ use criterion::criterion_main; mod render_layers; mod torus; -criterion_main!( - render_layers::benches, - torus::benches, -); +criterion_main!(render_layers::benches, torus::benches); diff --git a/benches/benches/bevy_render/render_layers.rs b/benches/benches/bevy_render/render_layers.rs index 409079f202d06..42dd5356b55ed 100644 --- a/benches/benches/bevy_render/render_layers.rs +++ b/benches/benches/bevy_render/render_layers.rs @@ -6,13 +6,8 @@ fn render_layers(c: &mut Criterion) { c.bench_function("layers_intersect", |b| { let layer_a = RenderLayers::layer(1).with(2); let layer_b = RenderLayers::layer(1); - b.iter(|| { - black_box(layer_a.intersects(&layer_b)) - }); + b.iter(|| black_box(layer_a.intersects(&layer_b))); }); } -criterion_group!( - benches, - render_layers, -); +criterion_group!(benches, render_layers); From d6cdf960abe27bf68a19fdcd5aa97d4aedd2d314 Mon Sep 17 00:00:00 2001 From: BD103 <59022059+BD103@users.noreply.github.com> Date: Sat, 7 Dec 2024 10:15:57 -0500 Subject: [PATCH 3/9] chore: fix several clippy lints --- benches/benches/bevy_ecs/change_detection.rs | 10 +++++----- benches/benches/bevy_ecs/iteration/mod.rs | 2 +- benches/benches/bevy_ecs/main.rs | 1 + benches/benches/bevy_ecs/observers/propagation.rs | 8 ++++---- benches/benches/bevy_ecs/scheduling/run_condition.rs | 8 ++++---- benches/benches/bevy_ecs/scheduling/running_systems.rs | 8 ++++---- benches/benches/bevy_ecs/scheduling/schedule.rs | 2 +- benches/benches/bevy_ecs/world/world_get.rs | 2 +- benches/benches/bevy_reflect/main.rs | 2 ++ benches/benches/bevy_reflect/path.rs | 6 +++--- 10 files changed, 26 insertions(+), 23 deletions(-) diff --git a/benches/benches/bevy_ecs/change_detection.rs b/benches/benches/bevy_ecs/change_detection.rs index 3f9f1d4bc1c53..7414dae65f2ea 100644 --- a/benches/benches/bevy_ecs/change_detection.rs +++ b/benches/benches/bevy_ecs/change_detection.rs @@ -95,7 +95,7 @@ fn all_added_detection_generic(group: &mut BenchGroup, e }, |(ref mut world, ref mut query)| { let mut count = 0; - for entity in query.iter(&world) { + for entity in query.iter(world) { black_box(entity); count += 1; } @@ -143,7 +143,7 @@ fn all_changed_detection_generic + Default + }, |(ref mut world, ref mut query)| { let mut count = 0; - for entity in query.iter(&world) { + for entity in query.iter(world) { black_box(entity); count += 1; } @@ -195,7 +195,7 @@ fn few_changed_detection_generic + Default + (world, query) }, |(ref mut world, ref mut query)| { - for entity in query.iter(&world) { + for entity in query.iter(world) { black_box(entity); } }, @@ -237,7 +237,7 @@ fn none_changed_detection_generic + Default>( }, |(ref mut world, ref mut query)| { let mut count = 0; - for entity in query.iter(&world) { + for entity in query.iter(world) { black_box(entity); count += 1; } @@ -341,7 +341,7 @@ fn multiple_archetype_none_changed_detection_generic Event for TestEvent { const AUTO_PROPAGATE: bool = true; } -fn send_events(world: &mut World, leaves: &Vec) { +fn send_events(world: &mut World, leaves: &[Entity]) { let target = leaves.iter().choose(&mut rand::thread_rng()).unwrap(); (0..N_EVENTS).for_each(|_| { @@ -100,9 +100,9 @@ fn spawn_listener_hierarchy(world: &mut World) -> (Vec, Vec, Vec } fn add_listeners_to_hierarchy( - roots: &Vec, - leaves: &Vec, - nodes: &Vec, + roots: &[Entity], + leaves: &[Entity], + nodes: &[Entity], world: &mut World, ) { for e in roots.iter() { diff --git a/benches/benches/bevy_ecs/scheduling/run_condition.rs b/benches/benches/bevy_ecs/scheduling/run_condition.rs index c88d89b1fe8f8..0d6e4107c6245 100644 --- a/benches/benches/bevy_ecs/scheduling/run_condition.rs +++ b/benches/benches/bevy_ecs/scheduling/run_condition.rs @@ -25,7 +25,7 @@ pub fn run_condition_yes(criterion: &mut Criterion) { } // run once to initialize systems schedule.run(&mut world); - group.bench_function(&format!("{:03}_systems", 5 * amount + 1), |bencher| { + group.bench_function(format!("{:03}_systems", 5 * amount + 1), |bencher| { bencher.iter(|| { schedule.run(&mut world); }); @@ -48,7 +48,7 @@ pub fn run_condition_no(criterion: &mut Criterion) { } // run once to initialize systems schedule.run(&mut world); - group.bench_function(&format!("{:03}_systems", 5 * amount + 1), |bencher| { + group.bench_function(format!("{:03}_systems", 5 * amount + 1), |bencher| { bencher.iter(|| { schedule.run(&mut world); }); @@ -80,7 +80,7 @@ pub fn run_condition_yes_with_query(criterion: &mut Criterion) { } // run once to initialize systems schedule.run(&mut world); - group.bench_function(&format!("{:03}_systems", 5 * amount + 1), |bencher| { + group.bench_function(format!("{:03}_systems", 5 * amount + 1), |bencher| { bencher.iter(|| { schedule.run(&mut world); }); @@ -109,7 +109,7 @@ pub fn run_condition_yes_with_resource(criterion: &mut Criterion) { } // run once to initialize systems schedule.run(&mut world); - group.bench_function(&format!("{:03}_systems", 5 * amount + 1), |bencher| { + group.bench_function(format!("{:03}_systems", 5 * amount + 1), |bencher| { bencher.iter(|| { schedule.run(&mut world); }); diff --git a/benches/benches/bevy_ecs/scheduling/running_systems.rs b/benches/benches/bevy_ecs/scheduling/running_systems.rs index d2ea51307f87f..4a1455388549f 100644 --- a/benches/benches/bevy_ecs/scheduling/running_systems.rs +++ b/benches/benches/bevy_ecs/scheduling/running_systems.rs @@ -26,7 +26,7 @@ pub fn empty_systems(criterion: &mut Criterion) { schedule.add_systems(empty); } schedule.run(&mut world); - group.bench_function(&format!("{:03}_systems", amount), |bencher| { + group.bench_function(format!("{:03}_systems", amount), |bencher| { bencher.iter(|| { schedule.run(&mut world); }); @@ -38,7 +38,7 @@ pub fn empty_systems(criterion: &mut Criterion) { schedule.add_systems((empty, empty, empty, empty, empty)); } schedule.run(&mut world); - group.bench_function(&format!("{:03}_systems", 5 * amount), |bencher| { + group.bench_function(format!("{:03}_systems", 5 * amount), |bencher| { bencher.iter(|| { schedule.run(&mut world); }); @@ -80,7 +80,7 @@ pub fn busy_systems(criterion: &mut Criterion) { } schedule.run(&mut world); group.bench_function( - &format!( + format!( "{:02}x_entities_{:02}_systems", entity_bunches, 3 * system_amount + 3 @@ -131,7 +131,7 @@ pub fn contrived(criterion: &mut Criterion) { } schedule.run(&mut world); group.bench_function( - &format!( + format!( "{:02}x_entities_{:02}_systems", entity_bunches, 3 * system_amount + 3 diff --git a/benches/benches/bevy_ecs/scheduling/schedule.rs b/benches/benches/bevy_ecs/scheduling/schedule.rs index 4571899a9b7b5..1a428b5eb85fe 100644 --- a/benches/benches/bevy_ecs/scheduling/schedule.rs +++ b/benches/benches/bevy_ecs/scheduling/schedule.rs @@ -74,7 +74,7 @@ pub fn build_schedule(criterion: &mut Criterion) { // Method: generate a set of `graph_size` systems which have a One True Ordering. // Add system to the schedule with full constraints. Hopefully this should be maximally // difficult for bevy to figure out. - let labels: Vec<_> = (0..1000).map(|i| NumSet(i)).collect(); + let labels: Vec<_> = (0..1000).map(NumSet).collect(); // Benchmark graphs of different sizes. for graph_size in [100, 500, 1000] { diff --git a/benches/benches/bevy_ecs/world/world_get.rs b/benches/benches/bevy_ecs/world/world_get.rs index 4c235cd1b46e3..190402fbadb27 100644 --- a/benches/benches/bevy_ecs/world/world_get.rs +++ b/benches/benches/bevy_ecs/world/world_get.rs @@ -306,7 +306,7 @@ pub fn query_get(criterion: &mut Criterion) { } pub fn query_get_many(criterion: &mut Criterion) { - let mut group = criterion.benchmark_group(&format!("query_get_many_{N}")); + let mut group = criterion.benchmark_group(format!("query_get_many_{N}")); group.warm_up_time(core::time::Duration::from_millis(500)); group.measurement_time(core::time::Duration::from_secs(2 * N as u64)); diff --git a/benches/benches/bevy_reflect/main.rs b/benches/benches/bevy_reflect/main.rs index 3785652295318..d347baccd0fa3 100644 --- a/benches/benches/bevy_reflect/main.rs +++ b/benches/benches/bevy_reflect/main.rs @@ -1,3 +1,5 @@ +#![expect(clippy::type_complexity)] + use criterion::criterion_main; mod function; diff --git a/benches/benches/bevy_reflect/path.rs b/benches/benches/bevy_reflect/path.rs index fa5582982b606..2cca245239e89 100644 --- a/benches/benches/bevy_reflect/path.rs +++ b/benches/benches/bevy_reflect/path.rs @@ -17,7 +17,7 @@ fn deterministic_rand() -> ChaCha8Rng { ChaCha8Rng::seed_from_u64(42) } fn random_ident(rng: &mut ChaCha8Rng, f: &mut dyn Write) { - let between = Uniform::try_from(b'a'..=b'z').unwrap(); + let between = Uniform::from(b'a'..=b'z'); let ident_size = rng.gen_range(1..128); let ident: Vec = rng.sample_iter(between).take(ident_size).collect(); let ident = str::from_utf8(&ident).unwrap(); @@ -79,9 +79,9 @@ fn parse_reflect_path(criterion: &mut Criterion) { BenchmarkId::new("parse_reflect_path", size), &size, |bencher, &size| { - let mut mk_paths = mk_paths(size); + let mk_paths = mk_paths(size); bencher.iter_batched( - || mk_paths(), + mk_paths, |path| assert!(ParsedPath::parse(black_box(&path)).is_ok()), BatchSize::SmallInput, ); From ee94d48f5085002566a5a6eada9225a10ff067cb Mon Sep 17 00:00:00 2001 From: BD103 <59022059+BD103@users.noreply.github.com> Date: Sat, 7 Dec 2024 10:18:26 -0500 Subject: [PATCH 4/9] feat: update `black_box()` usage See https://github.com/rust-lang/rust/pull/133942, there's not much point in using `black_box()` on a unit type, especially since `map.insert()` has side-effects and will be executed. --- benches/benches/bevy_reflect/map.rs | 2 +- benches/benches/bevy_reflect/struct.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/benches/benches/bevy_reflect/map.rs b/benches/benches/bevy_reflect/map.rs index 69963316b61d2..054dcf9570da0 100644 --- a/benches/benches/bevy_reflect/map.rs +++ b/benches/benches/bevy_reflect/map.rs @@ -265,7 +265,7 @@ fn dynamic_map_insert(criterion: &mut Criterion) { |mut map| { for i in 0..size as u64 { let key = black_box(i); - black_box(map.insert(key, i)); + map.insert(key, black_box(i)); } }, BatchSize::SmallInput, diff --git a/benches/benches/bevy_reflect/struct.rs b/benches/benches/bevy_reflect/struct.rs index 5fc3a462c5762..dfd324e7053e6 100644 --- a/benches/benches/bevy_reflect/struct.rs +++ b/benches/benches/bevy_reflect/struct.rs @@ -313,7 +313,7 @@ fn dynamic_struct_insert(criterion: &mut Criterion) { bencher.iter_batched( || s.clone_dynamic(), |mut s| { - black_box(s.insert(black_box(&field), ())); + s.insert(black_box(&field), ()); }, BatchSize::SmallInput, ); From cbe1688dcd7998771ec99f8765896fa859c7da00 Mon Sep 17 00:00:00 2001 From: BD103 <59022059+BD103@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:39:16 -0500 Subject: [PATCH 5/9] refactor: make all `criterion_group!`s named `benches` Now the distinguishing factor will be their module path, removing the need to rename the group itself if it switches modules. --- benches/benches/bevy_ecs/change_detection.rs | 6 ++++-- benches/benches/bevy_ecs/components/mod.rs | 2 +- benches/benches/bevy_ecs/empty_archetypes.rs | 2 +- benches/benches/bevy_ecs/events/mod.rs | 2 +- benches/benches/bevy_ecs/fragmentation/mod.rs | 2 +- benches/benches/bevy_ecs/iteration/mod.rs | 2 +- benches/benches/bevy_ecs/main.rs | 20 +++++++++---------- benches/benches/bevy_ecs/observers/mod.rs | 2 +- benches/benches/bevy_ecs/param/mod.rs | 2 +- benches/benches/bevy_ecs/scheduling/mod.rs | 2 +- benches/benches/bevy_ecs/world/mod.rs | 2 +- 11 files changed, 23 insertions(+), 21 deletions(-) diff --git a/benches/benches/bevy_ecs/change_detection.rs b/benches/benches/bevy_ecs/change_detection.rs index 7414dae65f2ea..a07320cf1809b 100644 --- a/benches/benches/bevy_ecs/change_detection.rs +++ b/benches/benches/bevy_ecs/change_detection.rs @@ -10,7 +10,7 @@ use rand::{prelude::SliceRandom, SeedableRng}; use rand_chacha::ChaCha8Rng; criterion_group!( - change_detection_benches, + benches, all_added_detection, all_changed_detection, few_changed_detection, @@ -297,7 +297,9 @@ fn add_archetypes_entities + Default>( } } } -fn multiple_archetype_none_changed_detection_generic + Default + BenchModify>( +fn multiple_archetype_none_changed_detection_generic< + T: Component + Default + BenchModify, +>( group: &mut BenchGroup, archetype_count: u16, entity_count: u32, diff --git a/benches/benches/bevy_ecs/components/mod.rs b/benches/benches/bevy_ecs/components/mod.rs index e77e23d730a4e..495cb0fd45a2c 100644 --- a/benches/benches/bevy_ecs/components/mod.rs +++ b/benches/benches/bevy_ecs/components/mod.rs @@ -13,7 +13,7 @@ mod insert_simple_unbatched; use archetype_updates::*; criterion_group!( - components_benches, + benches, add_remove, add_remove_big, add_remove_very_big, diff --git a/benches/benches/bevy_ecs/empty_archetypes.rs b/benches/benches/bevy_ecs/empty_archetypes.rs index 254dde461454a..84dad61a65c50 100644 --- a/benches/benches/bevy_ecs/empty_archetypes.rs +++ b/benches/benches/bevy_ecs/empty_archetypes.rs @@ -1,7 +1,7 @@ use bevy_ecs::{component::Component, prelude::*, world::World}; use criterion::{black_box, criterion_group, BenchmarkId, Criterion}; -criterion_group!(empty_archetypes_benches, empty_archetypes); +criterion_group!(benches, empty_archetypes); #[derive(Component)] struct A(f32); diff --git a/benches/benches/bevy_ecs/events/mod.rs b/benches/benches/bevy_ecs/events/mod.rs index 5d20ef25cd018..15492bc92c0e2 100644 --- a/benches/benches/bevy_ecs/events/mod.rs +++ b/benches/benches/bevy_ecs/events/mod.rs @@ -3,7 +3,7 @@ use criterion::*; mod iter; mod send; -criterion_group!(event_benches, send, iter); +criterion_group!(benches, send, iter); fn send(c: &mut Criterion) { let mut group = c.benchmark_group("events_send"); diff --git a/benches/benches/bevy_ecs/fragmentation/mod.rs b/benches/benches/bevy_ecs/fragmentation/mod.rs index 0f9396a409652..97864990a37e5 100644 --- a/benches/benches/bevy_ecs/fragmentation/mod.rs +++ b/benches/benches/bevy_ecs/fragmentation/mod.rs @@ -4,7 +4,7 @@ use core::hint::black_box; use criterion::*; use glam::*; -criterion_group!(fragmentation_benches, iter_frag_empty); +criterion_group!(benches, iter_frag_empty); #[derive(Component, Default)] struct Table(usize); diff --git a/benches/benches/bevy_ecs/iteration/mod.rs b/benches/benches/bevy_ecs/iteration/mod.rs index f4755606b823f..5a9661a70e59d 100644 --- a/benches/benches/bevy_ecs/iteration/mod.rs +++ b/benches/benches/bevy_ecs/iteration/mod.rs @@ -25,7 +25,7 @@ mod par_iter_simple_foreach_hybrid; use heavy_compute::*; criterion_group!( - iterations_benches, + benches, iter_frag, iter_frag_sparse, iter_simple, diff --git a/benches/benches/bevy_ecs/main.rs b/benches/benches/bevy_ecs/main.rs index 39fc70f21a380..83f0cde0286d6 100644 --- a/benches/benches/bevy_ecs/main.rs +++ b/benches/benches/bevy_ecs/main.rs @@ -18,14 +18,14 @@ mod scheduling; mod world; criterion_main!( - change_detection::change_detection_benches, - components::components_benches, - empty_archetypes::empty_archetypes_benches, - events::event_benches, - iteration::iterations_benches, - fragmentation::fragmentation_benches, - observers::observer_benches, - scheduling::scheduling_benches, - world::world_benches, - param::param_benches, + change_detection::benches, + components::benches, + empty_archetypes::benches, + events::benches, + iteration::benches, + fragmentation::benches, + observers::benches, + scheduling::benches, + world::benches, + param::benches, ); diff --git a/benches/benches/bevy_ecs/observers/mod.rs b/benches/benches/bevy_ecs/observers/mod.rs index 0b8c3f24869ce..01a72ca908e92 100644 --- a/benches/benches/bevy_ecs/observers/mod.rs +++ b/benches/benches/bevy_ecs/observers/mod.rs @@ -5,4 +5,4 @@ mod simple; use propagation::*; use simple::*; -criterion_group!(observer_benches, event_propagation, observe_simple); +criterion_group!(benches, event_propagation, observe_simple); diff --git a/benches/benches/bevy_ecs/param/mod.rs b/benches/benches/bevy_ecs/param/mod.rs index 20955fc29e02b..da2246ccf3347 100644 --- a/benches/benches/bevy_ecs/param/mod.rs +++ b/benches/benches/bevy_ecs/param/mod.rs @@ -8,4 +8,4 @@ use combinator_system::*; use dyn_param::*; use param_set::*; -criterion_group!(param_benches, combinator_system, dyn_param, param_set); +criterion_group!(benches, combinator_system, dyn_param, param_set); diff --git a/benches/benches/bevy_ecs/scheduling/mod.rs b/benches/benches/bevy_ecs/scheduling/mod.rs index 60d1620a89f5c..01f6f32c1fd5c 100644 --- a/benches/benches/bevy_ecs/scheduling/mod.rs +++ b/benches/benches/bevy_ecs/scheduling/mod.rs @@ -9,7 +9,7 @@ use running_systems::*; use schedule::*; criterion_group!( - scheduling_benches, + benches, run_condition_yes, run_condition_no, run_condition_yes_with_query, diff --git a/benches/benches/bevy_ecs/world/mod.rs b/benches/benches/bevy_ecs/world/mod.rs index 652221c126872..0da09362b1260 100644 --- a/benches/benches/bevy_ecs/world/mod.rs +++ b/benches/benches/bevy_ecs/world/mod.rs @@ -19,7 +19,7 @@ mod entity_hash; use entity_hash::*; criterion_group!( - world_benches, + benches, empty_commands, spawn_commands, insert_commands, From e701c212cdc6bb57f1af37316e7834f2ac982630 Mon Sep 17 00:00:00 2001 From: BD103 <59022059+BD103@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:42:17 -0500 Subject: [PATCH 6/9] refactor: re-order imports Modules first, imports second --- benches/benches/bevy_ecs/components/mod.rs | 3 +-- benches/benches/bevy_ecs/events/mod.rs | 4 ++-- benches/benches/bevy_ecs/iteration/mod.rs | 3 +-- benches/benches/bevy_ecs/observers/mod.rs | 4 ++-- benches/benches/bevy_ecs/param/mod.rs | 3 +-- benches/benches/bevy_ecs/scheduling/mod.rs | 3 +-- benches/benches/bevy_ecs/world/mod.rs | 19 +++++++------------ 7 files changed, 15 insertions(+), 24 deletions(-) diff --git a/benches/benches/bevy_ecs/components/mod.rs b/benches/benches/bevy_ecs/components/mod.rs index 495cb0fd45a2c..aec44ed27c9d0 100644 --- a/benches/benches/bevy_ecs/components/mod.rs +++ b/benches/benches/bevy_ecs/components/mod.rs @@ -1,5 +1,3 @@ -use criterion::*; - mod add_remove; mod add_remove_big_sparse_set; mod add_remove_big_table; @@ -11,6 +9,7 @@ mod insert_simple; mod insert_simple_unbatched; use archetype_updates::*; +use criterion::{criterion_group, Criterion}; criterion_group!( benches, diff --git a/benches/benches/bevy_ecs/events/mod.rs b/benches/benches/bevy_ecs/events/mod.rs index 15492bc92c0e2..4367c45c3e28d 100644 --- a/benches/benches/bevy_ecs/events/mod.rs +++ b/benches/benches/bevy_ecs/events/mod.rs @@ -1,8 +1,8 @@ -use criterion::*; - mod iter; mod send; +use criterion::{criterion_group, Criterion}; + criterion_group!(benches, send, iter); fn send(c: &mut Criterion) { diff --git a/benches/benches/bevy_ecs/iteration/mod.rs b/benches/benches/bevy_ecs/iteration/mod.rs index 5a9661a70e59d..0fa7aced2894a 100644 --- a/benches/benches/bevy_ecs/iteration/mod.rs +++ b/benches/benches/bevy_ecs/iteration/mod.rs @@ -1,5 +1,3 @@ -use criterion::*; - mod heavy_compute; mod iter_frag; mod iter_frag_foreach; @@ -22,6 +20,7 @@ mod iter_simple_wide_sparse_set; mod par_iter_simple; mod par_iter_simple_foreach_hybrid; +use criterion::{criterion_group, Criterion}; use heavy_compute::*; criterion_group!( diff --git a/benches/benches/bevy_ecs/observers/mod.rs b/benches/benches/bevy_ecs/observers/mod.rs index 01a72ca908e92..16008def7e461 100644 --- a/benches/benches/bevy_ecs/observers/mod.rs +++ b/benches/benches/bevy_ecs/observers/mod.rs @@ -1,7 +1,7 @@ -use criterion::criterion_group; - mod propagation; mod simple; + +use criterion::criterion_group; use propagation::*; use simple::*; diff --git a/benches/benches/bevy_ecs/param/mod.rs b/benches/benches/bevy_ecs/param/mod.rs index da2246ccf3347..6cc6132f66787 100644 --- a/benches/benches/bevy_ecs/param/mod.rs +++ b/benches/benches/bevy_ecs/param/mod.rs @@ -1,10 +1,9 @@ -use criterion::criterion_group; - mod combinator_system; mod dyn_param; mod param_set; use combinator_system::*; +use criterion::criterion_group; use dyn_param::*; use param_set::*; diff --git a/benches/benches/bevy_ecs/scheduling/mod.rs b/benches/benches/bevy_ecs/scheduling/mod.rs index 01f6f32c1fd5c..310662e629cad 100644 --- a/benches/benches/bevy_ecs/scheduling/mod.rs +++ b/benches/benches/bevy_ecs/scheduling/mod.rs @@ -1,9 +1,8 @@ -use criterion::criterion_group; - mod run_condition; mod running_systems; mod schedule; +use criterion::criterion_group; use run_condition::*; use running_systems::*; use schedule::*; diff --git a/benches/benches/bevy_ecs/world/mod.rs b/benches/benches/bevy_ecs/world/mod.rs index 0da09362b1260..e35dc999c2eb8 100644 --- a/benches/benches/bevy_ecs/world/mod.rs +++ b/benches/benches/bevy_ecs/world/mod.rs @@ -1,22 +1,17 @@ -use criterion::criterion_group; - mod commands; -use commands::*; - mod despawn; -use despawn::*; - mod despawn_recursive; -use despawn_recursive::*; - +mod entity_hash; mod spawn; -use spawn::*; - mod world_get; -use world_get::*; -mod entity_hash; +use commands::*; +use criterion::criterion_group; +use despawn::*; +use despawn_recursive::*; use entity_hash::*; +use spawn::*; +use world_get::*; criterion_group!( benches, From 8815bb78b0d8a87326f365da51940a01cf37e1f9 Mon Sep 17 00:00:00 2001 From: BD103 <59022059+BD103@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:43:44 -0500 Subject: [PATCH 7/9] refactor: uplift `fragmentation/mod.rs` to `fragmentation.rs` There's nothing else within the module folder, so it doesn't need to be a folder! --- .../benches/bevy_ecs/{fragmentation/mod.rs => fragmentation.rs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename benches/benches/bevy_ecs/{fragmentation/mod.rs => fragmentation.rs} (100%) diff --git a/benches/benches/bevy_ecs/fragmentation/mod.rs b/benches/benches/bevy_ecs/fragmentation.rs similarity index 100% rename from benches/benches/bevy_ecs/fragmentation/mod.rs rename to benches/benches/bevy_ecs/fragmentation.rs From b0065e0b0bf53c9159cb5c210214c2576a803ec5 Mon Sep 17 00:00:00 2001 From: BD103 <59022059+BD103@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:53:11 -0500 Subject: [PATCH 8/9] refactor: organize dependencies and bump criterion to 0.5 --- benches/Cargo.toml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/benches/Cargo.toml b/benches/Cargo.toml index 17b98eaaaf6d8..4841570022b0b 100644 --- a/benches/Cargo.toml +++ b/benches/Cargo.toml @@ -8,10 +8,7 @@ license = "MIT OR Apache-2.0" autobenches = false [dev-dependencies] -glam = "0.29" -rand = "0.8" -rand_chacha = "0.3" -criterion = { version = "0.3", features = ["html_reports"] } +# Bevy crates bevy_app = { path = "../crates/bevy_app" } bevy_ecs = { path = "../crates/bevy_ecs", features = ["multi_threaded"] } bevy_hierarchy = { path = "../crates/bevy_hierarchy" } @@ -24,7 +21,14 @@ bevy_render = { path = "../crates/bevy_render" } bevy_tasks = { path = "../crates/bevy_tasks" } bevy_utils = { path = "../crates/bevy_utils" } -# make bevy_render compile on linux. x11 vs wayland does not matter here as the benches do not actually use a window +# Other crates +criterion = { version = "0.5.1", features = ["html_reports"] } +glam = "0.29" +rand = "0.8" +rand_chacha = "0.3" + +# Make `bevy_render` compile on Linux with x11 windowing. x11 vs. Wayland does not matter here +# because the benches do not actually open any windows. [target.'cfg(target_os = "linux")'.dev-dependencies] bevy_winit = { path = "../crates/bevy_winit", features = ["x11"] } From df26ba2a21c8b33409da8c33866066c15d933aae Mon Sep 17 00:00:00 2001 From: BD103 <59022059+BD103@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:59:50 -0500 Subject: [PATCH 9/9] feat: re-implement `parallel` argument --- benches/benches/bevy_ecs/empty_archetypes.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/benches/benches/bevy_ecs/empty_archetypes.rs b/benches/benches/bevy_ecs/empty_archetypes.rs index 84dad61a65c50..139f52ce843d2 100644 --- a/benches/benches/bevy_ecs/empty_archetypes.rs +++ b/benches/benches/bevy_ecs/empty_archetypes.rs @@ -1,4 +1,4 @@ -use bevy_ecs::{component::Component, prelude::*, world::World}; +use bevy_ecs::{component::Component, prelude::*, schedule::ExecutorKind, world::World}; use criterion::{black_box, criterion_group, BenchmarkId, Criterion}; criterion_group!(benches, empty_archetypes); @@ -72,14 +72,17 @@ fn par_for_each( }); } -#[expect( - unused_variables, - reason = "`parallel` has no effect, it needs to be removed or parallel support needs to be re-added." -)] fn setup(parallel: bool, setup: impl FnOnce(&mut Schedule)) -> (World, Schedule) { let world = World::new(); let mut schedule = Schedule::default(); + + schedule.set_executor_kind(match parallel { + true => ExecutorKind::MultiThreaded, + false => ExecutorKind::SingleThreaded, + }); + setup(&mut schedule); + (world, schedule) }