Skip to content

Commit

Permalink
Remove unnecessary branch in query iteration (#12844)
Browse files Browse the repository at this point in the history
# Objective

- Since #10811,Bevy uses `assert `in the hot path of iteration. The
`for_each `method has an assert in the outer loop to help the compiler
remove unnecessary branching in the internal loop.
- However , ` for` style iterations do not receive the same treatment.
it still have a branch check in the internal loop, which could
potentially hurt performance.

## Solution

- use `TableRow::from_u32 ` instead of ` TableRow::from_usize` to avoid
unnecessary branch.

Before


![image](https://github.com/bevyengine/bevy/assets/45868716/f6d2a1ac-2129-48ff-97bf-d86713ddeaaf)



After
----------------------------------------------------------------------------


![image](https://github.com/bevyengine/bevy/assets/45868716/bfe5a9ee-ba6c-4a80-85b0-1c6d43adfe8c)
  • Loading branch information
re0312 committed Apr 2, 2024
1 parent 8092e2c commit 06738bf
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions crates/bevy_ecs/src/storage/table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ impl TableId {
/// Will panic if the provided value does not fit within a [`u32`].
#[inline]
pub const fn from_usize(index: usize) -> Self {
assert!(index as u32 as usize == index);
debug_assert!(index as u32 as usize == index);
Self(index as u32)
}

Expand Down Expand Up @@ -116,7 +116,7 @@ impl TableRow {
/// Will panic if the provided value does not fit within a [`u32`].
#[inline]
pub const fn from_usize(index: usize) -> Self {
assert!(index as u32 as usize == index);
debug_assert!(index as u32 as usize == index);
Self(index as u32)
}

Expand Down

0 comments on commit 06738bf

Please sign in to comment.