Remove unnecessary branch in query iteration (#12844)

# 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)
This commit is contained in:
re0312 2024-04-02 14:02:56 +08:00 committed by GitHub
parent 8092e2c86d
commit 06738bff63
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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)
}
@ -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)
}