[General] Batch native operations #3831
Merged
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
This takes things a step further than #3830.
By wrapping every call to the native module (from V3) with
NativeProxy, we have a centralized place that communication with the module always goes through. Using that, most needed operations are batched. The exceptions areupdateGestureHandlerConfig(see comment) andcreateGestureHandler, which needs to run synchronously. This should reduce the amount of unnecessary native calls.On web, "everything is native" so no batching there. We may investigate the potential gains in the future, but due to differences in scheduling the same approach as on Android/iOS won't work.
I've also changed
createGestureHandleron iOS to create theUIGestureRecognizerimmediately. This solved a weird "double free" crash I've been seeing.Test plan
Tested on the same code as #3830
I saw improvements from ~600ms to ~595ms