
# Objective - Please see #16647 for the full reasoning behind this change. ## Solution - Create the `bench!` macro, which generates the name of the benchmark at compile time. Migrating is a single line change, and it will automatically update if you move the benchmark to a different module: ```diff + use benches::bench; fn my_benchmark(c: &mut Criterion) { - c.bench_function("my_benchmark", |b| {}); + c.bench_function(bench!("my_benchmark"), |b| {}); } ``` - Migrate all reflection benchmarks to use `bench!`. - Fix a few places where `black_box()` or Criterion is misused. ## Testing ```sh cd benches # Will take a long time! cargo bench --bench reflect # List out the names of all reflection benchmarks, to ensure I didn't miss anything. cargo bench --bench reflect -- --list # Check for linter warnings. cargo clippy --bench reflect # Run each benchmark once. cargo test --bench reflect ```
97 lines
2.5 KiB
TOML
97 lines
2.5 KiB
TOML
[package]
|
|
name = "benches"
|
|
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
|
|
|
|
[dependencies]
|
|
# The primary crate that runs and analyzes our benchmarks. This is a regular dependency because the
|
|
# `bench!` macro refers to it in its documentation.
|
|
criterion = { version = "0.5.1", features = ["html_reports"] }
|
|
|
|
[dev-dependencies]
|
|
# Bevy crates
|
|
bevy_app = { path = "../crates/bevy_app" }
|
|
bevy_ecs = { path = "../crates/bevy_ecs", features = ["multi_threaded"] }
|
|
bevy_hierarchy = { path = "../crates/bevy_hierarchy" }
|
|
bevy_math = { path = "../crates/bevy_math" }
|
|
bevy_picking = { path = "../crates/bevy_picking", features = [
|
|
"bevy_mesh_picking_backend",
|
|
] }
|
|
bevy_reflect = { path = "../crates/bevy_reflect", features = ["functions"] }
|
|
bevy_render = { path = "../crates/bevy_render" }
|
|
bevy_tasks = { path = "../crates/bevy_tasks" }
|
|
bevy_utils = { path = "../crates/bevy_utils" }
|
|
|
|
# Other crates
|
|
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"] }
|
|
|
|
[lints.clippy]
|
|
doc_markdown = "warn"
|
|
manual_let_else = "warn"
|
|
match_same_arms = "warn"
|
|
redundant_closure_for_method_calls = "warn"
|
|
redundant_else = "warn"
|
|
semicolon_if_nothing_returned = "warn"
|
|
type_complexity = "allow"
|
|
undocumented_unsafe_blocks = "warn"
|
|
unwrap_or_default = "warn"
|
|
needless_lifetimes = "allow"
|
|
|
|
ptr_as_ptr = "warn"
|
|
ptr_cast_constness = "warn"
|
|
ref_as_ptr = "warn"
|
|
|
|
# see: https://github.com/bevyengine/bevy/pull/15375#issuecomment-2366966219
|
|
too_long_first_doc_paragraph = "allow"
|
|
|
|
[lints.rust]
|
|
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(docsrs_dep)'] }
|
|
unsafe_op_in_unsafe_fn = "warn"
|
|
unused_qualifications = "warn"
|
|
|
|
[[bench]]
|
|
name = "entity_cloning"
|
|
path = "benches/bevy_ecs/entity_cloning.rs"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "ecs"
|
|
path = "benches/bevy_ecs/main.rs"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "math"
|
|
path = "benches/bevy_math/main.rs"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "picking"
|
|
path = "benches/bevy_picking/main.rs"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "reflect"
|
|
path = "benches/bevy_reflect/main.rs"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "render"
|
|
path = "benches/bevy_render/main.rs"
|
|
harness = false
|
|
|
|
[[bench]]
|
|
name = "tasks"
|
|
path = "benches/bevy_tasks/main.rs"
|
|
harness = false
|