FIX: Fixed a performance issue with many objects using multiple action maps [ISXB-573] #1951
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.
Description
Avoid costly (and pointless) iterations over all messages / objects / maps when we don't need to.
Issue: https://jira.unity3d.com/browse/ISXB-573
This codepath can be very expensive when there are a lot of messages to send to lots of objects with maps - much of the cost is in dereferencing handle.Target in DeferredResolutionOfBindings() which involves taking a mutex lock.
Further, once the lock is taken for each object, ResolveBindingsIfNecessary() is called for each of that object's InputActionMaps which in the general case does nothing (when there is nothing to do).
In the supplied (ridiculous to show the point) test project with 900 objects, each with 6 maps receiving 4500 mouse move messages this leads to:
Changes made
This change adds a static InputActionMap.s_NeedToResolveBindings that is set when we know that at least one InputActionMap has changes that need resolving. This is cleared when a resolve pass has been completed.
With this change the frame time in the example only increases by about 2-3ms when the mouse is moving.
Checklist
Before review:
Changed
,Fixed
,Added
sections.([case %number%](https://issuetracker.unity3d.com/issues/...))
.Area_CanDoX
,Area_CanDoX_EvenIfYIsTheCase
,Area_WhenIDoX_AndYHappens_ThisIsTheResult
.During merge:
NEW: ___
.FIX: ___
.DOCS: ___
.CHANGE: ___
.RELEASE: 1.1.0-preview.3
.After merge: