Commit Graph
3665 Commits
Author SHA1 Message Date
Nick Tourte 7222926e0c Revert D42369492: Add basic tests for JsErrorHandler
Differential Revision:
D42369492 (https://github.com/facebook/react-native/commit/68c0b063ed87de8a10406402a83e90216eb7f59a)

Original commit changeset: 3d984ac90dae

Original Phabricator Diff: D42369492 (https://github.com/facebook/react-native/commit/68c0b063ed87de8a10406402a83e90216eb7f59a)

fbshipit-source-id: d0b21d62855a168451386b769b85913975efb303
2023-01-05 13:25:50 -08:00
Moti Zilberman 68c0b063ed Add basic tests for JsErrorHandler (#35781)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35781

Changelog: [Internal]

Adds basic unit tests for `JsErrorHandler`. The tests contain TODO comments where incorrect behaviour is exposed.

Reviewed By: RSNara

Differential Revision: D42369492

fbshipit-source-id: 3d984ac90dae295e4b85f3512bff362b121ec97e
2023-01-05 12:38:41 -08:00
Moti Zilberman 5009ad33a6 Make MapBuffer movable
Summary:
Changelog: [Internal]

`MapBuffer` already has a move constructor but did not have a move assignment operator prior to this diff. Changing this requires removing the `const` qualifier from `bytes_`, but this seems OK in practice as it will still be treated as `const` by all the `const` accessors on `MapBuffer`.

Reviewed By: RSNara

Differential Revision: D42369493

fbshipit-source-id: f0fcce533d8e0883dcf85d7262620ea77f377644
2023-01-05 12:38:41 -08:00
fabriziobertoglio1987 dcc5dbe562 adding togglebutton to attributedstring conversions (#35632)
Summary:
fixes runtime error `E/ReactNativeJNI(24576): Unsupported AccessibilityRole value: togglebutton` when using togglebutton accessibilityRole with Text. Related https://github.com/fabriziobertoglio1987/react-native/commit/da899c0cc4372830e5ca053a096b74fff2a19cb8

## Changelog

[GENERAL] [FIXED] - Fixes crash when using togglebutton accessibilityRole with Text

Pull Request resolved: https://github.com/facebook/react-native/pull/35632

Reviewed By: lunaleaps

Differential Revision: D42360628

Pulled By: rshest

fbshipit-source-id: afca8f540d972e1df0c390b3dff8875f07804e97
2023-01-05 12:11:46 -08:00
Ruslan Lesiutin fee9510b2d refactor(ReactNative/Slider): moved iOS sources to internal (#35365)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35365

# Changelog:
[iOS][Removed] - removed iOS sources of Slider module

Reviewed By: NickGerleman

Differential Revision: D41069547

fbshipit-source-id: 8faf96701f69e19074fafac45b1c95b939c2b1ac
2023-01-05 06:12:47 -08:00
Ruslan Lesiutin 4c40014d43 refactor(ReactNative/Slider): moved android sources to internal
Summary:
# Changelog:
[Android][Removed] - removed android sources of Slider module

Reviewed By: NickGerleman

Differential Revision: D41062668

fbshipit-source-id: fe628527f757d4fefa8ecf2c0c952aaf8d4acec2
2023-01-05 06:12:47 -08:00
Ruslan Shestopalyuk 55db1b23ff Better event mapping handling in prop setter (#35775)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35775

[Changelog][Internal]

Follow-up to D42344715 (https://github.com/facebook/react-native/commit/f70a2f6e3857f9e9d1f2ab9b6847fe318e67bd78).

I realized that the problem that was fixed there could have been avoided, to begin with, by crafting the corresponding macro more carefully.

This gives both more readable and less fragile code.

Reviewed By: mdvacca

Differential Revision: D42345323

fbshipit-source-id: d4b6d5a95aab360ef0aac3ecb0f157d5325271b6
2023-01-05 02:59:37 -08:00
Ruslan Shestopalyuk f70a2f6e38 Fix mapping of the "onResponderMove" event via props parsing (#35772)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35772

[Changelog][Internal]

Noticed when looking into the events handling code - this looks like a copy/paste error, presumably introduced in D37050215 (https://github.com/facebook/react-native/commit/47280de85e62f33f0b97bc1ed7c83bc6ca0dc7d4).

The correct event name is `onResponderMove`, as evident from all other places in code and the documentation.

Reviewed By: sammy-SC

Differential Revision: D42344715

fbshipit-source-id: fbf1648efaee696edcc7c945ebc0e8423246138b
2023-01-04 14:09:44 -08:00
Ruslan Shestopalyuk 09ad0cc0c6 Implement reporting of events from native side to WebPerformance API (#35768)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35768

Changelog: [Internal]

This implements native side mechanics for reporting user events timing to JS  (PerformanceObserver API).

See the standard for more details: https://www.w3.org/TR/event-timing/

The events are only logged when there are any active subscriptions (via `PerformanceObserver.observe`), also we only log "discrete events" (i.e. no likes of mouse move), so the overhead is non-existing.

There are two main metrics of interest for an event lifecycle:
* Time the event is spent in the queue, i.e. the time between it's created and dispatched
* Time that is spend in the event handler on the JS side (event dispatch), or processing time

Both of these are measured, and the corresponding fields are populated.

Reviewed By: sammy-SC

Differential Revision: D42294947

fbshipit-source-id: 4fd7938c04b942400befa4057d4929fb2763cee1
2023-01-03 11:11:37 -08:00
Tomek Zawadzki 292268ea3f Eliminate double call of shadowNodeFromValue in dispatchCommand (#35695)
Summary:
This PR slightly improves the implementation of `dispatchCommand` method of `UIManagerBinding` to use existing variable `shadowNode` instead of calling `shadowNodeFromValue` again.

## Changelog

[INTERNAL] [CHANGED] - Eliminated double call of `shadowNodeFromValue` in `dispatchCommand`

Pull Request resolved: https://github.com/facebook/react-native/pull/35695

Test Plan: Launch RNTester with Fabric enabled and check if `scrollTo` or some other command works properly.

Reviewed By: christophpurrer

Differential Revision: D42233216

Pulled By: robhogan

fbshipit-source-id: db152206060ff599962f47c43fda8ea797f2a8cb
2023-01-03 03:07:13 -08:00
Ruslan Shestopalyuk ad953f6f4b Unify native performanceNow implementation across platforms
Summary:
[Changelog][Internal]

Both iOS and Android platforms are at this point using the same native implementation of `performanceNow`, based on `std::chrono` (it used to be different some time ago).

This diff unifies the implementations, so it comes from one place in C++ code for all platforms.

The context is that I am developing event timing instrumentation and need a consistent way to get current timestamp from either JS or native (C++) side. The latter is now possible via calling `JSExecutor::performanceNow()`, which is guaranteed to be the same as called from JS.

Reviewed By: christophpurrer

Differential Revision: D42267898

fbshipit-source-id: dcb592f37d6567340ea59faddbf3b6d2b8507d50
2022-12-28 11:03:14 -08:00
Ruslan Shestopalyuk 673d7e81a2 Avoid using shared_ptr when forwarding arguments in AsyncCallback (#35731)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35731

[Changelog][Internal]

The initial intent was to try and use `unique_ptr` instead of `shared_ptr`, however turns out it complicates code more than it's worth it, so I ended up just factoring the repeated complex parts of the corresponding code to make it easier to reason about.

Reviewed By: christophpurrer

Differential Revision: D42265274

fbshipit-source-id: 105f57b449934c2e3227e592a76036ca7f61bc35
2022-12-28 10:29:23 -08:00
Nick Gerleman 255d648101 Remove yoga/internal/experiments (#1195)
Summary:
X-link: https://github.com/facebook/yoga/pull/1195

These files are remnants of experimentation functions from D16687367 (https://github.com/facebook/react-native/commit/c9b757f5135d31c48237a6148393568a26ab65fc). They do not seem to be included anywhere anymore, and we already have a YGExperimentalFeature setter in config we can use in the more common case.

Changelog:
[Internal]

Reviewed By: christophpurrer

Differential Revision: D42241980

fbshipit-source-id: 482984b9a619dba8042e9166aee02a5e75e761ee
2022-12-28 01:29:36 -08:00
Samuel Susla 874881e73e Bring setNativeProps to Fabric
Summary:
changelog: [internal]

This is experimental implementation of `setNativeProps` in Fabric.

This diff brings `setNativeProps` to Fabric to make migration easier. I tried to stay as close as possible to Paper's behaviour, with all of its flaws (ready CAUTION section on https://reactnative.dev/docs/direct-manipulation)

State can't be stored in views because on iOS, eventually on Android, views are not the source of truth, shadow tree is. Fabric's implementation keeps state from setNativeProps in shadow node family in very inefficient data structure folly::dynamic. It is always reconciled with new prop updates. The performance cost is only paid in case node has used `setNativeProps` before.

Reviewed By: mdvacca

Differential Revision: D41875413

fbshipit-source-id: 453a5f7612a6f86a4cece269b13bd2ffd0c0e2d1
2022-12-24 06:40:42 -08:00
Gabriel Donadel Dall'Agnol 9669c10afc feat: Add Fabric implementation of inset logical properties (#35692)
Summary:
This PR implements `inset` logical properties as requested on https://github.com/facebook/react-native/issues/34425. This implementation includes the addition of the following style properties

- `inset`, equivalent to `top`, `bottom`, `right` and `left`.
- `insetBlock`, equivalent to `top` and `bottom`.
- `insetBlockEnd`, equivalent to `bottom`.
- `insetBlockStart`, equivalent to `top`.
- `insetInline`, equivalent to `right` and `left`.
- `insetInlineEnd`, equivalent to `right` or `left`.
- `insetInlineStart`, equivalent to `right` or `left`.

## Changelog

[GENERAL] [ADDED] - Add Fabric implementation of inset logical properties

Pull Request resolved: https://github.com/facebook/react-native/pull/35692

Test Plan:
1. Open the RNTester app and navigate to the `View` page
2. Test the new style properties through the `Insets` section

<table>
<tr>
    <td>Android</td>
    <td>iOS</td>
</tr>
  <tr>
    <td><img src="https://user-images.githubusercontent.com/11707729/208821212-fbbac6ed-09a4-43f4-ba98-dfd2cbabf044.png"  alt="1" width="360px"   />
    </td>
<td>
<img src="https://user-images.githubusercontent.com/11707729/208816997-ef044140-8824-4b1b-a77b-085f18ea9e0e.png" alt="2" width="360px"  />
</td>
   </tr>
</table>

Reviewed By: NickGerleman

Differential Revision: D42193661

Pulled By: ryancat

fbshipit-source-id: 3db8bcd2c4db0ef4886b9ec49a46424d57362620
2022-12-21 20:07:35 -08:00
Neil Dhar 03b17d9af7 Clarify const-ness of JSI references
Summary:
Many operations on references in JS can modify the referent by
executing additional JS, including operations that we currently mark as
const such as `getProperty`. Because of this, the current distinction
between const and non-const operations on references like `jsi::Object`
is somewhat arbitrary.

A more consistent approach is to mark all operations as const, so that
it is clear that the const-ness applies to the reference and not the
referent. This is analogous to how smart pointers work, since something
like `const shared_ptr<T>` only makes the pointer const, as opposed to
`shared_ptr<const T>`.

This also gives users better guarantees and more flexibility in where
these references may be used.

Changelog:
[General][Changed] - Mark methods on JSI references as const.

Reviewed By: fbmal7

Differential Revision: D41599116

fbshipit-source-id: 40b1537581b09c5a34d0928ee04e7db2b50d26ea
2022-12-15 19:18:15 -08:00
Nishan d867ec0abb fix: remove gap if its last element in line (fix flex gap extra spacing when children determine parents main axis size) (#1188)
Summary:
Fixes - https://github.com/facebook/react-native/issues/35553

## Approach
We're using `betweenMainDim` to add [gap between](https://github.com/intergalacticspacehighway/yoga/blob/bbeede82d36cd89657faf385aaa704f45443c326/yoga/Yoga.cpp#L2495) items in main axis. This is resulting in increased [main axis](https://github.com/intergalacticspacehighway/yoga/blob/bbeede82d36cd89657faf385aaa704f45443c326/yoga/Yoga.cpp#L2598) dimension of the container as it gets added even for the last element. One solution is to keep using it and subtract the gap when last element is reached.

## Aside
Mutating this value feels weird, but I think `betweenMainDim` gets initialized for every line so should be fine? I did some manual tests to verify. I tried running tests but I'll have to downgrade the java version. Let me know if anything fails. Thanks! 🙏

X-link: https://github.com/facebook/yoga/pull/1188

Reviewed By: necolas

Differential Revision: D42078162

Pulled By: NickGerleman

fbshipit-source-id: 0e535618350422e001141a8786a83fc81651afe9
2022-12-15 16:30:37 -08:00
Christoph Purrer 61c6788a3a Replace folly::Optional with std::optional in hermes/inspector (#35613)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35613

Changelog: [Internal]

Reviewed By: mattbfb

Differential Revision: D41918823

fbshipit-source-id: b783fd550c27533306e165ea98647d133a90874c
2022-12-14 16:22:13 -08:00
Michael Anthony Leon 56636718f6 Retain usage of HERMES_ENABLE_DEBUGGER flag (#35646)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35646. Even though the RN code itself does not need `HERMES_ENABLE_DEBUGGER` anymore since the `ifdef`s are gone, the Hermes' headers it includes *do* still need that flag. This is because they were compiled with `HERMES_ENABLE_DEBUGGER` to set true, so that compile flag must match later on when importing the headers.

Changelog:
[Internal][Fixed] - We erroneously deleted usage of the HERMES_ENABLE_DEBUGGER flag, add it back.

Reviewed By: cortinico, mattbfb

Differential Revision: D42041827

fbshipit-source-id: db875f40a067c09aba37ab1b07422157f63b3700
2022-12-14 13:32:49 -08:00
Ruslan Shestopalyuk 33324b8d91 Add uint32_t as accepted data type for bridging communication
Summary:
Add `uint32_t` as a valid type for communication between C++ and JS via bridging.

Changelog: [Internal]

Reviewed By: christophpurrer

Differential Revision: D42008412

fbshipit-source-id: 2c038e37745782b677d28bcbe4cc030683b74286
2022-12-14 09:02:55 -08:00
Riccardo be895c870c Properly support both libraries and use_frameworks (#35624) (#35637)
Summary:
Backporting a [fix](https://github.com/facebook/react-native/commit/c6fa6335971459158efc8bf094822547a4333235) on the `ReactCommon.podspec` to properly support static libraries and
static frameworks
## Changelog

[IOS][FIXED] - Properly support static libraries and static frameworks

Pull Request resolved: https://github.com/facebook/react-native/pull/35637

Test Plan: Tested in 0.71-RC4

Reviewed By: christophpurrer

Differential Revision: D42029571

Pulled By: cipolleschi

fbshipit-source-id: e562fe211931a0aebba282057589e5dd4fafe3ba
2022-12-14 02:24:07 -08:00
Xin Chen cf9c7d51ef Fix edge case when delete is queued with conflict layout animation
Summary:
This is a two step (1/2) fix to a race that could caused a `DELETE`...`CREATE` mutations being sent over to the fabric mounting layer. Such combination was assumed not possible from the differ, yet it happened at least in the existence of layout animation and when certain commits happen while animation is active.

This race condition could cause a view to get deleted at the end of one UI frame, yet the mount instructions generated from animation in the next frame still need to access the deleted view and caused crashes like T112157805. Note that even though such crash is recorded as `RetryableMountingLayerException` and is a soft crash (which only gets logged but not crash in production), the out-of-order mount instructions could lead to illegal view state and make the surface unusable, like what's shown here:

{F820669000}

The diff fixes this issue by removing the `DELETE` [conflict animation](https://fburl.com/code/5ctckvz3) keyframe, as well as the `CREATE` [immediate mutations](https://fburl.com/code/txyomytd) from the layout animation. The Fabric mounting layer assumes no combination of `DELETE...CREATE` in the same frame from differ + [layout animation overrides](https://fburl.com/code/zn17uqch).

Reviewed By: sammy-SC

Differential Revision: D41895427

fbshipit-source-id: d6df02663ba707af6db4a63a325ac776ca54d18e
2022-12-13 01:17:37 -08:00
Michael Anthony Leon 8284303ec8 Always include inspector
Summary:
Changelog:
[Android][Changed] - Include the inspector in all build modes, and only turn it off/on at runtime.

Reviewed By: jpporto

Differential Revision: D40248901

fbshipit-source-id: f13c58f631e4617a6f157df8899e128959af450a
2022-12-08 14:57:29 -08:00
Samuel Susla 1d3fa40c59 Add setNativeProps to Fabric
Summary:
changelog: Introduce setNativeProps to Fabric

Add support for `setNativeProps` in Fabric for backwards compatibility. It is still recommended to move away from `setNativeProps` because the API will not work with future features.

We can make step [Migrating off setNativeProps](https://reactnative.dev/docs/new-architecture-library-intro#migrating-off-setnativeprops) in migration guide optional.

Reviewed By: yungsters, mdvacca

Differential Revision: D41521523

fbshipit-source-id: 4d9bbd6304b8c5ee24a36b33039ed33ae1fc21f8
2022-12-06 04:47:51 -08:00
Samuel Susla 86786f1d22 Introduce FabricUIManager.findShadowNodeByTag_DEPRECATED
Summary:
changelog: [internal]

Add findShadowNodeByTag_DEPRECATED` to Fabric's UIManager.
This API makes it possible to get ShadowNode reference for given native tag.
We will leverage this API to make UIManager.measure* calls backwards compatible in the new architecture.

Reviewed By: yungsters

Differential Revision: D41550734

fbshipit-source-id: a45b6a76634d034eac70603bad8ac60f9135ff24
2022-12-06 04:43:18 -08:00
Ruslan Shestopalyuk e2c4941c80 Add ability to schedule JS functions as tasks from turbo modules (#35525)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35525

[Changelog][Internal]

Adds ability to invoke an async JS callback from a C++ native module, as a task with priority.

This will allow native modules to schedule less important calls to JS thread with lower priority. One example use case is feeding collected perf metrics back to JS.

Reviewed By: javache

Differential Revision: D41492849

fbshipit-source-id: 12f738557972dc23398d9bb9a7a01125c79da070
2022-12-01 09:49:44 -08:00
TatianaKapos 879d303fc7 Fix windows build of RectangleEdges (#35516)
Summary:
[PR: Avoid emitting mountitems for default values](https://github.com/facebook/react-native/commit/56e9aa369f5c13af38cf80ba47e9eb29d835ec89) used a constexpr in a template, which windows is unable to compile since type at this point is incomplete. Once removed, windows is able to build again. Let me know if there's a better way to fix this!

See [10072](https://github.com/microsoft/react-native-windows/issues/10072) for windows error messages

## Changelog

<!-- Help reviewers and the release process by writing your own changelog entry. For an example, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->
[General] [Fixed] - Remove constexpr from RectangleEdges.h

Pull Request resolved: https://github.com/facebook/react-native/pull/35516

Test Plan: Windows has forked this file and had the change for ~5 month, all tests pass on Windows side

Reviewed By: javache

Differential Revision: D41639514

Pulled By: rshest

fbshipit-source-id: fbe595f71a7ab0accb7a76edf58ffb6aeef1ae96
2022-12-01 07:43:59 -08:00
Ian Petersen 5f01622ab7 Fix Yoga's conditional use of std::bit_cast<>()
Summary:
Yoga tries to use `std::bit_cast<>()` where it's available and falls back to
`std::memcpy()` everywhere else.  Unfortunately, the feature-test macro
(`__cpp_lib_bit_cast`) is only defined if the feature is available *and you have
already included either `<version>` or `<bit>`* (or something else that includes
one of those).  Since `CompactValue.h` checks `__cpp_lib_bit_cast` *first*, it's
not defined even if it *would be*  defined, leading the header not to
`#include <bit>`, leaving `std::bit_cast<>()` undefined; later, other headers
from the STL are included, leading to `__cpp_lib_bit_cast` *becoming* defined
and causing later code to choose to use the undefind `std::bit_cast<>()`.

This diff fixes the problem by `#include`ing either `<version>` or `<ciso646>`
(depending on availability) before checking any feature-test macros.

Changelog: [Internal]

Reviewed By: smeenai

Differential Revision: D41641205

fbshipit-source-id: 7d7bc5791c902a45302d3707e6cbf21fc0493f0c
2022-12-01 02:30:57 -08:00
Kwasow 2db26c548b Fixed typo in ReactCommon/buffer/map.h (#34631)
Summary:
Fixed a typo inside ReactCommon.

## Changelog

[General] [Fixed] - Fixed typo in comment

Pull Request resolved: https://github.com/facebook/react-native/pull/34631

Test Plan: _This change does not require testing._

Reviewed By: cortinico

Differential Revision: D39382191

Pulled By: cipolleschi

fbshipit-source-id: 73939daaaa6199992019e74fe67d638176c8b58d
2022-11-30 06:55:21 -08:00
Nicola Corti ca9ef9f769 Rename hermes-* target to don't use dashes (#35506)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35506

In our build we had a mixture of `_` and `-` to separate targets.
Dashes don't play well with Gradle + as we expose them now via Prefab,
let's stick to use only underscores

Changelog:
[Internal] [Changed] - Rename target to don't use dashes

Reviewed By: cipolleschi

Differential Revision: D41578938

fbshipit-source-id: 8aa44aa2dc7bf4822b45e5044532837b989817d2
2022-11-29 10:43:54 -08:00
Riccardo Cipolleschi 3d7b53d456 Bring back JSIDynamic and JSI together
Summary:
In 0.71.0-RC.2, we had a regression in `use_frameworks!`.

This brings back JSIDynamic and JSI together because the current setup is not compatible with iOS frameworks

## Changelog
[iOS][Added] - Bring back JSIDynamic and JSI

Reviewed By: cortinico

Differential Revision: D41557823

fbshipit-source-id: 95eb2fe7df69992861396e41d11cd5182193e1a3
2022-11-29 08:53:50 -08:00
Riccardo Cipolleschi c5de1eb1ba Fix imports in React Bridging for Old Arch and frameworks
Summary:
In 0.71.0-RC.2, we had a regression in `use_frameworks!`.

The `use_frameworks! :linkage => :static` use to work fine with the Old Architecture.
We modified how the `React-bridging` pod is configured and, now those are broken.

This change make sure to use the right imports for React-bridging.

## Changelog
[iOS][Changed] - Fix imports in React Bridging for Old Arch and frameworks

Reviewed By: christophpurrer, cortinico

Differential Revision: D41551103

fbshipit-source-id: 4416fde92fef11eb801daf2302a57fe52732e4ef
2022-11-29 08:53:50 -08:00
Riccardo Cipolleschi dd0bf83481 Do not add LongLivedObject wrapper in OSS (#35491)
Summary:
This change excludes the `LongLivedObject.h` file from the pod in the ReactCommon library.

The file creates a problem when the `use_frameworks!` option is used in an app because there can't be two files with the same name, despite being in different paths,
within the same framework. Specifically, this `LongLivedObject` is just a redirect to the other one, so it should be safe to exclude this.

## Changelog

[iOS][Fixed] - Exclude redirector to `LongLivedObject.h` from ReactCommon podspec

Pull Request resolved: https://github.com/facebook/react-native/pull/35491

Test Plan: 1. Manually tested in an app from RC2

Reviewed By: cortinico

Differential Revision: D41548985

Pulled By: cipolleschi

fbshipit-source-id: acc57fccdedb344a3aa105f2968645a049392e07
2022-11-29 08:53:50 -08:00
Pieter De Baets 70bb6444aa Remove iOS TurboModuleManager experiment with shared mutex
Summary: Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D41551085

fbshipit-source-id: f4d1d8126529d5f384ada941f6fb140abcfd9716
2022-11-29 08:29:05 -08:00
Pieter De Baets 229a1ded15 Remove ObjCTurboModule experiments with retaining JS callbacks in custom scopes
Summary: Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D41551086

fbshipit-source-id: b70965bcf2af6ebac921cc627c196ec108f73944
2022-11-29 08:29:05 -08:00
Pieter De Baets cadf850ac1 Remove JavaTurboModule experiments with retaining JS callbacks in custom scopes
Summary: Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D41551087

fbshipit-source-id: 5bdcd5f8c9bac99603f6187a9bc387827f5321c7
2022-11-29 08:29:05 -08:00
Nicola Corti cf4269ab33 Expose jscruntime to be consumed via Prefab
Summary:
This is the last library that we should expose via Prefab.
Thanks to cipolleschi 's work here moving the file to `/ReactCommon/jsc` folder
we can easily expose it to be consumed by third parties.

Changelog:
[Internal] [Changed] - Expose `jscruntime` to be consumed via Prefab

Reviewed By: cipolleschi

Differential Revision: D41534564

fbshipit-source-id: fb4b2d801def8caf71638dcb74eb87f8230984d4
2022-11-28 04:13:55 -08:00
Riccardo Cipolleschi f3bf4d02ab Move JSCRuntime into its own folder (#35482)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35482

This change moves the JSCRuntime.h/cpp into a `jsc` folder.

This change is required for several reasons:
1. on iOS, the new `jsi`, `jsidynamic` and `jsc` setup is breaking the `use_frameworks!` with  `:linkage => :static` option with the old architecture. So it is a regression.
2. JSCRuntime is required by some libraries and needs to be exposed as a prefab and the current setup makes it hard to achieve.

allow-large-files

## Changelog:
[General][Changed] - Move JSCRuntime into a separate pod/prefab

Reviewed By: cortinico

Differential Revision: D41533778

fbshipit-source-id: 642240c93a6c124280430d4f196049cb67cb130b
2022-11-28 04:13:55 -08:00
Christoph Purrer 022e22cbd4 Replace folly::Optional with std::optional (#35436)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35436

Using std::optional as react-native has been using C++17 for quite some time

changelog: [Internal]

Reviewed By: cortinico

Differential Revision: D41415031

fbshipit-source-id: d786647f64b4f90cf75409109830ae0885460c17
2022-11-28 02:08:12 -08:00
Nicola Corti b70707b96d Expose hermes-executor to be consumed via prefab (#35457)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35457

This exposes `hermes-executor` to be consumed via prefab so that
libraries can depend on it and use its symbols if needed (Expo and Reanimated need it).

Changelog:
[Internal] [Changed] - Expose `hermes-executor` to be consumed via prefab

Reviewed By: cipolleschi

Differential Revision: D41520019

fbshipit-source-id: d590a043ea89fdd8ff41b0ed20900c9cf381a1e4
2022-11-24 08:45:15 -08:00
Christoph Purrer 9517320176 Enable C++17 for cxxreact and jsiexecutor/inspector and ... (#35435)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35435

This raises the C++ language standard to C++17 which is needed to remove some folly:: dependencies

changelog: [Internal]

Reviewed By: cortinico

Differential Revision: D41482821

fbshipit-source-id: 62af6e95e6e78378112a4ce4e9c3ab7df0587218
2022-11-23 18:48:47 -08:00
Phillip Pan e6cba99744 rename Geometry.h -> Vector.h
Summary:
Geometry only contains the Vector struct now, renaming it for accuracy

Changelog: [Internal]

Reviewed By: stephinphection

Differential Revision: D41453351

fbshipit-source-id: 973b4a03208f4eeb0e209ea0aa58f5beca17c483
2022-11-23 16:16:38 -08:00
Phillip Pan c5a8425fad more Geometry.h cleanup
Summary: Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D41452147

fbshipit-source-id: f427b8d95572c4b602b96962be187b62b801d62b
2022-11-23 01:41:23 -08:00
Nick Gerleman a02bd0ded1 Add explicit defaulted copy ctor to Values (#1176)
Summary:
X-link: https://github.com/facebook/yoga/pull/1176

`Values` is a wrapper to story an array of YGValue's as CompactValues.

From https://github.com/facebook/yoga/issues/1174 we see a warning `Wdeprecated-copy` beacuse a user-defined copy constructor is not present, but a user-defined asignment operator is (the defaulted one). This adds an explicitly defaulted copy contructor which should silence the warning I think.

Changelog:
[Internal]

Reviewed By: christophpurrer

Differential Revision: D41447490

fbshipit-source-id: 8cc8f291cf12014d87cc71c4598bb84fdd6cd930
2022-11-21 16:33:36 -08:00
Christoph Purrer 6c315de226 Add butter/function.h (#35385)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35385

In OpenSource builds folly:: types are not always easy to consume.

With butter:: we actually allow consumers to opt-into other/non folly:: types (by providing a custom butter:: implementation).

This change adds a butter::function for that purpose.

It is especially useful for react-native-windows which prefers Mso::Functor over folly::Function.

You can use it by setting those compiler flags:
-DBUTTER_FUNCTION_OVERRIDE_INCLUDE=<functional/functor.h>
-DBUTTER_FUNCTION_OVERRIDE=Mso::Functor

std::function is no option as it is not move-only and we can't wait till 2025 > https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0288r9.html

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D41388193

fbshipit-source-id: 56f58b9ddc602aa4b13000031d50de5228b4a16b
2022-11-21 11:17:01 -08:00
Phillip Pan ad0c8551c2 remove all unnecessary imports to Geometry.h
Summary: Changelog: [Internal]

Reviewed By: stephinphection

Differential Revision: D41366189

fbshipit-source-id: ea4ed1f0c759b5a05012425684bfb835dbe90904
2022-11-18 11:51:39 -08:00
Pieter De Baets e504141583 Remove 'using namespace' from header files
Summary:
Fix linter warning when pulling in some code into AR

Changelog: [Internal]

Reviewed By: NickGerleman, mdvacca

Differential Revision: D41269423

fbshipit-source-id: 4305d6c362a51e62b19b4d3590fb0823073dff9a
2022-11-17 06:19:07 -08:00
Christoph Purrer 1ec1785e32 Unify SystraceSection.h implementation (#35353)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35353

Unfortunately we have 2 different definitions of SystraceSection.h
- xplat/js/react-native-github/ReactCommon/cxxreact/SystraceSection.h
- xplat/js/react-native-github/ReactCommon/react/renderer/debug/SystraceSection.h

The first one is the Old Arch one and the second one is the New Arch one.

As we first step, we unify the implementation

Changelog: [Internal]

Reviewed By: rshest

Differential Revision: D41307049

fbshipit-source-id: a9eb854dfcf49f87ad81fd9cc8dbe51648ecd209
2022-11-16 12:58:42 -08:00
Nick Gerleman 67b8e182fa Add Fabric implementation of flow-relative padding and margin (#35342)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35342

This is a native implementation of the JS shimmed layout-specific properties in https://github.com/facebook/react-native/pull/35316.

There is an experiment splitting the prop splitting codepath in Fabric, so this change effectively has two implementations depending on whether `enablePropIteratorSetter` is enabled.

None of these changes make sense to propagate Yoga. `inlineEnd`, etc are already mapped to `YGEdgeStart` and `YGEdgeEnd`, but RN's mapping used a different name. Then `blockStart`, `blockEnd`, map directly to existing edges in all cases since we don't support a writing mode.

On web, the last value in the style which computes the given dimension is given precedence. E.g. if "left" comes after "start" it will be chosen. Yoga stylesheets are unordered, and precedence for edges is given based on specificity (left > start > horizontal > all).

We give precedence to new renamings (e.g. start to inlineStart), but to preserve consistent behavior, we give precedence to specific edges before overwriting them with flow relative ones (e.g. marginTop has precedence over marginBlockStar).

Changelog:
[General][Added] - Add Fabric implementation of flow-relative padding and margin

Reviewed By: javache

Differential Revision: D41267765

fbshipit-source-id: 896e2ed71fe8bf83aef00b0a9d70fd20b2ce47a7
2022-11-16 12:31:33 -08:00
Nick Gerleman 1aa157b196 Incorporate gap space into main axis overflow flag (#1173)
Summary:
X-link: https://github.com/facebook/yoga/pull/1173

In https://github.com/facebook/react-native/issues/35351 we see incorrect child item height when the flex-wrap is enabled, the cross-axis is to be stretched, and main-axis overflow is caused by gap.

In YGDistributeFreeSpaceSecondPass, if we do not have overflow (determined by flexBasisOverflows), we have stretch cross-alignment, and we reason that nothing can add to main axis dimensions, we know we're a single line and want to take full cross dimensions. and can set YGMeasureModeExactly which uses parent dimensions. Guessing an optimization?

If we do have overflow, then we set YGMeasureModeAtMost to find minimum possible cross-axis dimensions instead.

`flexBasisOverflows` incorporates both computed flex basis, and margin, so it is more generally a flag for whether we will wrap. So we should incorporate gap spacing into it. E.g. it is also used for whether we should the match main axis parent dimension of the overall container. This change does just that, and renames the flag to `mainAxisOverflows`.

We will want to cherry-pick the fix for this into RN 0.71 since we have not yet introduced the community to the incorrect behavior, and we expect a lot of usage of flex-gap.

Changelog:
[General][Fixed] - Fix incorrect height when gap causes main axis to overflow and cross-axis is stretched

Reviewed By: yungsters

Differential Revision: D41311424

fbshipit-source-id: bd0c3b5aac478a56878703b6da84fc3993cc14da
2022-11-15 19:51:48 -08:00