Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42078
Resubmit of D51891716 and D52033328
I'm doing a pass and converting the last Java Unit Tests we had to Kotlin
I've also re-enabled multiple tests that were disabled in the past.
Changelog:
[Internal] [Changed] - Convert the last Unit Tests to Kotlin
Reviewed By: rshest
Differential Revision: D52430728
fbshipit-source-id: e6b4a6ed88d852024d959cf5148e992e97a84434
Summary:
I noticed this comment is still in Java in the Kotlin template. It also doesn't really work anymore since there is no packages variable.
To fix it I completed the comment with all code needed for it to work in kotlin. I think an older version of the template used to be more like:
```kotlin
val packages = PackageList(this).packages
// packages.add(MyReactNativePackage())
return packages
```
But then it requires adding a lint suppress annotation since packages variable can be simplified. I think this is simpler even if it makes the comment a few more lines.
## Changelog:
[GENERAL] [FIXED] - Fix comment about adding packages in android template
Pull Request resolved: https://github.com/facebook/react-native/pull/41856
Test Plan: Tested that uncommenting that code works
Reviewed By: cipolleschi
Differential Revision: D51987483
Pulled By: cortinico
fbshipit-source-id: d0135b5b536960017ccc7b25f92c75b3bd863cd9
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42076
## Changelog:
[Internal] -
In https://github.com/facebook/react-native/pull/41519 we introduced usage of C++20s range operations, which broke MacOSX desktop builds for the x86_64 targets (e.g. on Intel Mac laptops).
This appears to be a [known issue](https://stackoverflow.com/questions/73929080/error-with-clang-15-and-c20-stdviewsfilter), fixed in the later clang versions, however we need to support the earlier ones as well.
This changes the code to use the good old imperative style to do the same thing, but without using `std::views::filter`, thus working around the problem.
Reviewed By: christophpurrer
Differential Revision: D52428984
fbshipit-source-id: 6d0a390549c462b7040b5c0e669c00932bd99af7
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42059
Getting rid of old APIs in FabricUIManagerProvider and also clearing it of the inheritance dependency it has on JSIModule post it's references have been cleared.
Reviewed By: christophpurrer
Differential Revision: D51001239
fbshipit-source-id: c3d4650c292e957e9f939304662932c11af7a24f
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42069
Refactor React to get rid of JSIModule and its dependencies now that the changes are rolled out for all internal apps.
Changelog:
[Internal] Internal
Reviewed By: christophpurrer
Differential Revision: D51058885
fbshipit-source-id: 07a7335235605fbc07657f8da8588ec548bce797
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42068
These methods are overriden in UIManager.js
Let's pull them out, so that we don't get distracted by them.
Changelog: [Internal]
Reviewed By: fkgozali
Differential Revision: D52350348
fbshipit-source-id: 3d4b446c40be9d8797ec787f45335f42f8982956
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41999
Just a cosmetic change, that will remove noise from the subsequent diffs.
Now, all the raiseSoftError are on similar columns in the file.
Changelog: [internal]
Reviewed By: cortinico
Differential Revision: D52041976
fbshipit-source-id: bc22add358becf1ad8d5f7602253e2af28697d42
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42071
Proxying background handling to set up Meta internal test infra.
Changelog: [Internal]
Reviewed By: RSNara
Differential Revision: D52420805
fbshipit-source-id: a68645b7b630f976dfd9e863b0c985c738c658ec
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42000
I think this makes BridgelessUIManager easier to read: if the getUIManagerConstants method exists, get the cached constants.
Also, this unifies the nomenclature between PaperUIManager and BridgleessUIManager. That way, it's easy to compare/constrast the two files.
Changelog: [Internal]
Reviewed By: dmytrorykun, luluwu2032
Differential Revision: D52002910
fbshipit-source-id: 01bfbd5fedbe3f995b4a1f68309714d84027133b
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42001
## Rational
Every call-site was calling into console.error.
Some call-sites were using string concatination.
This diff introduces a new error reporting method: raiseSoftError, that hides all the string concatination and console.errors.
I believe this makes the error reporting logic within BridgelessUIManager more readable.
Changelog: [Internal]
Reviewed By: luluwu2032
Differential Revision: D52002911
fbshipit-source-id: 186842a4835ca65f326dda35b1c0db50f8ff149c
Summary:
The Android minSdk has been bumped in https://github.com/facebook/react-native/pull/38874 but not in the README.
## Changelog:
[General] [Fixed] - Updated docs to match Android 6.0 (API 23) minimum requirement.
Pull Request resolved: https://github.com/facebook/react-native/pull/42034
Test Plan: N/A
Reviewed By: fkgozali
Differential Revision: D52364522
Pulled By: arushikesarwani94
fbshipit-source-id: b04b5aa94b629380b559b2717e12a882f8817a6f
The internal and external repositories are out of sync. This Pull Request attempts to brings them back in sync by patching the GitHub repository. Please carefully review this patch. You must disable ShipIt for your project in order to merge this pull request. DO NOT IMPORT this pull request. Instead, merge it directly on GitHub using the MERGE BUTTON. Re-enable ShipIt after merging.
Summary:
X-link: https://github.com/facebook/yoga/pull/1533
Pull Request resolved: https://github.com/facebook/react-native/pull/42031
I have some reservations about some of the conditional setting of trailing position in general, and some of the repeated transformations that neccesitates this, but these functions don't belong in `CalculateLayout.h`. For now, just move these to their own header.
Reviewed By: joevilches
Differential Revision: D52292121
fbshipit-source-id: 4a998a4390a8d045af45f5424adaf049ed635e7a
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41519
Changelog: [Internal] - Refactor hover tracking logic to the shared c++ renderer
This diff refactors our hover tracking logic out of the platform (in this case only iOS, integrating Android is going to require extra work due to their pointer events being untyped) and puts it into the event intercepting infra in Fabric's C++ core. This is a big-ish diff so I'm going to try my best to use this summary to guide you through the changes.
To begin with — the changes inside `RCTSurfacePointerHandler.mm` are mostly about removing the existing hover tracking logic. The logic of the hover tracking is largely the same between the objective-c and c++ implementations with minor tweaks in order to be a better citizen when it comes to storing node references. One small "addition" to this file is explicitly firing a `pointerleave` event from the iOS layer when we detect that the pointer has left the app entirely because the C++ would otherwise not know when the pointer leaves the app. We don't need to include a special case for `pointerenter` because we can derive that in C++ from the first `pointermove` event that gets sent once the pointer re-enters the app's root view.
Next I think it makes most sense to continue onto the `PointerEventsProcessor.h/mm` which is the central class we're working in. One small change is adding a flag to the `ActivePointer` struct (`shouldLeaveWhenReleased`) which we will set during `ActivePointer` registration — setting to false if the pointer in question exists in the (also) newly added `previousHoverTrackersPerPointer_` registry. This logic is primarily used for knowing later when the pointer is released and whether we should emit the synthetic leave/out event on release. If the pointer existed in `previousHoverTrackersPerPointer_` **before** the `ActivePointer` registration that implies that the pointer is capable of hovering to some degree and we should **not** emit those leave/out events yet.
The real meat & potatoes of this diff is the `handleIncomingPointerEventOnNode` method which matches the `handleIncomingPointerEvent` method we removed from `RCTSurfacePointerHandler.mm`. This method derives the enter/leave/over/out pointer events by comparing the current event's target path (list of nodes from the root node to the target node of the event) to the previously recorded event target path. The representation of this event path is through the new `PointerHoverTracker` class which stores a pointer to just the root node and the target node as we can recreate the entire event path from these.
For over/out events all that matters is when the deepest-most target changes which is checked in `handleIncomingPointerEventOnNode` by leveraging `PointerHoverTracker`'s `hasSameTarget` method. For enter/leave events we need to fire discrete events for every node in the path which has either been removed or added, so the `diffEventPath` method was introduced on `PointerHoverTracker` to provide that.
Reviewed By: yungsters
Differential Revision: D51317492
fbshipit-source-id: e15ac3a396d5afa7ab921e4589861b43b07a33b5
Summary:
We have 1 coordinator per class but 1 adapter per instance.
Currently, the `oldProps` are stored in the coordinator and not into the adapter.
Therefore, when we create multiple instances of the same legacy component, the props might get messy or not updated properly.
This change moves the `oldProps` and the diffing code to the Adapter rather than to the coordinator, making them instance-specific.
## Changelog:
[iOS][Fixed] - Move old props and prop diffing to the interop layer adapter
Reviewed By: sammy-SC
Differential Revision: D52368222
fbshipit-source-id: 0f0c47b586fe61404250c5bfe51a7e2c63012815
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41925
This diff introduces the `npx react-native codegen` command.
It runs the codegen for the `package.json` file in current working directory.
Changelog: [General][Added] - Introduce "npx react-native codegen" command.
Reviewed By: cipolleschi
Differential Revision: D51495465
fbshipit-source-id: 1fd4c3645235a12f68f9032349a443b92b4764b8
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42012
Up until now `generate-codegen-artifacts.js` has been iOS only. But its logic is actually quite general, and this diff makes it platform agnostic.
Changelog: [General][Added] - Introduce the "platform" option to generate-codegen-artifacts.js
Reviewed By: RSNara
Differential Revision: D52257542
fbshipit-source-id: b7e698c779f7c6dae9b0de98a19ba452111fea5e
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42016
changelog: [internal]
TouchableWithoutFeedback is broken with React 18. Before we fix it, let's use Pressable in tests.
Reviewed By: fkgozali
Differential Revision: D52328529
fbshipit-source-id: 1d7d5032ffaf7f8ff5ffa47af2a87b733fd2e840
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42035
In upcoming diffs we will begin integrating the new C++ `InspectorPackagerConnection` (D52134592) into React Native on Android and iOS. This diff adds a shared C++ flag that is the source of truth for whether the new implementation should be enabled.
Changelog: [Internal]
Reviewed By: huntie
Differential Revision: D52335446
fbshipit-source-id: 7f16ffc1728c8de7d4fbf090268ffed6fbaa879f
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42026
Previously, the examples allow overriding the testIDs for each inner example from ViewExample.js in RNTester. However, that setup relies on another infra/abstraction to inject the testIDs properly. For simplicity, let's just make them hardcoded using the pattern view-test-<example-name>.
Changelog: [Internal]
Reviewed By: NickGerleman
Differential Revision: D52349100
fbshipit-source-id: 09d51935318d0592a9aae7da61cab0c87ac69152
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41987
Previously, the examples allow overriding the testIDs for each inner example from BorderExample.js in RNTester. However, that setup relies on another infra/abstraction to inject the testIDs properly. For simplicity, let's just make them hardcoded using the pattern `border-test-<example-name>`.
Changelog: [Internal]
Reviewed By: NickGerleman, mdvacca
Differential Revision: D52282922
fbshipit-source-id: 8fdc3d799befddbbb9bd8e60c8a904670c035d59
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41981
Improved RNTester URL deeplink support to cover:
* `rntester://example/<moduleKey>`
* `rntester://example/<moduleKey>/<exampleKey>`
Extra details:
* For example modules that do not specify `showIndividualExamples: true`, allow deeplink URL with the specific exampleKey to only render the specific example, instead of all of them.
* Added flexibility for moduleKey: search for optional suffixes ("Index", "Example").
* Adjusted Back button action to properly go back to the root after a deeplink.
* Added `example-container` generic testID on the example wrapper component.
Changelog: [Internal]
Reviewed By: yungsters, NickGerleman
Differential Revision: D52227013
fbshipit-source-id: 4ba050592f39d6895f5124fa25c77f2d0199aa3f
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42019
Removes the following deprecated properties from React Native:
- `Image.propTypes`
- `Text.propTypes`
- `TextInput.propTypes`
- `ColorPropType`
- `EdgeInsetsPropType`
- `PointPropType`
- `ViewPropTypes`
The deprecation history for these prop types is not super obvious, so here is a summary:
- `react@15.5` extracted `prop-types` into a separate package to reflect that not everybody uses them.
- `react-native@0.68` added a deprecation warning to built-in prop types. (https://github.com/facebook/react-native/commit/3f629049ba9773793978cf9093c7a71af15e3e8d)
- `react-native@0.69` removed built-in prop types. (https://github.com/facebook/react-native/commit/3e229f27bc9c7556876ff776abf70147289d544b)
- `react-native@0.71` restored built-in prop types, along with bug fixes to isolate deprecated usage. (https://github.com/facebook/react-native/commit/b966d297245a4c1e2c744cfe571396cfa7e5ffd3)
We believe that by the next public release, enough time will have passed for the community to be able to upgrade without patching React Native or otherwise working around the removal of these deprecated prop types.
**If anyone has trouble identifying the source of a deleted prop types usage, please file an issue so we can help track it down with you.**
Changelog:
[General][Removed] - Removed deprecated prop types
Reviewed By: lunaleaps, NickGerleman
Differential Revision: D52337762
fbshipit-source-id: 9731f7e1dec29f3df535ab75cc50bed001fdfa0b
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42017
Changelog: [Internal]
C++ unit tests for D52134592. The tests heavily use gtest / gmock features to mock the various interfaces associated with `InspectorPackagerConnection` (see `InspectorMocks.h`) and to make it easy to write complex assertions on dynamic and JSON values (see `FollyDynamicMatchers.h`).
To simplify access to the mock objects while they are owned by the `InspectorPackagerConnection` under test, I've also created the `UniquePtrFactory` helper (see doc comments and unit tests that fully explain its functionality).
Reviewed By: huntie
Differential Revision: D52134593
fbshipit-source-id: 23b8098232898be7e5cbd9b31b3358640c5e5eec
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41977
Changelog: [Internal]
Adds a new C++ implementation of `InspectorPackagerConnection`, intended to eventually replace `RCTInspectorPackagerConnection` on iOS and `InspectorPackagerConnection.java` on Android.
The main *new* abstraction in the C++ version is the `InspectorPackagerConnectionDelegate` interface, which will allow each platform to plug in its own scheduler and WebSocket implementation
This is almost entirely a direct translation of the Objective-C implementation to C++, so I've modelled it as a file copy in source control for ease of review. We may iterate further on the API at a later date, especially once the old implementations are gone.
Reviewed By: huntie
Differential Revision: D52134592
fbshipit-source-id: b4778b9c4fd424c4fa8d23bb9171629874e50e73
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41975
The version of `inspector-proxy` included with React Native has not used the `isLastBundleDownloadSuccess` and `bundleUpdateTimestamp` properties in years. This diff removes the backend support for reporting them (in preparation for a C++ rewrite of this infrastructure). We can consider bringing a similar feature back in the future on top of the modern CDP infra (which we are currently building).
Changelog: [General][Breaking] Remove APIs for reporting bundle download status to inspector-proxy, which does not use this information.
Reviewed By: huntie
Differential Revision: D52258567
fbshipit-source-id: e810278f949d8ab7dbc660cdc036a0f8464727f6
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41956
By default, generated Cxx sources for components all end up in same directory. However the include declarations in them look like this:
```
#include <react/renderer/components/${libraryName}/ShadowNodes.h>
```
And not like this:
```
#include "ShadowNodes.h"
```
This works fine with Buck because it supports header prefixes.
To get this working with CocoaPods we define additional `HEADER_SEARCH_PATHS` for our `React-Codegen` pod.
This approach will not work if we want to generate code at the library level and check in the artifacts. That's because we don't have control over the Podspec there, and can't inject those additional `HEADER_SEARCH_PATHS`.
This diff adds the `headerPrefix` argument to the codegen entry point. It is `react/renderer/components/${libraryName}` by default, but can become empty if we want to generate code at the library level, and don't want to deal with this nested header structure.
*Note:* `RNCodegen` runs all the generators [in a loop](https://github.com/facebook/react-native/blob/main/packages/react-native-codegen/src/generators/RNCodegen.js#L263-L275), assuming that the all have same function signature So I had to add the `headerPrefix` argument to all the generators, even to the ones that don't really need it.
Changelog: [General][Added] - Introduce "headerPrefix" codegen option.
Reviewed By: zeyap
Differential Revision: D51811596
fbshipit-source-id: c5c3e1e571c7c4ea2f5354eb9a7b0df6b917fc0c
Summary:
Adds changelog for the 0.72.8 release.
## Changelog:
<!-- Help reviewers and the release process by writing your own changelog entry.
Pick one each for the category and type tags:
[ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message
For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->
[INTERNAL] [CHANGED] - Add changelog for the 0.72.8 release.
Pull Request resolved: https://github.com/facebook/react-native/pull/42011
Test Plan: Read the changelog 🤞
Reviewed By: christophpurrer
Differential Revision: D52325318
Pulled By: huntie
fbshipit-source-id: 377a81f255c909b7da9370d6e3856265e2081b46
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41974
Changelog: [Internal]
Switches `RCTInspectorPackagerConnection` to use the recommended and type-safe `didReceiveMessageWithString` method to receive messages from SRWebSocket.
Reviewed By: huntie
Differential Revision: D52257082
fbshipit-source-id: ce1233a06b15a353500f81ae5a7730422c668be7
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41971
Original commit changeset: 29e1aba9c4ea
Original Phabricator Diff: D49956535
D49956535 added the new behaviour of logging helpful messages to the CDP console when the app is backgrounded/foregrounded. The underlying UX issue is legitimate: how do we reinforce the mental connection between the debugger frontend and the app being debugged, when they might be running in different windows or even machines, and particularly when the app might be backgrounded while the debugger frontend remains active.
However, this implementation is too closely coupled to the socket management layer, and is iOS-specific to boot. I'm removing it here to simplify porting `RCTInspectorPackagerConnection` to C++. We can revisit this UX problem later - preferably by investigating how it's handled in the case of Chrome Android and a remote DevTools client.
This feature has not been included in an OSS release of React Native yet, so very few users will be affected by its removal.
Changelog: [iOS][Removed] - Revert D49956535; remove console.log notification in DevTools if app transitions between back/foreground.
Reviewed By: blakef
Differential Revision: D51468311
fbshipit-source-id: b875d6cf03d3521c8e876c358b2299f20d395400
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41984
Changelog: [Internal]
this is unused anywhere, delete. for some reason we only have the spec file in oss but no native implementation
Reviewed By: christophpurrer
Differential Revision: D51968870
fbshipit-source-id: a4931d08c50954bfa557451e5e4d79a10dfeaefe
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41976
Progress towards an opt-in setup for our new CDP backend.
- Wires up D51563107 to conditionally disable the legacy Hermes debugger via `ReactNativeConfig`.
- **Configuration covered**: iOS, for the `RCTAppDelegate` code path.
- Create C++-only overload of `RCTAppSetupPrepareApp`, deprecate the previous function.
Changelog:
[iOS][Deprecated] - Deprecate `RCTAppSetupPrepareApp`, replaced with C++ overload
Reviewed By: motiz88
Differential Revision: D51589221
fbshipit-source-id: 1688f97c69abb06d271b4d26b875365a8d86ba77
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42002
Adds an E2E test on top of the RNTester example for this (as a practice we should probably do this for new examples).
I didn't add unit tests for this originally, but probably should do that as well if it gets more interesting...
Changelog: [Internal]
Reviewed By: joevilches
Differential Revision: D51639134
fbshipit-source-id: 379d95dfc676252e10b7076e294ac5534c6f06bf
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41994
X-link: https://github.com/facebook/yoga/pull/1529
Reorganizes the header according to common C++ convnetions. Public first, then private. Constructors, then functions, then member variables.
Reviewed By: joevilches
Differential Revision: D52106056
fbshipit-source-id: 0095cf7caa58dc79c1803b3b231911e4fc66ddaf
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41995
X-link: https://github.com/facebook/yoga/pull/1526
This function has made quite the journey from something that originally made more sense. This renames, refactors, and adds documentation for what it actually does.
This should eventually make its way into `yoga::Style` once computed style is moved into that structure.
bypass-github-export-checks
Reviewed By: joevilches
Differential Revision: D52105718
fbshipit-source-id: 6492224dd2e10cef3c5fc6a139323ad189a0925c
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41939
X-link: https://github.com/facebook/yoga/pull/1520
This code originates as `YGValueResolve`, used to compute a YGValue to a length in points, using a reference for 100%.
This moves it to `Style::Length`, so we can encapsulate parts of it (for style value functions), and make the API more cohesive now that we can do C++ style OOP with it.
Changelog: [Internal]
Reviewed By: joevilches
Differential Revision: D51796973
fbshipit-source-id: a7c359c7544f4bd2066a80d976dde67a0d16f1dd
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41776
X-link: https://github.com/facebook/yoga/pull/1492
# Summary
In preparation to replace `CompactValue`, this fully encapsulates it as an implementation detail of `yoga::Style`.
The internal API now always operates on `Style::Length`, converted to `YGValue` at the public API boundary.
In the next step, we can plug in a new representation within `Style`, which should enable 64 bit values, and lower memory usage.
# Test Plan
1. Existing tests (inc for style, invalidation, CompactValue) pass
2. Check that constexpr `yoga::isinf()` produces same assembly under Clang as `std::isinf()`
3. Fabric Android builds
4. Yoga benchmark does style reads
# Performance
Checking whether a style is defined, then reading after, is a hot path, and we are doubling any space style lengths take in the stack (but not long-term on the node). After a naive move, on one system, the Yoga benchmark creating, laying out, and destroying a tree, ran about 8-10% slower in the "Huge nested flex" example. We are converting in many more cases instead of doing undefined check, but operating on accessed style values no longer needs to do the conversion multiple times.
I changed the `CompactValue` conversion to YGValue/StyleLength path to check for undefined as the common case (since we always convert, instead of calling `isUndefined` directly on CompactValue. That seemed to get the difference down to ~5-6% when I was playing with it then. We can optimistically make some of this up with ValuePool giving better locality, and fix this more holistically if we reduce edge and value resolution.
On another machine where I tested this, the new revision went the opposite direction, and was about 5% faster, so this isn't really a cut and dry regression, but we see different characteristics than before.
# Changelog
[Internal]
Reviewed By: rozele
Differential Revision: D51775346
fbshipit-source-id: c618af41b4882b4a227c917fcad07375806faf78
Summary:
This PR optimises RCTKeyWindow() calls in `RCTForceTouchAvailable` method. This method was calling RCTKeyWindow hundreds of times while scrolling on the screen.
Before:
On the video you can see that this function is being called **350 times** just from simple list scrolling. RCTKeyWindow is looping over app windows so it's not a cheap operation.
https://github.com/facebook/react-native/assets/52801365/5b69cbd6-d148-4d06-b672-bd7b60472c13
After: the function is called only few times at the start of the app to get initial layout measurements.
Solution: I think we can check just once for the force touch capabilities as devices can't change it on the fly
bypass-github-export-checks
## Changelog:
[IOS] [FIXED] - Optimise RCTKeyWindow() calls in RCTForceTouchAvailable method
Pull Request resolved: https://github.com/facebook/react-native/pull/41935
Test Plan: CI Green
Reviewed By: dmytrorykun
Differential Revision: D52172510
Pulled By: cipolleschi
fbshipit-source-id: 881a3125a2af4376ce65d785d8eee09c7d8f1f16