Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52988
This class should be marked as `LegacyArchitecture` while it was not.
Changelog:
[Internal] [Changed] -
Reviewed By: mdvacca
Differential Revision: D79451041
fbshipit-source-id: 62c5d35821e354ea851eaccac909bf6bd9157f09
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53013
Quick fix to restore CI on `main`. `actions/setup-node` is now pulling Node.js `24.5.0`, which introduces a bug affecting `packages/dev-middleware/src/__tests__/` Jest tests.
Changelog: [Internal]
Reviewed By: cipolleschi
Differential Revision: D79551277
fbshipit-source-id: 51951ad8ffe376a478da268b50aa54ac2d9bba03
Summary:
This label was renamed at some point and it broke the issue template. This fixes it.
## Changelog:
[INTERNAL] -
Pull Request resolved: https://github.com/facebook/react-native/pull/52981
Test Plan: N/A
Reviewed By: mdvacca
Differential Revision: D79448155
Pulled By: cortinico
fbshipit-source-id: 2312fc5a0a82a65ca908af58dc74348141c16ca2
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52995
Fabric retains views by ID when `JSTouchDispatcher` receives a touch event, but does not sweep these same views if a child native gesture is started between the `ACTION_DOWN` and `ACTION_UP` actions of the touch. As a result, we never end up calling into that view's manager's `onDropViewInstance` method and can't perform reliable teardown of the view since it's stuck in this "touched" state.
This is change adds a new condition to check if `JSTouchDispatcher` should sweep active touches when a child native gesture is started, and only applies the check to `ReactSurfaceView` to start. The check is also only enabled if the `sweepActiveTouchOnChildNativeGesturesAndroid` flag is set.
Changelog: [Internal]
Reviewed By: jehartzog
Differential Revision: D79230277
fbshipit-source-id: c15b888ec932319f1bda05b8ef5eec39e5d08710
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52972
Fabric retains views by ID when `JSTouchDispatcher` receives a touch event, but does not sweep these same views if a child native gesture is started between the `ACTION_DOWN` and `ACTION_UP` actions of the touch. As a result, we never end up calling into that view's manager's `onDropViewInstance` method and can't perform reliable teardown of the view since it's stuck in this "touched" state.
This is the first of a few changes to add a new feature flag `sweepActiveTouchOnChildNativeGesturesAndroid` to allow the `JSTouchDispatcher` to sweep active touches when a child native gesture is started. Running experiments internally to confirm that there are no unintended side effects from flushing the active touch.
Changelog: [Internal]
Reviewed By: jehartzog
Differential Revision: D79257465
fbshipit-source-id: 1ca79e77b21d8086c4df6753b16b1d8d922cd8d5
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52992
changelog: [internal]
do not log on every frame to make logs more readable. The callbacks are only set during construction and there is no value in logging on every commit props.
Reviewed By: rshest
Differential Revision: D79436988
fbshipit-source-id: 26c6cbadd5ae0efa8575c7f85e4c0d90e2ef6215
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52982
Changelog: [internal]
Just adding a few tests for `View` refs, to show as an example of what a test for a public component should have.
Reviewed By: rshest
Differential Revision: D79447449
fbshipit-source-id: 75b9dbb45824d927bcf63472da25c7c5a52c7eb6
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52983
Changelog: [internal]
Just moving some tests that were defined under `<View>` that were related to styles, to under `<View> > props > style`.
Reviewed By: rshest
Differential Revision: D79447450
fbshipit-source-id: e97cc4e058ffc8170b7fa74176cc8dc27e26cfde
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52974
Changelog: [internal]
The test for LongTasks is flaky on Github and I made a change to figure out why (D79366370 / https://github.com/facebook/react-native/pull/52948). It seems that the long task happens before the artificial task we're using for testing, so we can update the test to filter those out.
Reviewed By: cortinico
Differential Revision: D79441987
fbshipit-source-id: 99296d704cfec2e61ca29d06878df171231f4e78
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52944
changelog: [internal]
this should be in ReactCommon, not in cxx platform as it is not platform specific.
Reviewed By: rubennorte, christophpurrer
Differential Revision: D79184118
fbshipit-source-id: 141f0ce7b993d229c5d832d22c54471d32681173
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52949
## Changelog:
[Internal] [Changed] - cleanup TODOs in fantom tests around cxxNativeAnimatedRemoveJsSync
Previous attempt to remove js sync so far is working expectedly since https://github.com/facebook/react-native/pull/52904 / D79080739
Reviewed By: sammy-SC
Differential Revision: D79373130
fbshipit-source-id: e310b9250ba5da2e55435468f46b75977e46f111
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52935
Changelog: [internal]
This implements a new option for `PerformanceTracer::startTracing` to specify a maximum duration for the recording, keeping only the last record events.
This will allow us to implement an "always-on" profiling mode for RN with a low overhead. In the future, we can extend this with a `maxBufferSize` option.
See the comment in `PerformanceTracer.cpp` for implementation details.
Reviewed By: hoxyq
Differential Revision: D79340014
fbshipit-source-id: 3260724a775a574fe5e52d47358a3a5abd0d2ee7
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52938
Changelog: [internal]
Minor refactor to simplify changing the logic for how events are buffered.
Reviewed By: hoxyq
Differential Revision: D79340013
fbshipit-source-id: efd295b1583929580fbe7441ec7eb06e828ca514
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52937
Changelog: [internal]
Minor refactor to log the synthetic events for trace start when the trace finishes. This is to simplify future work to implement a sliding window for trace events.
Reviewed By: hoxyq
Differential Revision: D79271692
fbshipit-source-id: 9e923ac36fff850a3aeede7304fb2d721bb9f16c
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52934
Changelog: [internal]
Right now, the `PerformanceTracer` API has a method to stop the trace and a separate one to collect serialized events. This refactors the API to return the collected events when calling `stopTracing` instead.
The caller (in this case `TracingAgent`) is responsible for serializing and sending the events in chunks through CDP.
Reviewed By: hoxyq
Differential Revision: D79271690
fbshipit-source-id: bdb48c80be4fd07d96e381e6bb4d099cae91f8de
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52936
Changelog: [internal]
This method is unused and we're no longer planning to use it.
Reviewed By: hoxyq
Differential Revision: D79271691
fbshipit-source-id: 1a0be464928a199cfe4a57cb5c44255b127264c2
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52948
Changelog: [internal]
Not sure why this test is flaky, but this tries to add some more assertions to see where the problem comes from.
Reviewed By: hoxyq
Differential Revision: D79366370
fbshipit-source-id: d66b30e502dbc80d3e972ed93a91bb7f703de9c4
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52942
# Changelog:
[Internal] -
Adds another test clause to the Text benchmark test, to test the case when the component doesn't have any props altogether, which can be useful to establish a baseline.
Reviewed By: rubennorte
Differential Revision: D79352849
fbshipit-source-id: fbfeb53d3ede59631548eb2fe76a4debd5927900
Summary:
This pull request resolves a critical accessibility bug on Android where custom `accessibilityActions` fail to execute when activated via TalkBack's swipe gestures.
**The Problem:**
- When a user focuses a component with custom `accessibilityActions` (like a `TouchableOpacity`), TalkBack correctly announces the action labels as the user swipes up or down.
- However, when the user double-taps to activate the selected action, TalkBack reports an "incompatible action," and the `onAccessibilityAction` event is never triggered.
**The Root Cause:**
The investigation revealed that the `ReactAccessibilityDelegate` was generating **new, unstable IDs** for custom actions on every UI update. This instability prevents the Android accessibility service from reliably tracking and invoking the selected action.
**The Solution:**
This change introduces a static, thread-safe cache (`ConcurrentHashMap`) within `ReactAccessibilityDelegate`. This ensures that each unique action name is mapped to a single, stable ID for the entire lifecycle of the application. This provides the consistency required by TalkBack to function correctly.
This addresses the issue described in https://github.com/facebook/react-native/issues/47268.
---
## Changelog:
[Android] [Fixed] - Stabilize custom accessibility action IDs to prevent "incompatible action" errors in TalkBack.
---
Pull Request resolved: https://github.com/facebook/react-native/pull/52724
Test Plan:
The fix was validated extensively using the RNTester app on a physical Android device and an Android emulator.
### Steps to Reproduce (Before Fix)
1. Enable TalkBack on an Android device.
2. Navigate to a `TouchableOpacity` component with several custom `accessibilityActions`.
3. Swipe up or down to cycle through the actions. TalkBack correctly announces them (e.g., "add to cart").
4. Double-tap to execute the selected action.
5. **Result (Bug):** TalkBack announces *"incompatible action"*, and the `onAccessibilityAction` event is not triggered.
### Validation Steps (After Fix)
1. Follow the same steps as above on the patched version.
2. **Result (Fixed):** After double-tapping, the `onAccessibilityAction` event is **correctly triggered** with the appropriate action name. The "incompatible action" issue is fully resolved.
*A screen recording demonstrating the successful fix can be provided if needed.*
Uploading fixed bugs view problems (1).mp4…
Fixes https://github.com/facebook/react-native/issues/47268
Reviewed By: jorge-cab
Differential Revision: D78737471
Pulled By: cipolleschi
fbshipit-source-id: 877b196597472ac6a4f6df81a05a43956fb34629
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52940
# Changelog: [Internal]
This is required for storing these Trace Events somewhere outside of PerformanceTracer, in case these events will be dispatched later.
Reviewed By: rubennorte
Differential Revision: D78741192
fbshipit-source-id: 3cc2eacd922855231fafb93c32d326b150b3c19b
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52916
# Changelog: [Internal]
Align with other serializers in `jsinspector-modern` to have just static public method.
Reviewed By: rubennorte
Differential Revision: D79131985
fbshipit-source-id: 3f1f08641bb96a9fbd067992b8ce294af9d27688
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52915
# Changelog: [Internal]
This removes the use of `PerformanceTracer` instance in a serialization logic.
Reviewed By: rubennorte
Differential Revision: D78919220
fbshipit-source-id: 5c663ea77eb36eb7664623c1595308a9450f7825
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52917
# Changelog: [Internal]
Just an aliases for referencing these ids, instead of raw uint64_t.
Reviewed By: rubennorte
Differential Revision: D78741191
fbshipit-source-id: 1ee403ff19ed95361366c76c1fb52e70ec67f16e
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52914
# Changelog: [Internal]
We can't rely on RuntimeExecutor to actually tell us what JavaScript thread number is. Although this would work correct in most of the cases, this is not the solution we should go with.
Instead, we should fetch a map <id, name> of threads from the Host. This is what we will lazily call at the start of the Trace. I will add later on top of the stack.
Reviewed By: rubennorte
Differential Revision: D78990872
fbshipit-source-id: e41ebd35273c6741ebbc3fe3b851018c9f3275dc
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52894
Adds the following boolean pragma modes for more granular control:
```
fantom_native_opt true|false
fantom_js_opt true|false
fantom_js_bytecode true|false
```
Previously these were all set together with `fantom_mode`. These modes are mutually exclusive with `fantom_mode`.
Changelog: [Internal]
Reviewed By: rubennorte
Differential Revision: D79151687
fbshipit-source-id: 59c3f20bccb570c0293ffd037609946a1a9bbb8f
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52821
Hardens RN to running in mismatched opt/dev modes.
While adding an opt native/dev js mode to fantom, LogBox was trying to load NativeDevSettings when it didn't exist because of mode mismatch.
This is the only location it's happening, so this just moves the NativeDevSettings load into the one function that needs it.
Changelog: [Internal]
Reviewed By: rubennorte
Differential Revision: D78952284
fbshipit-source-id: e68667cb28fae7cb6f985305e8885f271ef5d3af
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52923
Follow-up to D78904748, where CI was broken on `main` for the `run_fantom_tests` job. It turns out this Android build uniquely included the new `react_performance_cdpmetrics` dependency, and this had an incorrect dep.
Changelog: [Internal]
Reviewed By: hoxyq
Differential Revision: D79263124
fbshipit-source-id: 3e38e0cebe53520ea50e6d11a571e01c52e34874
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52840
**Context**
Experimental V2 Performance Monitor prototype, beginning by bringing the [Interaction to Next Paint (INP)](https://web.dev/articles/inp) metric to React Native.
**This diff**
Completes populating a full `InteractionEntry` Live Event payload by implementing remaining fields sufficient to be rendered by Chrome DevTools.
Changelog: [Internal]
Reviewed By: rubennorte
Differential Revision: D78904747
fbshipit-source-id: 7473602f6f1efe3ac71e07a2b88e6ad7020dcbbf
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52839
**Context**
Experimental V2 Performance Monitor prototype, beginning by bringing the [Interaction to Next Paint (INP)](https://web.dev/articles/inp) metric to React Native.
**This diff**
Adds and configures a `CdpMetricsReporter` class to report `InteractionEntry` live metrics over CDP via the `"__chromium_devtools_metrics_reporter"` runtime binding.
**Notes**
- Introduces a new `react/performance/cdpmetrics` package, and a listener API on `PerformanceEntryReporter` (both to avoid a `jni` dependency in `react/performance/timeline`).
Changelog: [Internal]
Reviewed By: rubennorte
Differential Revision: D78904748
fbshipit-source-id: c75971aba43d9929912b3d1dba7576c2a2342214
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52912
This diff throws an Exception if ReactApplication.reactNativeHost is not overriden. This field is deprecated and it will be deleted in the near future.
The goal of this diff is to be able to remove usages of reactNativeHost for classes that implement ReactApplication
changelog: [Android][Breaking] Throw Exception if ReactApplication.reactNativeHost is not overriden
Reviewed By: mlord93
Differential Revision: D79186336
fbshipit-source-id: 9f8f34739c0f04056ff3d795bda45bc0dbca7624
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52904
changelog: [internal]
There is a race condition in `FabricUIManagerBinding::schedulerDidFinishTransaction`. Until it is addressed properly, let's do synchronisation Fabric commits through JavaScript thread.
It can have pretty serious consequences: a crash in better case and undefined behaviour in worse case.
The race is between acquiring two mutexes:
1. One inside of `MountingCoordinator::pullTransaction`
2. Second one inside of `FabricMountingManager::executeMount`
The logic inside of `FabricUIManagerBinding::schedulerDidFinishTransaction` depends on the fact that whichever thread acquires mutex number 1, will acquire mutex number 2 without interruption. But that is not always the case as threads may be interrupted.
Reviewed By: zeyap
Differential Revision: D79080739
fbshipit-source-id: c86885aba25825030dc44b60144beb3e3ba18306
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/52903
changelog: [internal]
disable subview clipping traversal when view culling is enabled.
Subview clipping is already disabled by preventing prop from being set to true: https://fburl.com/code/bynvtwfs but we found a crash where the traversal leads to memory corruption with view culling enabled.
Reviewed By: lenaic
Differential Revision: D79168116
fbshipit-source-id: 9dcb624ca12bc2d94b265681795604ee0ac3fe00