bevy/crates
Rostyslav Toch d30391b583
Optimize transform propagation (#14373)
# Objective

- Optimize the `propagate_recursive` function in the transform system to
reduce CPU usage.
- Addresses performance bottleneck in transform propagation, especially
for scenes with complex hierarchies.

## Solution

- Avoided unnecessary cloning of `global_transform` when creating the
tuple in the `propagate_recursive` function.
- Used `as_ref()` method on `Mut<GlobalTransform>` when passing it to
the recursive call, avoiding an extra dereference.
- These changes significantly reduced the CPU usage of this function
from 4.91% to 1.16% of self function time.

## Testing

- Performance testing was conducted using the Hotspot GUI tool,
comparing CPU usage before and after the changes.
- `cargo run --release --example many_foxes`
- Tested on Fedora Linux.
---

## Showcase

Here are the PERF GUI results showing the improvement in CPU usage:

### Before

![image](https://github.com/user-attachments/assets/b5c52800-710b-4793-bf75-33e3eb1d2083)

### After

![image](https://github.com/user-attachments/assets/654a4feb-924c-41c8-8ff9-3a1027bd28b9)

As we can see, the CPU usage for the `propagate_recursive` function has
been reduced from 4.91% to 1.16%, resulting in a significant performance
improvement.

## Migration Guide

This change does not introduce any breaking changes. Users of the Bevy
engine will automatically benefit from this performance improvement
without needing to modify their code.
2024-07-22 18:53:16 +00:00
..
bevy_a11y plugin_group! macro (adopted) (#14339) 2024-07-16 01:14:33 +00:00
bevy_animation Fix single keyframe animations. (#14344) 2024-07-22 18:44:27 +00:00
bevy_app plugin_group! macro (adopted) (#14339) 2024-07-16 01:14:33 +00:00
bevy_asset add debug logging to ascertain the base path the asset server is using (#13820) 2024-07-15 14:00:43 +00:00
bevy_audio Bump Version after Release (#14219) 2024-07-08 12:54:08 +00:00
bevy_color Prevent division by zero in HWBA to HSVA conversions (#14256) 2024-07-22 18:22:26 +00:00
bevy_core Rename bevy_core::name::DebugName to bevy_core::name::NameOrEntity (#14211) 2024-07-15 15:21:41 +00:00
bevy_core_pipeline Move Msaa to component (#14273) 2024-07-22 18:28:23 +00:00
bevy_derive Specify test group names in github summary for compile fail tests (#14330) 2024-07-15 16:13:03 +00:00
bevy_dev_tools Test for ambiguous system ordering in CI (#13950) 2024-07-17 21:05:48 +00:00
bevy_diagnostic Bump Version after Release (#14219) 2024-07-08 12:54:08 +00:00
bevy_dylib Bump Version after Release (#14219) 2024-07-08 12:54:08 +00:00
bevy_dynamic_plugin Bump Version after Release (#14219) 2024-07-08 12:54:08 +00:00
bevy_ecs Add some missing reflect attributes (#14259) 2024-07-22 18:24:10 +00:00
bevy_encase_derive Bump Version after Release (#14219) 2024-07-08 12:54:08 +00:00
bevy_gilrs Bump Version after Release (#14219) 2024-07-08 12:54:08 +00:00
bevy_gizmos Move Msaa to component (#14273) 2024-07-22 18:28:23 +00:00
bevy_gltf fix building cargo_gltf with feature dds (#14360) 2024-07-20 17:55:25 +00:00
bevy_hierarchy Minimal Bubbling Observers (#13991) 2024-07-15 13:39:41 +00:00
bevy_input Expose Winit's KeyEvent::repeat in KeyboardInput (#14161) 2024-07-15 14:52:33 +00:00
bevy_internal plugin_group! macro (adopted) (#14339) 2024-07-16 01:14:33 +00:00
bevy_log Fix intra-doc links and make CI test them (#14076) 2024-07-11 13:08:31 +00:00
bevy_macro_utils Bump Version after Release (#14219) 2024-07-08 12:54:08 +00:00
bevy_math Fast renormalize (#14316) 2024-07-22 18:42:48 +00:00
bevy_mikktspace Bump Version after Release (#14219) 2024-07-08 12:54:08 +00:00
bevy_pbr Move Msaa to component (#14273) 2024-07-22 18:28:23 +00:00
bevy_picking Fix intra-doc links and make CI test them (#14076) 2024-07-11 13:08:31 +00:00
bevy_ptr Bump Version after Release (#14219) 2024-07-08 12:54:08 +00:00
bevy_reflect bevy_reflect: Improve DynamicFunction ergonomics (#14201) 2024-07-16 13:01:52 +00:00
bevy_render Unignore Camera.target field for reflection (#14367) 2024-07-22 18:46:40 +00:00
bevy_scene Align Scene::write_to_world_with to match DynamicScene::write_to_world_with (#13855) 2024-07-15 14:04:09 +00:00
bevy_sprite Move Msaa to component (#14273) 2024-07-22 18:28:23 +00:00
bevy_state plugin_group! macro (adopted) (#14339) 2024-07-16 01:14:33 +00:00
bevy_tasks Make Tasks functional on WASM (#13889) 2024-07-16 01:15:03 +00:00
bevy_text Fix intra-doc links and make CI test them (#14076) 2024-07-11 13:08:31 +00:00
bevy_time Bump Version after Release (#14219) 2024-07-08 12:54:08 +00:00
bevy_transform Optimize transform propagation (#14373) 2024-07-22 18:53:16 +00:00
bevy_ui Add some missing reflect attributes (#14259) 2024-07-22 18:24:10 +00:00
bevy_utils Bump Version after Release (#14219) 2024-07-08 12:54:08 +00:00
bevy_window Remove unused default feature from bevy_window (#14313) 2024-07-15 16:49:00 +00:00
bevy_winit Remove need for EventLoopProxy to be NonSend (#14198) 2024-07-16 06:59:01 +00:00