Borrow Access in FilteredEntity(Ref|Mut) and Entity(Ref|Mut)Except #5
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Objective
Improve the performance of
FilteredEntity(Ref|Mut)
andEntity(Ref|Mut)Except
.FilteredEntityRef
needs anAccess<ComponentId>
to determine what components it can access. There is one stored in the query state, but query items cannot borrow from the state, so it has toclone()
the access for each row. Cloning the access involves memory allocations and can be expensive.Solution
Let query items borrow from their query state.
Have
FilteredEntity(Ref|Mut)
borrow the access from the query state to avoid cloning for each row.Have
Entity(Ref|Mut)Except
look up the component ids on initialization and store them in an Access that can be borrowed by each row.