Commit Graph
20977 Commits
Author SHA1 Message Date
Joshua Gross ad400f3cf6 Fix MountingCoordinator override mode
Summary:
In MountingCoordinator override mode (used in LayoutAnimations) we must set the start and end `diff` time when no real diff happens, otherwise we will hit an assert in telemetry later.

I also ensure that the TransactionNumber is incremented in that case.

Changelog: [Internal]

Reviewed By: shergin

Differential Revision: D23746684

fbshipit-source-id: b1fe3864e453fdba89d43cc827bd37434abf7a4d
2020-09-17 12:29:29 -07:00
Joshua Gross 012ac09fa1 Fix LayoutAnimations assertion on adjustDelayedMutationIndicesForMutation
Summary:
`adjustDelayedMutationIndicesForMutation` asserts that the mutation is either Remove or Insert. At one callsite, we weren't checking the mutation type before calling `adjustDelayedMutationIndicesForMutation`.

Changelog: [Internal]

Reviewed By: shergin

Differential Revision: D23746617

fbshipit-source-id: 6046fec2eb4821094937b1b16f40347bbc55c20e
2020-09-17 12:29:29 -07:00
Samuel Susla e7dbd845e6 Coalesce touchMove events
Summary:
Changelog: [Internal]

To align more closely with Paper, Fabric should coalesce touchMove events.

on iOS it happens:
https://www.internalfb.com/intern/diffusion/FBS/browsefile/master/xplat/js/react-native-github/React/Base/RCTTouchEvent.m?lines=43

Reviewed By: JoshuaGross

Differential Revision: D23734212

fbshipit-source-id: a9d324a6481884905d7be6637fcafe4e71f2bd9f
2020-09-17 11:23:46 -07:00
Valentin Shergin 5b93c49e76 Fabric: Using pre-cached UIColor objects for black, white, and clear colors
Summary:
This change maps the three most used colors (black, white, clear) to corresponding predefined values in UIColor. This should meaningfully reduce the overall amount of allocated UIColor/CGColor objects. In my non-scientific measures, it reduces the number of CGColor objects from ~1500 to ~1000. And... it no much at least in terms of kilobytes. However, I still think it's a good idea to implement this because I hope that can remove some work from memory allocation infra and maybe enable some optimizations that UIKit hopefully does for black and white colors. (I tend to believe that this optimization exists because UIKit even has a classes called UIDeviceWhiteColor and UICachedDeviceWhiteColor.)

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross

Differential Revision: D23753506

fbshipit-source-id: 46e58dc7e6b0dcab3c83d29c7257c90ffbd95246
2020-09-17 11:12:29 -07:00
Valentin Shergin e4877ed985 Fabric: Using optional<int> instead of CGColorRef on iOS
Summary:
Finally, this diff changes the internal implementation of SharedColor to be `optional<int>`.

Initially, when we started working on the new renderer, it seemed like a good idea to allocated CGColor objects ahead of time and store them with Props. Now, this idea does not look so good, especially because:
* Having `SharedColor` as a `shared_ptr` is a quite big perf overhead for copying this thing. And the size of the object is not small.
* Having `SharedColor` as a `shared_ptr` creates huge interconnectedness among pieces of the core and rendering. E.g. improper releasing a pointer in some component view can cause a crash somewhere in the core (because both places might use the same shared `blackColor`.

On Android, we already use simple `int` as a representation of a color, and this works great. And this diff implements something very similar to Android, but a bit differently: here we use `optional<int>` instead of custom class with a single `int` field and some magic value that represents "empty value".

This approach should fix T75836417 because now we don't have allocation and deallocation when we simply assign color values.

If this solution works fine on iOS, I will do unify all implementations among all platforms.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross

Differential Revision: D23753507

fbshipit-source-id: 42fd6cee6bf7b39c92c88536da06ba9e8cf4d4db
2020-09-17 11:12:28 -07:00
Valentin Shergin 241795cbc4 Fabric: Color conversion functions now do not depend on internal implementations of SharedColor
Summary:
This diff changes the implementation of `RCTCreateCGColorRefFromSharedColor` and `RCTUIColorFromSharedColor` in such a way that they don't rely on the fact that SharedColor is actually a `shared_ptr<CGColorRef>`. Instead, the methods just extract color components from SharedColor and create UIColor and CGColorRef objects on demand.
This allows us to change the implementation of SharedColor without worrying much about the rest of the system, which will do in the next diff.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross

Differential Revision: D23753510

fbshipit-source-id: 340127527888776ebd5d241ed60c7e5220564013
2020-09-17 11:12:28 -07:00
Valentin Shergin d3bb76b8b6 Fabric: Using RCTUIColorFromSharedColor everywhere
Summary:
Even though we have wonderful helper functions converting SharedColor to UIColor and CGColorRef, in many places we still use some hardcoded things. This diff fixes that; it will be important for the next diff.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross

Differential Revision: D23753508

fbshipit-source-id: 09d280b132266252753526c2735ab3e41b96c8d5
2020-09-17 11:12:28 -07:00
Valentin Shergin f2ca6f568e Fabric: Removing RCTCGColorRefUnretainedFromSharedColor()
Summary:
This diff removes `RCTCGColorRefUnretainedFromSharedColor` function because it's not compatible with future changes we plan to make.
Converting SharedColor to unretained CGColorRef is actually quite dangerous because... it's an unowned pointer.

Reviewed By: JoshuaGross

Differential Revision: D23753509

fbshipit-source-id: df030ade69b63cbb872d6bdbde51575eedc6a4a6
2020-09-17 11:12:28 -07:00
Jason Safaiyeh 18ffe12203 Add an explicit NDK version to Android template (#29403)
Summary:
Added an explicit NDK version to the Android template. This allows tooling to detect which NDK version to install automatically.

## Changelog

<!-- Help reviewers and the release process by writing your own changelog entry. For an example, see:
https://github.com/facebook/react-native/wiki/Changelog
-->

[Android] [Added] - Add an explicit NDK version to Android template

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

Test Plan: Template builds as it should. NDK version gets installed with initial Android set up.

Reviewed By: passy

Differential Revision: D23752007

Pulled By: fkgozali

fbshipit-source-id: 31c33f275f94a4a62338a61e79b31c4b996969bf
2020-09-17 09:27:42 -07:00
Valentin Shergin 04c874bd9c Fabric: Using thread_local keyword instead on own implementation in TransactionTelemetry
Summary:
Apparently, there is C++ keyword for this.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D23754284

fbshipit-source-id: 5f9bbcc72d9c586173624869d614f12d2319fb7b
2020-09-17 08:57:57 -07:00
Valentin Shergin 13bc3c87ef Fabric: Removing shared_ptr from ShadowTreeCommitTransaction's argument
Summary:
We don't need a shared_ptr here and without it the code will be faster and simpler.
This change is aligned with any clone-line callbacks we have in the Core which accepts a `const &` and return `shared_ptr<>`.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross, sammy-SC

Differential Revision: D23725687

fbshipit-source-id: 1cd959f4273913175d342302e2f12752f0114768
2020-09-16 23:56:00 -07:00
Valentin Shergin 0118cbf1d1 Fabric: Introducing ShadowTree::getCurrentRevision()
Summary:
Previously, to get a current root shadow node for a shadow tree, we called `tryCommit` method and stole a pointer from this. That was not a very straightforward method to get things done, and most importantly we need to do this to change the shape of the ShadowTreeCommitTransaction signature (remove a shared pointer from the callback) to make it simpler, faster and allow future improvements (see the next diff).

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross, sammy-SC

Differential Revision: D23725689

fbshipit-source-id: 51950b843a0e401828b6c6a38e5e2aaaf21ec166
2020-09-16 23:56:00 -07:00
Valentin Shergin bc5a15d2c8 Fabric: Using ShadowTreeRevision inside ShadowTree to store current commited tree
Summary:
Instead of storing tree separate instance variables, we now store a single object that contains them. We will need it to be able to postpone the mounting stage (we save all info we need for mounting inside the new instance variable).

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D23725690

fbshipit-source-id: 09dd4a0912c6f5b34d805636b62f73ca12287329
2020-09-16 23:56:00 -07:00
Valentin Shergin 047764482f Fabric: Simplifying ShadowTreeRevision implementation
Summary:
The implementation of this class is too complex for the purpose it serves. Making it simpler will make the code simpler and faster.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D23725688

fbshipit-source-id: 5e1ecddb0dd3c4c4f94786e2ba0af9b67e7426ce
2020-09-16 23:56:00 -07:00
Samuel Susla 4a6039c635 Fix initial padding value for TextInput
Summary:
Changelog: [internal]

# Problem

Default padding for TextEdit is top: 26, bottom: 29, left: 10, right: 10 however the default values for LayoutMetrics.contentInsets is {0, 0, 0, 0}.

If you try to construct TextEdit with padding 0, Fabric will drop padding update because padding is already 0, 0, 0, 0.

# Fix
To fix this, I added a special case to `Binding::createUpdatePaddingMountItem`, if the mutation is insert, proceed with updating padding.

Reviewed By: JoshuaGross

Differential Revision: D23731498

fbshipit-source-id: 294ab053e562c05aadf6e743fb6bf12285d50307
2020-09-16 11:49:56 -07:00
Valentin Shergin 2103839525 Fabric: Optimized hit-testing
Summary:
An experiment where we use `LayoutMetrics::overflowInset` to optimize performance of hit-testing algorithm.
In my measurements enabling this feature drastically (2x) reduced amount of calls to `hitTest:withEvent:` method.

Reviewed By: sammy-SC

Differential Revision: D23669091

fbshipit-source-id: ac6dadc90b6a2fbb45e41e0d4a113bd5ae8f1218
2020-09-15 22:29:30 -07:00
Emily Janzer b352e2da81 Create a ClickableSpan for nested Text components
Summary:
Right now nested Text components are not accessible on Android. This is because we only create a native ReactTextView for the parent component; the styling and touch handling for the child component are handled using spans. In order for TalkBack to announce the link, we need to linkify the text using a ClickableSpan.

This diff adds ReactClickableSpan, which TextLayoutManager uses to linkify a span of text when its corresponding React component has `accessibilityRole="link"`. For example:

  <Text>
    A paragraph with some
    <Text accessible={true} accessibilityRole="link" onPress={onPress} onClick={onClick}>links</Text>
    surrounded by other text.
  </Text>

With this diff, the child Text component will be announced by TalkBack ('links available') and exposed as an option in the context menu. Clicking on the link in the context menu fires the Text component's onClick, which we're explicitly forwarding to onPress in Text.js (for now - ideally this would probably use a separate event, but that would involve wiring it up in the renderer as well).

ReactClickableSpan also applies text color from React if it exists; this is to override the default Android link styling (teal + underline).

Changelog: [Android][Fixed] Make nested Text components accessible as links

Reviewed By: yungsters, mdvacca

Differential Revision: D23553222

fbshipit-source-id: a962b2833d73ec81047e86cfb41846513c486d87
2020-09-15 17:34:35 -07:00
Samuel Susla b705eafd22 Fix retain cycle in RCTFabricSurface
Summary:
Changelog: [internal]

Fix retain cycle caused by chain: `RCTSurfaceTouchHandler` -> `RCTSurfaceTouchHandler._rootComponentView` -> `RCTSurfaceTouchHandler`

`RCTSurfaceTouchHandler._rootComponentView` calls `addGestureRecognizer` with `RCTSurfaceTouchHandler` as a parameter which, according to documentation, strongly holds onto gesture recogniser.

https://www.internalfb.com/intern/diffusion/FBS/browsefile/master/xplat/js/react-native-github/React/Fabric/RCTSurfaceTouchHandler.mm?lines=189

For details about `addGestureRecognizer`, refer to https://developer.apple.com/documentation/appkit/nsview/1483749-addgesturerecognizer?language=objc#

Reviewed By: shergin

Differential Revision: D23704441

fbshipit-source-id: b1ab0feff552eaf10c1c71a931690c5258ce87cf
2020-09-15 17:34:35 -07:00
George Zahariev 635ac1ba53 Update various Xplat Prettier configs to specify arrowParens: avoid
Summary:
Since Prettier 2.0, the default for the `arrowParens` option has changed from `avoid` to `always`.

In preparation for upgrading Prettier in Xplat to 2.1, add `arrowParens: 'avoid'` explicitly to configurations that were missing it so that we do not have a change of behaviour when upgrading.

Changelog: [Internal]

Reviewed By: bolinfest

Differential Revision: D23666397

fbshipit-source-id: 665f20d1419d0d664a6ef5cddc46f441b20eeb51
2020-09-14 18:36:20 -07:00
Ullrich Schäfer 845e9eaafb Fix for loading state of Fast Refresh from user defaults (#29880)
Summary:
Disabling Fast Refresh won't be persisted when restarting the app.

I believe this regressed with https://github.com/facebook/react-native/commit/824e1711172d14a9373209bbae63d1ae50601625. In this commit `HMRClient.setup` will always be called with `enabled` being set true. This PR loads the _enabled_ state from the user defaults (as it was done before).

## Changelog

[iOS] [Fixed] - Enable Fast Refresh gets persisted across app launches

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

Test Plan:
Without this change Fast Refresh is enabled on every app restart.

Tested with this change:
- Disabling Fast Refresh
- Restarting App -> Fast Refresh still disabled
- Enabled Fast Refresh again
- Restarting App -> Fast Refresh still enabled again

Reviewed By: sammy-SC

Differential Revision: D23686435

Pulled By: PeteTheHeat

fbshipit-source-id: 42c31b22060d3dc4b1d4cb8f41792b303fc7fce8
2020-09-14 17:45:53 -07:00
S. Weatherall 9c353b5ab0 Fix typo in invariant message (#29913)
Summary:
Fix a typo in the invariant message presented when ActionSheetManager does not exist (typo was found in 2 places)

## Changelog

[General] [Fixed] - Fix typo in invariant message

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

Test Plan: Run ActionSheetIOS.showActionSheetWithOptions(...) on an Android emulator to get this invariant message to appear.

Reviewed By: hramos

Differential Revision: D23691048

Pulled By: appden

fbshipit-source-id: 469db65a42bf547c7818b45729befa214b5791f2
2020-09-14 16:42:43 -07:00
Valentin Shergin 135993b36b Fabric: Using RootShadowNode instead of ShadowNode in ShadowTreeRevision
Summary:
It's more correct and we will rely on this in the future.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross

Differential Revision: D23681508

fbshipit-source-id: 5fef0ea164e8a400e6ca9a67947252b47ce6d44e
2020-09-14 15:14:50 -07:00
Valentin Shergin fbfadc24cc Fabric: Removing ShadowTreeRevision::getSharedRootShadowNode()
Summary:
It's unused code.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross

Differential Revision: D23681509

fbshipit-source-id: e307be8af7b11559d60024c7b8de6137ed669aaa
2020-09-14 15:14:50 -07:00
Valentin Shergin d8e770bfd0 Fabric: Removed unused code from ShadowTree
Summary:
This is dead code.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross

Differential Revision: D23681510

fbshipit-source-id: d2d1f7f97921401308badc417479d11588556ef8
2020-09-14 15:14:49 -07:00
Will Holen f34b914c8d Make the preemptive compilation threshold configurable
Summary:
This diff allows specifying the preemptive compilation threshold via CompileFlags.
Users get a toggle in CLI and RuntimeConfig that allows choosing between 1. fully eager, 2. fully lazy, 3. use default thresholds ("smart"). The default is #3.

However, since we use `-O` by default, it overrides any lazy compilation when
using the `hermes` binary.

ChangeLog: [Internal] Inspector updated to use new RuntimeConfig laziness control

Reviewed By: tmikov

Differential Revision: D23356463

fbshipit-source-id: 508b7b2e6a218346c69acfec97e7891e388f0e9b
2020-09-14 12:41:14 -07:00
empyrical 300df59c77 Android: Ensure RN_FABRIC_ENABLED is defined when building with Fabric (#29939)
Summary:
This pull request tweaks the build script for `jsiruntime` to ensure that `RN_FABRIC_ENABLED` is defined when building for Android with Fabric enabled, and using the JavascriptCore JS engine. Without it, the `createWeakObject` and `lockWeakObject` methods in `JSCRuntime.cpp` will throw an exception.

## Changelog

[Internal] [Changed] - Android: Ensure RN_FABRIC_ENABLED is defined when building with Fabric

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

Test Plan: RNTester with JSC now builds and runs on Android with Fabric enabled.

Reviewed By: hramos

Differential Revision: D23671070

Pulled By: fkgozali

fbshipit-source-id: 27e69364a9f709615543be7c20b72b5536443cd8
2020-09-14 10:08:51 -07:00
Joshua Gross 6524e611d3 Fix TextInput measurement caching
Summary:
This fixes TextInput measurement caching. Previously we were not setting the correct Spannable in the cache; we needed to additional Spans to it to indicate font size and other attributes.

This brings Fabric closer to how non-Fabric was measuring Spannables for TextInputs (see ReactTextInputShadowNode.java).

This should fix a few crashes and will be most noticeable with dynamically-sized multiline textinputs where the number of lines changes over time.

This also allows us to transmit less data from C++ to Java in the majority of cases.

Changelog: [Internal]

Differential Revision: D23670779

fbshipit-source-id: cf9b8c848b9e0c2619e01766b72b074248466825
2020-09-12 21:53:22 -07:00
Joshua Gross 0b3f46b564 Deallocate JNI array after TextInput text measurement
Summary:
Every time we measure a TextInput we allocate a JNI local array and weren't cleaning it up, leading to JNI table exhaustion.

Changelog: [Internal]

Differential Revision: D23670780

fbshipit-source-id: 2ecf9770c8593eeadd70a248be58037fefdca61e
2020-09-12 21:53:22 -07:00
Joshua Gross 44229d9149 Fix key mismatch in text layout
Summary:
Changelog: [Internal]

There was a key mismatch between what Java and C++.
cacheIdMap was incorrectly initialised.

Differential Revision: D23652342

fbshipit-source-id: 66f54dc887a011afeead9420bda093e9a0c9a8ca
2020-09-12 21:53:22 -07:00
Joshua Gross 250485a94c Move implementation of AndroidTextInputState to cpp file
Summary:
Changelog: [Internal]

Move implementation to cpp file

Reviewed By: shergin

Differential Revision: D23652329

fbshipit-source-id: 1b36fb7d9523938b90ae05af35494ff10dde1582
2020-09-12 21:53:22 -07:00
Valentin Shergin 653d8540c6 Fabric: Fixing a race condition in Scheduler::stopSurface()
Summary:
One of the operations we do in `Scheduler::stopSurface()` is committing an empty tree to free up `ShadowNode` objects and "disable" `EventEmitter`s associated with them. Before this change, we had a gap in time between a moment when we commit an empty tree and remove the tree from the registry. During this time gap, JavaScript (or native, actually) can commit another tree and mount another new state on the screen. To prevent this, we remove the tree from the registry first and only then commit an empty tree to a uniquely owned tree.
Note that the deleted comment says that we actually have to have a tree in the registry for committing an empty tree, I don't think it's true now.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D23667882

fbshipit-source-id: 387052e9f3e78e7d4446f36baed50f9caa831133
2020-09-12 15:41:34 -07:00
Tim Yung bdf3c79110 RN: Fix TouchableHighlight w/o onLongPress
Summary:
When `TouchableHighlight` was migrated to use `Pressability`, a bug was introduced due to `onLongPress` being unconditionally supplied as a callback. This bug leads to `onPress` not firing if the element is pressed for longer than 500ms, even when `onLongPress` is not supplied.

Closes #29040.

Changelog:
[General][Fixed] - TouchableHighlight fires `onPress` when pressed for >500ms, when `onLongPress` is not supplied.

Reviewed By: TheSavior

Differential Revision: D23664365

fbshipit-source-id: 3a0e92e276871eedd303888346a13433be15ac47
2020-09-11 19:05:54 -07:00
Paige Sun 8e9d3ceddf 7/7 Log attribution context from the image component
Summary: Changelog: [Internal] Log attribution context from the Fabric image component

Reviewed By: fkgozali

Differential Revision: D23547930

fbshipit-source-id: 125f34dac85ff6ac52a798bb1a36394436cb2c0f
2020-09-11 15:09:12 -07:00
Paige Sun acda299453 6/6 Log image-rendered for Fabric image logging
Reviewed By: fkgozali

Differential Revision: D23450649

fbshipit-source-id: 58265a2c7855a2f4371d68637f09a07921821adf
2020-09-11 15:09:12 -07:00
Paige Sun c17333d4c1 5/6 Log image-requested QPL point for Fabric images
Summary:
Changelog: [Internal] Log image-requested QPL point for Fabric images

* See D23450649 for the full lifecycle

Reviewed By: fkgozali

Differential Revision: D23448179

fbshipit-source-id: 0a78dae2d4f1e6322bbeee3574b10abe1efb30ef
2020-09-11 15:09:12 -07:00
Paige Sun 24ba03ccae 4/6 Log view-appear and view-disappear for Fabric image logging
Reviewed By: fkgozali

Differential Revision: D23447863

fbshipit-source-id: db16d97034a8d4ba6fcd08da5068039450f3c57b
2020-09-11 15:09:12 -07:00
Paige Sun 13759f192d 3/6 Add IGviewpoint for image visibility callbacks
Summary: Changelog: [Internal] Add IGviewpoint to get image visibility callbacks for when an UIImageView is in or out of view

Reviewed By: fkgozali

Differential Revision: D23428528

fbshipit-source-id: 87e4cee8fbe3c6b7da5153f87bbb530b2f990d96
2020-09-11 15:09:12 -07:00
Paige Sun d4e1202b4e 2/6 Track image request metadata in ImageTelemetry, to be passed from ImageShadowNode into RCTImageComponentView
Summary:
* Create `ImageTelemetry` as a property of ImageRequest to pass image metadata from the ImageShadowNode into RCTImageComponentView
  * ImageRequest is a object in the ImageShadowNode::ConcreteState

Reviewed By: fkgozali

Differential Revision: D23239664

fbshipit-source-id: db0f08bb889af8ce63fbe1abe88744edddb86150
2020-09-11 15:09:11 -07:00
empyrical fcfa4309f7 Fabric: Replace #import statement in SynchronousEventBeat (#29885)
Summary:
This function replaces the usage of an Objective-C `#import` statement with `#include` in `react/renderer/scheduler/SynchronousEventBeat.cpp`.

Clang seems to have no problems with `#import` being used in CPP files, but it was causing errors in MSVC. ([it has a different purpose](https://docs.microsoft.com/en-us/cpp/preprocessor/hash-import-directive-cpp?view=vs-2019) on Windows)

## Changelog

Changelog: [Internal][Changed] - Fabric: Replace #import statement in SynchronousEventBeat

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

Test Plan: This CPP file now compiles in MSVC

Reviewed By: sammy-SC

Differential Revision: D23591933

Pulled By: shergin

fbshipit-source-id: ee2cb8152f37e5ee09500af621a57b59d5a18400
2020-09-11 14:51:00 -07:00
Joshua Gross 78b42d7fb7 Take viewport offset into account in UIManager.measureInWindow
Summary:
D23021903 (https://github.com/facebook/react-native/commit/154ce789723f6e65785bcfc00da399ad9184bdfb) but for Android.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D23640968

fbshipit-source-id: 7a743ebd0ea2b573d6ef17b418ad98ec616b11d3
2020-09-11 13:43:26 -07:00
Samuel Susla a315e4cd30 Prevent an infinite loop in Text.onTextLayout
Summary:
Changelog: [internal]

# Problem
onTextLayout was called even if there was no change to text layout. This can cause an infinite loop with onTextLayout triggering commit which triggers onTextLayout.

# Fix
Do not call onTextLayout if there is nothing to layout.

Reviewed By: yungsters

Differential Revision: D23648430

fbshipit-source-id: 055dc34a9aca0edf2c78a5812b35b80df32c9e3e
2020-09-11 11:37:29 -07:00
Valentin Shergin a8b090b128 Fabric: Another attempt to deal with failing state updates
Summary:
This is *another* attempt to solve a failed state update problem.

Unfortunately, some applications are inherently not compatible with the "let's recommit the update on the application side in case it failed" approach. The problem is that if we call `updateState` on the application side, we miss the original event window. E.g. if we need to deliver some state update with AsyncBatched priority and if the update fails, we lose the opportunity to commit it on time. These issues can be critical for some complex use-cases as ComponentKit interop.

This diff adds implementation for `updateState` that does the work a bit differently. For all failed state updates it tres to recommit them asap using `ShadowTree::commit` and calling lambda on every attempt. With this approach the update might fail in two cases:
The node disappeared from the tree, so there is no way to update it.
The lambda returned `nullptr` indicating that the update is no longer needed.

We need this for the ComponentKit interoperability layer that is very sensitive for missing state updates.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D23603958

fbshipit-source-id: a3b8c09fb2f1c8302583aa5880b48fc0840224e3
2020-09-11 09:22:08 -07:00
Valentin Shergin c19b3ffae9 Fabric: Communicating a reason why a commit was unsuccessful via ShadowTree::CommitStatus
Summary:
We need it to stop repeating to commit new shadow tree in `ShadowTree::commit` when a transaction cancels the commit.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross, sammy-SC

Differential Revision: D23603959

fbshipit-source-id: d279fb3bf4190e860740a6450595d6f2fc3117f7
2020-09-11 09:22:08 -07:00
Ankit Tiwari 1b943a99e0 Update Alert API Examples in RNTester (#29855)
Summary:
This PR updates the Alert API Examples in RNTester. It is part of the MLH Fellowship.

## Changelog

- Added new use case for the Alert API.
- Wrote each use case in a separate example block to allow searching
- Wrote Detox tests for the Alert Screen

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

Test Plan:
**Screen Recording**: https://i.imgur.com/9ubMmDC.mp4

- Run the RNTester app locally by following [these](https://github.com/MLH-Fellowship/react-native/tree/rntest-pkg/packages/rn-tester) instructions.
- Search for `Alerts` and tap on it

<img width="566" alt="Screenshot 2020-07-07 at 1 29 03 PM" src="https://user-images.githubusercontent.com/22813027/86742553-d5351380-c055-11ea-8cd5-af0484797b8f.png">

Reviewed By: cpojer

Differential Revision: D23643369

Pulled By: rickhanlonii

fbshipit-source-id: 008801b857a3cda2d9125b33cba6251692e433dd
2020-09-11 08:52:11 -07:00
chirag-singhal f11b1da708 New Keyboard Avoiding Component Use Cases (#29857)
Summary:
* New use cases for keyboard avoiding component in rn-tester

## Changelog
[General] [Changed] - Changed use cases for keyboard avoiding component in rn-tester

## Test Plan
* Tested app in both Android and iOS

After -
![image](https://user-images.githubusercontent.com/42653703/92625233-07792080-f2e6-11ea-8e97-e606b8a2a1ec.png)
Before -
![image](https://user-images.githubusercontent.com/42653703/92625250-0d6f0180-f2e6-11ea-99db-e833c01b7b5c.png)

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

Reviewed By: cpojer

Differential Revision: D23643563

Pulled By: rickhanlonii

fbshipit-source-id: ba4850670e1c4ba0b167b7437dc2bd0c4a6dd60b
2020-09-11 08:36:41 -07:00
chirag-singhal 6ee146711d New Toast Android Component Use Cases (#29850)
Summary:
* New use cases for toast android component in rn-tester

## Changelog
[General] [Changed] - Changed use cases for toast android component in rn-tester

## Test Plan
* Tested app in both Android and iOS
After -
![image](https://user-images.githubusercontent.com/42653703/92625766-b584ca80-f2e6-11ea-8fbf-86770365942a.png)
Before -
![image](https://user-images.githubusercontent.com/42653703/92625813-c2a1b980-f2e6-11ea-950d-0933172951c2.png)

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

Reviewed By: cpojer

Differential Revision: D23643554

Pulled By: rickhanlonii

fbshipit-source-id: d211c025e480bb77b40dfb288643a80e96b91c1d
2020-09-11 08:32:46 -07:00
Valentin Shergin 661d34bb42 Fabric: Removing MainRunLoopEventBeat and RuntimeEventBeat (iOS)
Summary:
The `enable_run_loop_based_event_beat_ios` experiment was shipped a couple of months ago.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D23606061

fbshipit-source-id: e1926f46933d6603f20104f211c944c50173a627
2020-09-11 08:23:27 -07:00
Kevin Gozali 22e3f020fd Codegen: create java dirs based on javaPackageName for .java spec files
Summary:
Move the directory creation logic to the CLI. This needs to be processed by RNCodegen.js eventually.

Changelog: [Internal]

Reviewed By: hramos

Differential Revision: D23618550

fbshipit-source-id: e7dc4f5fc37e5ad12b5c6ae8ea31fc9ef16d74b9
2020-09-11 01:14:17 -07:00
Kevin Gozali 0351c57e6a Codegen: Generate module C++ lookup function for JNI next to the spec classes
Summary:
The TurboModule system requires a lookup function to map the spec name (name used in JS) to the C++ TurboModule subclass. This is a pure C function. For now, generate one lookup function per set of modules found in the codegen schema.

Changelog: [Internal]

Reviewed By: hramos

Differential Revision: D23618281

fbshipit-source-id: 889e07bdd4f2e5e93c4d14e60225f5b0c6683917
2020-09-11 01:14:17 -07:00
Joshua Gross e26c280782 Remove enableFabricStartSurfaceWithLayoutMetrics feature flag
Summary:
Remove `enableFabricStartSurfaceWithLayoutMetrics` and treat as `true` always from now on.

Changelog: [Internal]

Differential Revision: D23633198

fbshipit-source-id: 5b7455b87e578ffa97d80746fa901cd2b50d3ea9
2020-09-10 18:16:32 -07:00