Skip to content

Instantly share code, notes, and snippets.

@thebluefish
Last active February 16, 2024 16:04
Show Gist options
  • Save thebluefish/96f8490bc103e0c37217eeea7ec32ed7 to your computer and use it in GitHub Desktop.
Save thebluefish/96f8490bc103e0c37217eeea7ec32ed7 to your computer and use it in GitHub Desktop.
use bevy::prelude::*;
fn main() {
divan::main();
}
#[divan::bench]
fn reflect() {
let mut input: Box<dyn MovementField> = Box::new(PlayerInput::default());
for n in 1..=1000 {
input.get_movement_mut().x += 10.;
assert_eq!(input.get_movement().x, n as f32 * 10.);
}
}
#[derive(Reflect, Default, Debug)]
struct PlayerInput {
movement: Vec2,
}
trait MovementField {
fn get_movement(&self) -> &Vec2;
fn get_movement_mut(&mut self) -> &mut Vec2;
}
impl<T> MovementField for T where T: GetField {
fn get_movement(&self) -> &Vec2 {
self.get_field("movement").unwrap()
}
fn get_movement_mut(&mut self) -> &mut Vec2 {
self.get_field_mut("movement").unwrap()
}
}
use bevy::prelude::*;
fn main() {
divan::main();
}
#[divan::bench]
fn access() {
let mut input = PlayerInput::default();
for n in 1..=1000 {
input.get_movement_mut().x += 10.;
assert_eq!(input.get_movement().x, n as f32 * 10.);
}
}
#[derive(Reflect, Default, Debug)]
struct PlayerInput {
movement: Vec2,
}
trait MovementField {
fn get_movement(&self) -> &Vec2;
fn get_movement_mut(&mut self) -> &mut Vec2;
}
impl MovementField for PlayerInput {
fn get_movement(&self) -> &Vec2 {
&self.movement
}
fn get_movement_mut(&mut self) -> &mut Vec2 {
&mut self.movement
}
}
@thebluefish
Copy link
Author

Updated to use trait object in reflect benchmark

access     fastest       │ slowest       │ median        │ mean          │ samples │ iters
╰─ access  949.7 ns      │ 1.862 µs      │ 949.7 ns      │ 962.3 ns      │ 100     │ 1600
reflect     fastest       │ slowest       │ median        │ mean          │ samples │ iters
╰─ reflect  943.5 ns      │ 1.206 µs      │ 956 ns        │ 963 ns        │ 100     │ 1600

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment