Commit Graph

12270 Commits

Author SHA1 Message Date
Ruslan Shestopalyuk 1a4075f72f Executors.java->.kt (#45702)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45702

# Changelog:
[Internal] -

As in the title.

Reviewed By: tdn120

Differential Revision: D60282843

fbshipit-source-id: b43262d62d35d9cf172b90ab0c95d100dea43e26
2024-07-27 12:34:34 -07:00
Ruslan Shestopalyuk bf0705a308 Migrate ContenstSizeChangeEvent.java->.kt (#45700)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45700

# Changelog:
[Internal] -

As in the title.

Reviewed By: tdn120

Differential Revision: D60280502

fbshipit-source-id: 976004e2cb289b72eef02e5288026cf6e2dba832
2024-07-27 11:49:20 -07:00
Nick Gerleman 006c1391c2 Port "setAndroidLayoutDirection" to Paper (#45422)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45422

When `ReactNativeFeatureFlags.setAndroidLayoutDirection()` is set, we assume in components like ReactHorizontalScrolView that the Yoga contextual layout direction has been set on the underlying component, and skip using I18nManager global direction.

These native views are also used in Paper, so we need to make the change there as well to avoid regressions.

This change mechanically ports the change from Fabric to Paper, at the same layer as used in Fabric (applying ShadowNode layout to the Android view tree).

Changelog: [Internal]

Reviewed By: rshest

Differential Revision: D59708408

fbshipit-source-id: 52d6fa80c102250eae7ccccedd7184569f6a727f
2024-07-27 11:47:46 -07:00
Nick Gerleman cd0729ce90 Disable "setAndroidLayoutDirection" in default feature flags (#45753)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45753

Let's turn this off, for clients where the feature flag isn't wired to a config, until the issue with `removeClippedSubviews` is resolved.

Changelog: [Internal]

Reviewed By: cortinico

Differential Revision: D60273063

fbshipit-source-id: 6302a7e1f204459ec7f5cbdb26a521e07e023458
2024-07-27 11:47:46 -07:00
Nick Gerleman 06e38b55da Explicitly handle NaN values in PixelUtil (#45690)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45690

ViewManager layer often uses `YogaConstants.UNDEFINED` (`NaN`) as null-state value. Teaching PixelUtil how to handle `NaN` values makes glue code around easier. I think this technically isn't needed, since the resultant operations would become `NaN`, but it seems like poor form/hard to reason about to propagate NaN into arithmetic or library functions.

Changelog: [Internal]

Reviewed By: cortinico

Differential Revision: D60265329

fbshipit-source-id: b2f4abaefb30ebd58c2644d072bb7e5bc4b3ee7b
2024-07-27 11:39:27 -07:00
Nick Gerleman 244e242897 Expose more in CSSBackgroundDrawable (#45691)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45691

1. Add some accessors, so we can keep accessors and setters symetric
2. Use the shared BorderStyle enum added in last diff
3. Fix some missing invalidation on setting style

Changelog: [Internal]

Reviewed By: rshest

Differential Revision: D60252276

fbshipit-source-id: 3dde6ad5926f109cefc7247da4ba1894694b1867
2024-07-27 11:39:27 -07:00
Nick Gerleman 72ceae9026 Add more style value types (#45687)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45687

This adds some more enums and data classes to encapsulate style values we are working with for border/background rendering. Right now, a lot of these are passed around as strings, or raw ints (of differing ordinals). These will be used as the public API of `BackgroundStyleApplicator` up the stack.

Changelog: [Internal]

Reviewed By: rshest

Differential Revision: D60252277

fbshipit-source-id: 0f8001869421ffffae9727c7904bf5e395505c08
2024-07-27 11:39:27 -07:00
Nick Gerleman 0c4df48ba4 Expose string types for boxShadow and filter (#45685)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45685

We built these to be able to parse web style string values, but the types only allow object form, and the TypeScript type is wrong.

Changelog: [Internal]

Reviewed By: joevilches

Differential Revision: D60263730

fbshipit-source-id: 7a6e93924a92e8e62346645cb4f8ab1a37dca34f
2024-07-27 11:39:27 -07:00
Nicola Corti a049a58790 Convert ReactImageManager to Kotlin (#45722)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45722

Splitting the ReactImageView convertion to another file, to see if this is causing further failures.

Changelog:
[Internal] [Changed] - Convert ReactImageManager to Kotlin

Reviewed By: rshest

Differential Revision: D60285050

fbshipit-source-id: 68415782a40c1eacf4e67fbdd2d70c962c0600c0
2024-07-27 10:42:29 -07:00
Nicola Corti 878802fe2a Convert com/facebook/react/views/image/MultiPostprocessor.java to Kotlin (#45712)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45712

This moves the first remaining file inside views/image from Java to Kotlin

Changelog:
[Internal] [Changed] - Convert com/facebook/react/views/image/MultiPostprocessor.java to Kotlin

Reviewed By: rshest

Differential Revision: D60283278

fbshipit-source-id: 800ba559750aca0bc9bf7311d0717c6f9bf635a7
2024-07-27 10:42:29 -07:00
Nicola Corti f888f2434c Make com.facebook.react.views.image nullsafe (#45711)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45711

Migrating this package in one go is proving harder than expected.
Let's split this through in smaller parts: I'm first marking the package as nullsafe.

Changelog:
[Internal] [Changed] - Make `com.facebook.react.views.image` nullsafe

Reviewed By: cipolleschi

Differential Revision: D60282604

fbshipit-source-id: 68879142a88bdc3c837dff91e53c5f5e891773f9
2024-07-27 10:42:29 -07:00
Joe Vilches 8fe3ae3ccc Fix issue where inset border radius was off when there is a border (#45658)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45658

The border radius of the inner "clear region" for inset shadows is based off of the border radius of the padding box path (i.e. the shadow path). Notably, this is not the View's given border radius iff there is a border present.

To get this "inner border radius" I added a new method inside of `CSSBackgroundDrawable`. This logic was already present [here](https://www.internalfb.com/code/fbsource/[33e35cbf387a]/xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/CSSBackgroundDrawable.java?lines=643-650), so I tried to share most of the code there. There may be a better way to do this, but this seems to be the quickest.

Changelog: [Internal]

Reviewed By: NickGerleman

Differential Revision: D60083309

fbshipit-source-id: ace1ffa15fc3c0c09d4df096b604c9a2c91382c8
2024-07-26 19:01:53 -07:00
Phillip Pan a694e4b325 clean up enable_sync_void_methods_android (#45683)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45683

Changelog: [Internal]

this did not make any meaningful progress, let's clean it up and revisit it later.

Reviewed By: fkgozali

Differential Revision: D60219828

fbshipit-source-id: 89a283d7c572dfcd6ef16472e81f3dce1c2cd284
2024-07-26 13:31:47 -07:00
Riccardo Cipolleschi 37cc7c7aec Create first test flow (#45574)
Summary:
## Context
Running manual tests when preparing a release, it's time consuming.
We have to do the cherry picks, wait for CI to finish, and then manually test 8 configurations.

Maestro is a tool that allow us to run E2E tests automatically, and we can wire it to CI.

## Change
Add a test flow for RNTester

## Changelog:
[Internal] - Exploration to integrate maestro

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

Test Plan: GHA

Reviewed By: blakef

Differential Revision: D60282147

Pulled By: cipolleschi

fbshipit-source-id: 4ecba84f0b2c7186de2bb9938043e73a0bd9a6bd
2024-07-26 09:57:46 -07:00
Nicola Corti 04159a53c8 Move react_codegen_* libraries for RNTester to OBJECT (#45735)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45735

This merges several 2 external libraries from .so to be included inside
libappmodules.so.

Changelog:
[Internal] [Changed] - Move react_codegen_* libraries for RNTester to OBJECT

Reviewed By: rozele, rshest

Differential Revision: D60290806

fbshipit-source-id: 6bfa40995d7538e075819d916e8a204464edb75b
2024-07-26 09:56:17 -07:00
Andrew Datsenko 95475eac20 xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/OnScrollDispatchHelper.java (#45676)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45676

Changelog: [Internal]

Reviewed By: christophpurrer

Differential Revision: D60233460

fbshipit-source-id: 7524fe461846466118e7037f01ac828535533d17
2024-07-26 08:53:54 -07:00
Andrew Datsenko 77dfa43e43 xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricComponents.java (#45673)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45673

Changelog: [Internal]

Reviewed By: christophpurrer

Differential Revision: D60233417

fbshipit-source-id: f5506b8d2bf0e2246c8578c0c1c13ddd62507ee0
2024-07-26 08:53:10 -07:00
Alex Hunt 87ff232a6b Exclude platform specific files from public-api-test (#45727)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45727

All instances mirror types which are already defined in the platform-independent base module. See snapshot changes.

Changelog: [Internal]

Reviewed By: GijsWeterings

Differential Revision: D60286148

fbshipit-source-id: 30665252ff5e449a2c10ff3a3e76d9337daecb80
2024-07-26 07:16:59 -07:00
Nicola Corti 6ced6fe1b5 Move react_codegen_* + react_nativemodules_* libraries to static linking (#45639)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45639

There is a circular dependency between libreactnative.so and libreact_codegen_rncore.so which I'm breaking here.

Changelog:
[Internal] [Changed] - Move react_codegen_* + react_nativemodules_* libraries to static linking

Reviewed By: cipolleschi

Differential Revision: D55799200

fbshipit-source-id: 53f814636f016a8c93f40b0456686228dfb46888
2024-07-26 07:00:32 -07:00
Nicola Corti a9932f27a2 Move react_featureflags and react_render_consistency inside libreactnative.so (#45640)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45640

Other two libraries that don't need to be dynamic libraries but can just be exposed via libreactnative.so

Changelog:
[Internal] [Changed] -  Move react_featureflags and react_render_consistency inside libreactnative.so

Reviewed By: cipolleschi

Differential Revision: D55796945

fbshipit-source-id: be40b1523a560b2783fc7b6312326e20dc8cf595
2024-07-26 07:00:32 -07:00
Nicola Corti 52de8c70f2 Move several libs from default App CMake setup to static linking (#43909)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43909

As we're moving towards a single `libreactnative.so` file, we need to remove several of our prefab targets. Here I'm cleaning up those that are not having an OnLoad.cpp file which needs to be loaded from SoLoader.

This is breaking for libraries using native dependencies via Prefab (i.e. search for `ReactAndroid::` in CMakeLists.txt files for your project).

If so, the CMakeLists.txt files should be updated as follows:

```diff
- ReactAndroid::react_render_debug
+ ReactAndroid::reactnative
```

This applies to every prefab dependencies (the example is just for `react_render_debug`

Changelog:
[General] [Breaking] - Remove several libs from default App CMake setup

Reviewed By: cipolleschi

Differential Revision: D55751683

fbshipit-source-id: 3aca7897852b5f323d60ede3c5036cae2f81e6c3
2024-07-26 07:00:32 -07:00
Nicola Corti 68453a1f90 Create the libreactnative.so dependency (#43908)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/43908

This creates a new dynamic library that we want to be the only .so that is loaded from apps/libraries.

Changelog:
[Internal] [Changed] - Create the libreactnative.so dependency

Reviewed By: cipolleschi

Differential Revision: D55751682

fbshipit-source-id: 50f4167dc2f9953a8673b28dba3357e19fe88d6b
2024-07-26 07:00:32 -07:00
Jakub Urban 9bddcdef85 chore: migrate assertions in all unit tests in PrepareBoostTaskTest from jUnit to AssertJ. (#45718)
Summary:
https://github.com/facebook/react-native/issues/45596

Migrated all the assertions to use `assertThat()` function from AssertJ.
Also updated the `prepareBoostTask_withMissingConfiguration_fails` test to use `assertThatThrownBy` to check if the tested task throws a given exception.

## Changelog:
Migrate tests to assertj in these files:

- `packages/gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/internal/PrepareBoostTaskTest.kt`

[INTERNAL] [CHANGED] - Migrated PrepareBoostTaskTest from junit.Assert to assertj.core.api.Assertions.

For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests

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

Test Plan:
All tests pass when `./gradlew -p packages/gradle-plugin test` command is ran.

<img width="454" alt="image" src="https://github.com/user-attachments/assets/9e954f7b-2208-48a9-ae15-ab642252e6da">

Reviewed By: GijsWeterings

Differential Revision: D60284566

Pulled By: cortinico

fbshipit-source-id: 11af0a0ca574f935e6aab3a7855b5daaeab1a718
2024-07-26 05:45:26 -07:00
Henrique Cicero f4435115cc chore: Migrate FileUtilsTest.kt, NdkConfiguratorUtilsTest.kt and AgpConfiguratorUtilsTest.kt to AssertJ (#45665)
Summary:
Issue: [https://github.com/facebook/react-native/issues/45596](https://github.com/facebook/react-native/issues/45596)

## 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] - Migrated to AssertJ within files FileUtilsTest.kt, NdkConfiguratorUtilsTest.kt and AgpConfiguratorUtilsTest.kt

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

Test Plan: Run `./gradlew -p packages/gradle-plugin test`

Reviewed By: GijsWeterings

Differential Revision: D60276163

Pulled By: cortinico

fbshipit-source-id: c730acafc37606f1db8d53a61fc9443d88bccdfc
2024-07-26 05:21:33 -07:00
Nicola Corti f9ebc1d9ed Convert com.facebook.annotationprocessor.common.ProcessorBase to Kotlin (#45595)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45595

Changelog: [Internal][Changed] com.facebook.annotationprocessor.common.ProcessorBase -> Kotlin

Reviewed By: tdn120

Differential Revision: D60110313

fbshipit-source-id: 42e51927bc3bd56699c79f2f51293ba68ad7df22
2024-07-26 04:51:58 -07:00
Ruslan Lesiutin b5a5e9d51c fix[HostTargetSessionObserverTest.cpp]: call unsubscribe to cleanup resource (#45701)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45701

# Changelog: [Internal]

One weird thing is that this test actually never runs for Android, so its only compiled. I am not sure why exactly this one produces an error during execution, given that the next test is almost identical.

Nothing valuable from logcat, just a `SIGSEGV`. Since its something with memory, I've tried calling `unsubscribe`, same as in the next test to free memory before the test tear down (which should not run, because this test doesn't run).

Reviewed By: dmytrorykun

Differential Revision: D60282464

fbshipit-source-id: 2c7760f02c1128083f28651fe8ecd0f3cee27715
2024-07-26 03:36:29 -07:00
Ruslan Lesiutin 9c61d9a58a Use NativeDebuggerSessionObserver in LogBox (#45578)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45578

# Changelog: [Internal]

Use previously introduced native module for managing the presence of warning notifications in LogBox:
- Don't display warnings and Fusebox migration message if there is an active debugging session
- If the session has just been started, clear warnings to hide Fusebox migration message
- If there is no active debugging session (even if there were some at some point of Host lifetime), display Fusebox migration message

See demo in test plan.

Reviewed By: huntie

Differential Revision: D59975265

fbshipit-source-id: 87d91b4d7f3c825dc795ec1b5b3073f969bc7b60
2024-07-25 11:32:08 -07:00
Ruslan Lesiutin 6fde836103 Introduce NativeDebuggerSessionObserver module (#45577)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45577

# Changelog: [Internal]

This diff adds new native module, which can be used from JavaScript.

The API includes:
1. `hasActiveSession`: returns a boolean flag, which can be used for determining if 1 or more debugging sessions are active for current HostTarget.
2. `subscribe`: receives a callback, which will be executed once the debugging state changes. To be more precise, this will only be called when state is changing from no active sessions to 1 session or the other way around. Callback should expect to receive one boolean argument, which can be used for determining  if there is an active session.

Reviewed By: huntie

Differential Revision: D59975264

fbshipit-source-id: dd095954529f573f38e9fae1792465a59e639d23
2024-07-25 11:32:08 -07:00
Dmitry Rykun 8af5e893c8 Do not send state updates for loop animations (#45670)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45670

**Motivation**

There is a special [code path](https://github.com/facebook/react-native/blob/bb23026daf1a853f4482be46d6f242712a6b7330/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/FrameBasedAnimationDriver.java#L98) for native driven looping animations that restarts the animation in native, never calling the "animation end" callback. This was designed for and works fine with the `Animated.loop(Animated.timing(...))` animations. Unfortunately, it doesn't work well with more complex animations.
Consider an `Animated.loop(Animated.sequence(Animated.timing(...)))` animation. It doesn't trigger this code path. Instead, its nested `Animated.timing` animations are continuously rescheduled from JS by the looping `Animated.sequence` as singular native driven animations. Each time they end, they fire their "animation end" callback.

This introduces a subtle breakage when those "animation end" callbacks trigger React to update its state. This in turn restarts the rendering. In case with long transitions such looping animations can restart the rendering multiple times. In worst cases it may render the app unresponsive.

**Solution**
We don't need to tell React to update its state when running looping animations. This diff introduces a mechanism, using which `Animated.loop` can tell its nested animations that they are in a loop, and and there's no need to send state updates when they finish. This is consistent with how `Animated.loop(Animated.timing(...))` behaves.

Changelog: [General][Breaking] - Looping animations will not send React state updates.

Facebook

This diff enables this new behaviour for IGVR and FBVR, it also set up the experiment for FBiOS and FB4a.

Reviewed By: javache

Differential Revision: D59970265

fbshipit-source-id: 4832ae05b82f6cc59f92f72305b68610fa422f0a
2024-07-25 10:31:10 -07:00
Pieter De Baets 71be9be939 Fix animation glitch with looping animations (#45638)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45638

When looping a frame-based animation, we want to make sure to use the latest frame from the easing curve, which may not necessarily match `mToValue`.

Changelog: [Internal]

Differential Revision: D60143746

fbshipit-source-id: 68fa5421a958acc8291f396bc9f263fa110fdc54
2024-07-25 10:24:32 -07:00
Håkon Knutzen 8204134024 Use std::atomic for eliminating races in RCTCxxBridge (#45558)
Summary:
As explained in https://github.com/facebook/react-native/issues/45280, `TSan` picks up data races related to concurrent read/write to fields in `RCTCxxBridge`. See this report for reference:
```
WARNING: ThreadSanitizer: data race (pid=19983)
  Write of size 1 at 0x00010af1dfd8 by thread T13:
    #0 -[RCTCxxBridge _flushPendingCalls] <null> (RNTesterUnitTests:arm64+0x42b484)
    https://github.com/facebook/react-native/issues/1 __53-[RCTCxxBridge executeSourceCode:withSourceURL:sync:]_block_invoke <null> (RNTesterUnitTests:arm64+0x426050)
    https://github.com/facebook/react-native/issues/2 decltype(std::declval<void () block_pointer __strong&>()()) std::__1::__invoke[abi:ue170006]<void () block_pointer __strong&>(&&, decltype(std::declval<void () block_pointer __strong&>()())&&...) <null> (RNTesterUnitTests:arm64+0x456298)
    https://github.com/facebook/react-native/issues/3 std::__1::__function::__func<void () block_pointer __strong, std::__1::allocator<std::__1::allocator>, void ()>::operator()() <null> (RNTesterUnitTests:arm64+0x455c6c)
    https://github.com/facebook/react-native/issues/4 std::__1::__function::__value_func<void ()>::operator()[abi:ue170006]() const <null> (RNTesterUnitTests:arm64+0x3ce2e4)
    https://github.com/facebook/react-native/issues/5 std::__1::function<void ()>::operator()() const <null> (RNTesterUnitTests:arm64+0x3cdfd0)
    https://github.com/facebook/react-native/issues/6 facebook::react::tryAndReturnError(std::__1::function<void ()> const&) <null> (RNTesterUnitTests:arm64+0x4af18c)
    https://github.com/facebook/react-native/issues/7 facebook::react::RCTMessageThread::tryFunc(std::__1::function<void ()> const&) <null> (RNTesterUnitTests:arm64+0x51595c)
    https://github.com/facebook/react-native/issues/8 facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1::operator()() const <null> (RNTesterUnitTests:arm64+0x529df0)
    https://github.com/facebook/react-native/issues/9 decltype(std::declval<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1&>()()) std::__1::__invoke[abi:ue170006]<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1&>(facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1&) <null> (RNTesterUnitTests:arm64+0x529b54)
    https://github.com/facebook/react-native/issues/10 void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:ue170006]<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1&>(facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1&) <null> (RNTesterUnitTests:arm64+0x529978)
    https://github.com/facebook/react-native/issues/11 std::__1::__function::__alloc_func<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1, std::__1::allocator<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1>, void ()>::operator()[abi:ue170006]() <null> (RNTesterUnitTests:arm64+0x5298dc)
    https://github.com/facebook/react-native/issues/12 std::__1::__function::__func<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1, std::__1::allocator<facebook::react::RCTMessageThread::runOnQueue(std::__1::function<void ()>&&)::$_1>, void ()>::operator()() <null> (RNTesterUnitTests:arm64+0x524518)
    https://github.com/facebook/react-native/issues/13 std::__1::__function::__value_func<void ()>::operator()[abi:ue170006]() const <null> (RNTesterUnitTests:arm64+0x3ce2e4)
    https://github.com/facebook/react-native/issues/14 std::__1::function<void ()>::operator()() const <null> (RNTesterUnitTests:arm64+0x3cdfd0)
    https://github.com/facebook/react-native/issues/15 invocation function for block in facebook::react::RCTMessageThread::runAsync(std::__1::function<void ()>) <null> (RNTesterUnitTests:arm64+0x515384)
    https://github.com/facebook/react-native/issues/16 __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ <null> (CoreFoundation:arm64+0x8dc0c)
    https://github.com/facebook/react-native/issues/17 __NSThread__start__ <null> (Foundation:arm64+0x645c60)

  Previous read of size 1 at 0x00010af1dfd8 by main thread:
    #0 -[RCTCxxBridge isLoading] <null> (RNTesterUnitTests:arm64+0x43236c)
    https://github.com/facebook/react-native/issues/1 -[RCTBridge isLoading] <null> (RNTesterUnitTests:arm64+0x3c0170)
    https://github.com/facebook/react-native/issues/2 -[RCTComponentPropsTests setUp] <null> (RNTesterUnitTests:arm64+0xe6f34)
    https://github.com/facebook/react-native/issues/3 __70-[XCTestCase _shouldContinueAfterPerformingSetUpSequenceWithSelector:]_block_invoke.134 <null> (XCTestCore:arm64+0x540d8)

  Location is heap block of size 384 at 0x00010af1de80 allocated by main thread:
    #0 calloc <null> (libclang_rt.tsan_iossim_dynamic.dylib:arm64+0x4fc30)
    https://github.com/facebook/react-native/issues/1 _malloc_type_calloc_outlined <null> (libsystem_malloc.dylib:arm64+0xf488)
    https://github.com/facebook/react-native/issues/2 -[RCTBridge initWithDelegate:bundleURL:moduleProvider:launchOptions:] <null> (RNTesterUnitTests:arm64+0x3bc540)
    https://github.com/facebook/react-native/issues/3 -[RCTBridge initWithBundleURL:moduleProvider:launchOptions:] <null> (RNTesterUnitTests:arm64+0x3bc124)
    https://github.com/facebook/react-native/issues/4 -[RCTComponentPropsTests setUp] <null> (RNTesterUnitTests:arm64+0xe6b3c)
    https://github.com/facebook/react-native/issues/5 __70-[XCTestCase _shouldContinueAfterPerformingSetUpSequenceWithSelector:]_block_invoke.134 <null> (XCTestCore:arm64+0x540d8)

  Thread T13 (tid=11290378, running) created by main thread at:
    #0 pthread_create <null> (libclang_rt.tsan_iossim_dynamic.dylib:arm64+0x2bee4)
    https://github.com/facebook/react-native/issues/1 -[NSThread startAndReturnError:] <null> (Foundation:arm64+0x6458f0)
    https://github.com/facebook/react-native/issues/2 -[RCTBridge setUp] <null> (RNTesterUnitTests:arm64+0x3bf748)
    https://github.com/facebook/react-native/issues/3 -[RCTBridge initWithDelegate:bundleURL:moduleProvider:launchOptions:] <null> (RNTesterUnitTests:arm64+0x3bc540)
    https://github.com/facebook/react-native/issues/4 -[RCTBridge initWithBundleURL:moduleProvider:launchOptions:] <null> (RNTesterUnitTests:arm64+0x3bc124)
    https://github.com/facebook/react-native/issues/5 -[RCTComponentPropsTests setUp] <null> (RNTesterUnitTests:arm64+0xe6b3c)
    https://github.com/facebook/react-native/issues/6 __70-[XCTestCase _shouldContinueAfterPerformingSetUpSequenceWithSelector:]_block_invoke.134 <null> (XCTestCore:arm64+0x540d8)
```

In order to fix the data races, `std::atomic` instead of primitive boolean types.

In order to reproduce my findings and verify fix:

* Clone this branch
* Run setup code as described in README
* Execute `git revert -n 11c09fdc7c442dd694909bebbbc8f21c3e69edf2`.
* Enable TSan for both RNTester and its test scheme.
* Enable Runtime issue breakpoint for TSan
* Run unit tests
* Observe the TSan breakpoint is hit (possibly other places in the codebase as well) when accessing `_loading`, `_moduleRegistryCreated`, and `_valid`.. Continue execution if other breakpoints are hit before this breakpoint.
* Execute git revert --abort
* Run the tests again and observe the TSan breakpoint does not hit said code again.

NB! While this will fix data races, it will not fix potential race conditions. I have not encountered bugs related to race conditions in `RCTCxxBridge`, but given the nature of how it is made use of concurrently, it is, in my opinion, plausible.

## Changelog:

[iOS][Fixed] Use std::atomic for eliminating races in RCTCxxBridge.

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

Test Plan: I believe there are existing Unit tests in place for verifying this fix.

Reviewed By: cipolleschi

Differential Revision: D60233758

Pulled By: dmytrorykun

fbshipit-source-id: 8aa124a0521ad43a5e17b42e0ce6d22ae6b4e667
2024-07-25 10:22:56 -07:00
Andrew Datsenko ffa68094ee Remove xplat/js/react-native-github/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewHierarchyDumper.java (#45671)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45671

Changelog: [Internal]

Reviewed By: cortinico

Differential Revision: D60233475

fbshipit-source-id: 3c8e73296f9f46f98d18938d91ea7692d261a462
2024-07-25 10:20:02 -07:00
Thomas Nardone 193117c988 Nullsafe react/common/build (#45652)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45652

Results of arc nn on the module

Changelog: [Internal]

Reviewed By: arushikesarwani94

Differential Revision: D60188665

fbshipit-source-id: d5322ed15e55a367dc1854177cd533fed90226ee
2024-07-25 08:49:04 -07:00
Ruslan Lesiutin ea4005bef4 Update debugger-frontend from a56e5b7...7b143e5 (#45667)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45667

Changelog: [Internal] - Update `react-native/debugger-frontend` from a56e5b7...7b143e5

Resyncs `react-native/debugger-frontend` from GitHub - see `rn-chrome-devtools-frontend` [changelog](https://github.com/facebookexperimental/rn-chrome-devtools-frontend/compare/a56e5b7065c82b37ada788333c702bf5684c5839...7b143e5d05a102c8c9cc7e282bab7b0751f75d61).

Fixes reload via RDT panel for React-heavy apps.

Reviewed By: EdmondChuiHW, hezi

Differential Revision: D60233300

fbshipit-source-id: e188135e44b016b5b0df95e4ae96482eedc85eb4
2024-07-25 07:00:17 -07:00
Riccardo Cipolleschi 949c2bbe28 Revert Refator of RuntimeScheduler to unblock CI
Summary:
A previous commit (https://github.com/facebook/react-native/pull/45616) broke the ci in OSS.

It looks like that JSI is not working well in objective-c++ files when frameworks is enabled.

We need to look into it further but we need to have green CI

## Changelog:
[Internal] - Unblock CI

Reviewed By: blakef

Differential Revision: D60232011

fbshipit-source-id: b02ae163258786ce43cc11bc94420682661a6dd0
2024-07-25 05:21:26 -07:00
yakupozbaydar a9f5b3cacc chore: ☂️ Migrate UIManagerModuleConstantsHelperTest.kt to AssertJ (#45648)
Summary:
Issue: https://github.com/facebook/react-native/issues/45596

## Changelog:

[INTERNAL] [CHANGED] - Migrate UIManagerModuleConstantsHelperTest.kt to AssertJ testing library

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

Test Plan: Run ./gradlew -p packages/gradle-plugin test

Reviewed By: christophpurrer

Differential Revision: D60178766

Pulled By: cortinico

fbshipit-source-id: 480e2d9d4bab2ca4e46b05cda0b107ab9e024136
2024-07-25 02:25:49 -07:00
Jan Jaworski 6b9e96d63b chore: migrate tests to assertj (DialogModuleTest, ReactModuleInfoTest, FabricUIManagerTest.kt) (#45644)
Summary:
https://github.com/facebook/react-native/issues/45596

https://github.com/facebook/react-native/issues/45596#issuecomment-2247801893

## Changelog:

Migrate tests to assertj in these files:
- `packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/dialog/DialogModuleTest.kt`
- `packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/model/ReactModuleInfoTest.kt`
- `packages/react-native/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerTest.kt`

Pick one each for the category and type tags:

[INTERNAL] [CHANGED] - Migrated `DialogModuleTest.kt`,`ReactModuleInfoTest.kt`, and `FabricUIManagerTest.kt`

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

Test Plan:
Run tests and verify if they pass

<img width="317" alt="image" src="https://github.com/user-attachments/assets/21a4feba-4221-4cdb-967e-e8d864ad6e93">

<img width="292" alt="image" src="https://github.com/user-attachments/assets/2947a473-6221-4b7e-84d0-9fbf0ba6adc0">

<img width="289" alt="image" src="https://github.com/user-attachments/assets/3f14cb7f-9a21-4f94-a677-a1b84ddea4b9">

Reviewed By: javache

Differential Revision: D60172126

Pulled By: cortinico

fbshipit-source-id: ffe37bae3555fc916a71e02208fc56707be6417d
2024-07-25 01:42:44 -07:00
Miguel Daipré 053865bd80 feat: migrate BuildCodegenCLITaskTest and PrepareGlogTaskTest to AssertJ (#45649)
Summary:
Issue: https://github.com/facebook/react-native/issues/45596

## Changelog:

[ANDROID] [CHANGED] - Migrated `BuildCodegenCLITaskTest`, `PrepareGlogTaskTest` from junit.Assert to assertj.core.api.Assertions.

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

Test Plan: Run `./gradlew -p packages/gradle-plugin test`

Reviewed By: christophpurrer

Differential Revision: D60178114

Pulled By: cortinico

fbshipit-source-id: f0cfe9da945829a2bada8e9807eb1877240d93d6
2024-07-25 01:33:28 -07:00
Ömer Esmer e553acaf1e chore: ☂️ Migrate InteropUiBlockListenerTest.kt to AssertJ #45610 (#45635)
Summary:
Issue: https://github.com/facebook/react-native/issues/45596

## Changelog:

[INTERNAL] [CHANGED] - Migrated to AssertJ within file `InteropUiBlockListenerTest.kt`

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

Test Plan: Run `./gradlew -p packages/gradle-plugin test`

Reviewed By: realsoelynn

Differential Revision: D60183376

Pulled By: arushikesarwani94

fbshipit-source-id: 534566642e246e88367cdc72fb2284c6d1a08005
2024-07-24 18:27:51 -07:00
David Vacca 64f630df8e Delete Scheduler.reduceDeleteCreateMutationLayoutAnimation (#45628)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45628

Scheduler.reduceDeleteCreateMutationLayoutAnimation is unused, I'm deleting in this diff

changelog: [internal] internal

Reviewed By: sammy-SC

Differential Revision: D60142585

fbshipit-source-id: 5573ca230c4007c348e64ca967604d791f69fde4
2024-07-24 16:53:53 -07:00
Kevin Gozali a634b57650 Allow passing through optional custom transform options to Metro (#45634)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45634

This allows the Android runtime to pass additional options to Metro. Each app can
decide what to send based on the needs. The use case is to send
transform.xyz=somevalue to Metro.

Changelog: [Internal]

Reviewed By: javache

Differential Revision: D60155757

fbshipit-source-id: 006d5ff2e3f14634fb39d44b390f30da479b1faa
2024-07-24 14:48:54 -07:00
Kevin Gozali 8effe781d3 Allow passing through optional custom transform options to Metro (#45621)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45621

This allows the iOS runtime to pass additional options to Metro. Each app can
decide what to send based on the needs. The use case is to send
`transform.xyz=somevalue` to Metro.

Changelog: [Internal]

Reviewed By: cipolleschi

Differential Revision: D60143663

fbshipit-source-id: 3e35a01a0ee121096d3a5cf0547e8e0ebf77f8ce
2024-07-24 14:48:54 -07:00
Alex Hunt 5cf72ca046 Fix translatability of modules using event-target-shim (#45646)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45646

As titled. This is adapted from https://github.com/facebook/react-native/pull/45056.

Changelog: [Internal]

Reviewed By: GijsWeterings

Differential Revision: D60173075

fbshipit-source-id: 9ce1c96d333b7e6b84d9b7650bc4179ebf86d267
2024-07-24 14:46:39 -07:00
Miguel Daipré 7aff1b9bd8 feat: migrate DefaultNewArchitectureEntryPointTest, InteropEventEmitterTest and InteropModuleRegistryTest to AssertJ (#45623)
Summary:
Issue: https://github.com/facebook/react-native/issues/45596

## Changelog:

[ANDROID] [CHANGED] - Migrated `DefaultNewArchitectureEntryPointTest`, `InteropEventEmitterTest`, `InteropModuleRegistryTest` from junit.Assert to assertj.core.api.Assertions.

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

Test Plan: Run `./gradlew test`

Reviewed By: cortinico

Differential Revision: D60151876

Pulled By: arushikesarwani94

fbshipit-source-id: c8b82fbfc7aae54e2524e7d8e876ee9ffbc10b9b
2024-07-24 14:38:49 -07:00
Joe Vilches ee17ca881a Let inset shadows have rounded corners (#45624)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45624

Must have forgot to add this functionality in, since it was just using a Rect for the clear region. This uses the proper rounded path.

Changelog: [Internal]

Reviewed By: NickGerleman

Differential Revision: D60147035

fbshipit-source-id: 3eebb2c4a56e4dfc957213e54f3d2de2c966082b
2024-07-24 14:00:05 -07:00
Joe Vilches 6fc3d359b5 Use needsInvalidateLayer, not _needsInvalidateLayer for filter and box shadow (#45622)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45622

The rest of these props setters opts to use `needsInvalidateLayer`, not `_needsInvalidateLayer` the latter of which is a instance variable. This change no effect since we set `_needsInvalidateLayer` to the or of both below, but we should be consistent with the rest of the logic here.

Changelog: [Internal]

Reviewed By: NickGerleman

Differential Revision: D60144215

fbshipit-source-id: b4b863d964a688c1cb9f6fada626d390681d1542
2024-07-24 14:00:05 -07:00
Joe Vilches e42533294b Don't invalidate layer for mix blend mode (#45620)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45620

This does not really depend on anything in the layer. It is just a prop on the layer itself, so we can just set it in place. This pattern already happens for things like transform: https://fburl.com/code/0bhsdlcy

Changelog: [Internal]

Reviewed By: NickGerleman

Differential Revision: D60142154

fbshipit-source-id: 52ee0e1e6eacf3bba005a727a5a4325a5cc6d338
2024-07-24 14:00:05 -07:00
Joe Vilches 7ba801b7f0 Fix issue where shadows were not being cleaned up (#45613)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/45613

We had a bug where box shadows were not getting cleaned up. The fix here is easy - just call `[_boxShadowLayer removeFromSuperView]`. Previously we were just setting this layer to nil, which does not do the job.

Changelog: [Internal]

Reviewed By: NickGerleman

Differential Revision: D60137528

fbshipit-source-id: 310df944f63ffc73ee5fe938cfb5a48674f997ab
2024-07-24 14:00:05 -07:00
Jack Su f9ac5b737a Fixed race condition issue which caused Bloks page not loading issue
Summary:
## Context

During TW Bloks testing, I frequently encounter the issue of a page not loading. After investigating further, I discovered that for one XOCReactNativeHost, there are multiple instances of ReactInstanceManager created. One of them is properly initialized with XOCLoginActivity, while the other one is not initialized and its activity is null.

When calling ReactContext onHostResume, there is a small chance that the ReactInstanceManager with a null activity will be used, resulting in a "no activity" issue.

After analyzing the construction call stack of ReactInstanceManager, it appears that there is a race condition in the function of ReactNativeHost.getReactInstanceManager https://fburl.com/code/kh6o84m9.
I noticed that two threads are calling this function simultaneously, which can lead to the creation of two instances despite the `mReactInstanceManager == null check`, as it is not within a synchronized statement.

An example of one ReactNativeHost with multiple ReactInstanceManagers can be found at https://fburl.com/code/kh6o84m9.

{F1768111631}

The following are the call stack to create the ReactInstanceManagers, the line number may have slightly shift from the prod code because of debugging info.

P1490866855
P1490869412

## About this diff
Added synchronized lock to the checking of `mReactInstanceManager == null` and make  mReactInstanceManager as volatile to avoid creating duplicated instance.

## Changelog:
[Android] [Fixed] - Made several methods in ReactNativeHost.java thread-safe to avoid race conditions

bypass-github-export-checks

Reviewed By: javache

Differential Revision: D60088120

fbshipit-source-id: a4c1970bb54c7395dbfc3282d02bd66d9dc95df9
2024-07-24 13:47:40 -07:00
Oskar Kaczmarzyk 4cc46e3ca6 chore: tests migration to assertj (KotlinStdlibCompatUtilsTest, ModelAutolinkingDependenciesJsonTest, PathUtilsTest, DependencyUtilsTest, ProjectUtilsTest) (#45606)
Summary:
https://github.com/facebook/react-native/issues/45596

## Changelog:

Migrated to AssertJ within files:
- `KotlinStdlibCompatUtilsTest.kt`,
- `ModelAutolinkingDependenciesJsonTest.kt`,
- `PathUtilsTest.kt`,
- `DependencyUtilsTest.kt`,
- `ProjectUtilsTest.kt`.

[INTERNAL] [CHANGED] - Migrated `KotlinStdlibCompatUtilsTest`, `ModelAutolinkingDependenciesJsonTest`, `PathUtilsTest`, `DependencyUtilsTest`, `ProjectUtilsTest` from `junit.Assert` to `assertj.core.api.Assertions`.

## Test Plan

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

Reviewed By: javache

Differential Revision: D60166231

Pulled By: cortinico

fbshipit-source-id: 5092e7d0d4c8d0a8737183962bda62ed1f54ccda
2024-07-24 09:44:45 -07:00