summaryrefslogtreecommitdiff
path: root/ecs/benches
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2024-12-20 20:46:31 +0100
committerHampusM <hampus@hampusmat.com>2024-12-20 21:20:20 +0100
commitcd30a25d2a75cadfe990ae6c1ae2eca5d927a8a7 (patch)
tree74bdefe4ea82259fe057b01d40cd0c34da00045f /ecs/benches
parentad0e8426ee122f419e92de437647930c82f30ba1 (diff)
chore(ecs): add query iterating benchmark
Diffstat (limited to 'ecs/benches')
-rw-r--r--ecs/benches/query_iterating.rs119
1 files changed, 119 insertions, 0 deletions
diff --git a/ecs/benches/query_iterating.rs b/ecs/benches/query_iterating.rs
new file mode 100644
index 0000000..cfda4a3
--- /dev/null
+++ b/ecs/benches/query_iterating.rs
@@ -0,0 +1,119 @@
+use std::hint::black_box;
+use std::path::PathBuf;
+
+use criterion::{criterion_group, criterion_main, Criterion};
+use ecs::{Component, World};
+
+fn fibonacci(n: u64) -> u64
+{
+ match n {
+ 0 => 1,
+ 1 => 1,
+ n => fibonacci(n - 1) + fibonacci(n - 2),
+ }
+}
+
+#[derive(Component)]
+struct Foo
+{
+ text: String,
+}
+
+#[derive(Component)]
+struct Bar
+{
+ path: PathBuf,
+ num: u64,
+}
+
+#[derive(Component)]
+struct Position
+{
+ x: f32,
+ y: f32,
+ z: f32,
+}
+
+#[derive(Component)]
+struct PosA
+{
+ x: f32,
+ y: f32,
+ z: f32,
+}
+
+#[derive(Component)]
+struct PosB
+{
+ x: f32,
+ y: f32,
+ z: f32,
+}
+
+#[derive(Component)]
+struct PosC
+{
+ x: f32,
+ y: f32,
+ z: f32,
+}
+
+#[derive(Component)]
+struct MoreText
+{
+ more_text: String,
+}
+
+#[derive(Component)]
+struct EvenMoreText
+{
+ even_more_text: String,
+}
+
+fn criterion_benchmark(criterion: &mut Criterion)
+{
+ let mut world = World::new();
+
+ for _ in 0..300 {
+ world.create_entity((
+ Bar { path: "/dev/zero".into(), num: 65789 },
+ Position { x: 13.98, y: 27.0, z: 0.2 },
+ Foo { text: "Hello there".to_string() },
+ PosA { x: 1183.98, y: 272628.0, z: 3306.2 },
+ PosB { x: 171183.98, y: 28.0, z: 336.2901 },
+ PosC { x: 8273.98, y: 28.0, z: 336.2901 },
+ MoreText { more_text: "Lorem ipsum".to_string() },
+ EvenMoreText {
+ even_more_text: "Wow so much text".to_string(),
+ },
+ ));
+ }
+
+ for _ in 0..700 {
+ world.create_entity((
+ Bar { path: "/dev/null".into(), num: 65789 },
+ Position { x: 88.11, y: 9.0, z: 36.11 },
+ Foo { text: "Hey".to_string() },
+ PosA { x: 118310.98, y: 272628.0, z: 3306.2 },
+ PosB { x: 11323.98, y: 28.0, z: 336.2901 },
+ PosC { x: 8273.98, y: 21818.0, z: 336.2901 },
+ MoreText { more_text: "Lorem ipsum".to_string() },
+ EvenMoreText {
+ even_more_text: "Wow much text".to_string(),
+ },
+ ));
+ }
+
+ let query = world.query::<(Bar, Position, Foo), ()>();
+
+ criterion.bench_function("fib 20", |bencher| {
+ bencher.iter(|| {
+ for comps in query.iter() {
+ black_box(comps);
+ }
+ })
+ });
+}
+
+criterion_group!(benches, criterion_benchmark);
+criterion_main!(benches);