Commit Graph
1826 Commits
Author SHA1 Message Date
Ramanpreet NaraandFacebook Github Bot 525703de5b Separate RCTLinking from ReactInternal
Summary:
None of the code inside `ReactInternal` depended on the `RCTLinkingManager` NativeModule. So I extracted `RCTLinking` into its own BUCK target. This will make it easier to make `RCTLinkingManager` TurboModule-compatible.

## Codemod
Everywhere we required `ReactInternal`, we now also require `RCTLinking`:
```
> xbgr -f 'BUCK$' 'ReactInternal"' -l | xargs -I {} sed -i '' $'s|ReactInternal",|ReactInternal",\"fbsource//xplat/js:RCTLinking",|g' $HOME/{}
> xbgr -f 'BUCK$' 'ReactInternalApple"' -l | xargs -I {} sed -i '' $'s|ReactInternalApple",|ReactInternalApple",\"fbsource//xplat/js:RCTLinkingApple",|g' $HOME/{}
> arc f
```

Changelog:
[Internal] - Separate RCTLinking from ReactInternal

Reviewed By: fkgozali

Differential Revision: D18314747

fbshipit-source-id: d9b5f536a6e93a0aca8721801a2ee5d446e0d4a6
2019-11-08 14:14:45 -08:00
Valentin SherginandFacebook Github Bot d04e03ffb8 Fabric: Making EventBeat::beat protected member
Summary:
The documentation for the method says that it must be called from a subclass, but the methods wasn't marked as protected.

Calling `beat` directly will bypass custom logic implemented in subclasses (because it's not a virtual function (by-design)). That's practically what happened before and what the previous diffs in the stack fix.

Changelog: [Internal]

Reviewed By: JoshuaGross

Differential Revision: D18339594

fbshipit-source-id: 3d8c53b69e1b72d447714dd91c9392bdfb05b9ae
2019-11-07 09:43:07 -08:00
Samuel SuslaandFacebook Github Bot a0ccd899e3 Add support for commands to interop layer
Summary:
Interop layer can now forward commands to paper components.

Changelog: [internal]

Reviewed By: shergin

Differential Revision: D18285766

fbshipit-source-id: 33fe071c3000569d52fedcbcdeccc354dfe277d9
2019-11-07 08:19:51 -08:00
Valentin SherginandFacebook Github Bot 5b19464b81 Fabric: <UnimplementedView>, a new way to react on missing component
Summary:
This implement new <UnimplementedView> (only for iOS for now) that relies on the new "reactive component registration" functionality.
The `UnimplementedView` component is the perfect example of that. It's simple and uniquely required some constraints that we want to implement: the same component class registered several times with different handles and names.

This change serves two needs:
1. Providing an example of how that functionality can be used in more complex cases.
2. That will allow removing some `UnimplementedView`-specific code from the core (and very hot pathes of the system) and make them `noexcept`. That will eventually allow removing some public APIs from RawValue (constructing from folly::dynamic) that currently impose some implementation details and probably prevent us from making it slightly faster. There are only two consumers of this API, this is one of them.

Changelog: [Internal]

Reviewed By: fkgozali

Differential Revision: D17211913

fbshipit-source-id: df1a1ac1a36289ef79904d509d38ee8b3f5588fb
2019-11-06 22:21:31 -08:00
Valentin SherginandFacebook Github Bot 4d83a43f1e Fabric: Asserting in ~Scheduler that there is no running Surfaces
Summary:
It's a logical error on the application layer if a Scheduler is being deallocated before all Surfaces were stopped. Besides that this requirement must be satisfied to make concurrent deallocation of Scheduler and calling on it from `UIManager` side thread-safe.

Changelog: [Internal]

Reviewed By: JoshuaGross, sammy-SC

Differential Revision: D18333709

fbshipit-source-id: 4af0ba488bb4306eb82807c2f0ee5b7c598dcfed
2019-11-06 14:43:43 -08:00
Valentin SherginandFacebook Github Bot 1bc4bd333c Fabric: Inlining Scheduler::uiManagerDidFinishTransaction(surfaceId, rootChildren)
Summary:
There is no need for that functionality to be delegated to Scheduler, that's a leftover of the previous iteration of the design.
Nothing really changed.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D18285501

fbshipit-source-id: 4b60445b663a2431fbdc7cc1120f46d56819c430
2019-11-06 14:43:42 -08:00
Valentin SherginandFacebook Github Bot 04370256e0 Fabric: Routing all ShadowTree events via UIManager
Summary:
Now `UIManager` serves as `ShadowTree`'s delegate instead of `Scheduler`.
There is no good reason for Scheduler to be a ShadowTree delegate anymore, now UIManager owns all ShadowTree instances (via the registry). The existing configuration causes a crash because `ShadowTree` can overlive the `Scheduler`. Having a `UIManager` as a delegate of `ShadowTree` solves the problem because `UIManager` checks the own delegate for (which is actually a Scheduler) nullability before calling something on it (and `Scheduler` nulls that delegate during own deallocation process).

(No actual ownership relations were changed in the diff.)

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross

Differential Revision: D18285500

fbshipit-source-id: 35ac4f37b6abdf4857a23c4869785a323e433317
2019-11-06 14:43:42 -08:00
Valentin SherginandFacebook Github Bot 3c2c5430d2 Fabric: Removing Scheduler::shadowTreeRegistry_
Summary:
It's dead, unused variable.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D18285498

fbshipit-source-id: ee06950b21053ed488d5e64db28b4b0b03fb4471
2019-11-06 14:43:42 -08:00
Valentin SherginandFacebook Github Bot b642677a97 Fabric: Removing ComponentDescriptorProviderRegistry::remove()
Summary:
This diff removes `ComponentDescriptorProviderRegistry::remove()` and two derivative interfaces.
First, we don't use that and there is no concrete idea why we would need to use that. Those were originally built only for symmetry with limited knowledge about what exactly we need.
Second, those methods are actually dangerous and probably must not be supported by design. Removing a ComponentDescriptorProvider destroys already registered `ComponentDescriptor`s, and at the same time we might have ShadowNodes referring to that (which will cause a crash), and there is no reasonable way to check for the existence of those nodes.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D18285497

fbshipit-source-id: b461e38b923c217a256e1155689311397a994feb
2019-11-06 14:43:41 -08:00
Peter ArganyandFacebook Github Bot 18e3303cd4 Ensure RCTDisplayLink and RCTTurboModuleManager are cleaned up properly [3/N]
Summary: Changelog: [Internal][Fixed] Ensure RCTDisplayLink and RCTTurboModuleManager are dealloc-ed correctly,

Reviewed By: RSNara

Differential Revision: D18283011

fbshipit-source-id: 981b02b7f9a94b8b8c3ad4233df353925b7a4fa4
2019-11-06 14:20:56 -08:00
Sidharth GuglaniandFacebook Github Bot 5ee365f0b5 Use double for YGRoundValueToPixelGrid calculations
Summary:
Use double for YGRoundValueToPixelGrid calculations as we were losing some precision in float operations

#Changelog:
[Internal][Yoga] Use double for YGRoundValueToPixelGrid calculations

Reviewed By: astreet

Differential Revision: D18225999

fbshipit-source-id: 69c05f56a0e0f3433bf0bd958aa07d26dd83fe02
2019-11-05 17:14:39 -08:00
Valentin SherginandFacebook Github Bot 89add2582d Fabric: Collecting mounting time inside MountingTelemetry
Summary:
Now we also collect mounting time inside MountingTelemetry.
We will use it soon.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: mdvacca

Differential Revision: D18285826

fbshipit-source-id: 512fc62c210a111614b0defb0d76cbd6228fe89f
2019-11-04 18:21:13 -08:00
Valentin SherginandFacebook Github Bot 2690e7363c Fabric: Cross-platform implementation of monotonicTimeInMilliseconds
Summary:
Now the function supports iOS.
We will use it soon.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: mdvacca

Differential Revision: D18285828

fbshipit-source-id: b9c16433e9c75ab4c071e4bd55074757372f6c0a
2019-11-04 18:21:12 -08:00
Peter ArganyandFacebook Github Bot dc3b5ad275 Remove unneeded NSNotification center removeObserver
Summary:
A very common pattern I've seen in RN codebase:

     - (instancetype) init {
        [[NSNotificationCenter defaultCenter] addObserver:self ...]
      }

    - (void) dealloc {
       [[NSNotificationCenter defaultCenter] removeObserver:self ...]
     }

From Apple:

https://developer.apple.com/documentation/foundation/nsnotificationcenter/1413994-removeobserver?language=objc

> If your app targets iOS 9.0 and later or macOS 10.11 and later, you don't need to unregister an observer in its dealloc method.

RN targets iOS9+

Changelog: [Internal][Cleanup] Remove unneeded NSNotification center removeObserver

Reviewed By: shergin

Differential Revision: D18264235

fbshipit-source-id: 684e5f5555cec96b055b13cd83daaeb393f4fac9
2019-11-04 10:19:30 -08:00
Valentin SherginandFacebook Github Bot 68150914f5 Fabric: Storing component's handle and name inside ShadowNodeFamily object
Summary:
Before this change, all methods `ShadowNode::getComponentHandle()` and `ShadowNode::getComponentHandle()` returned the values directly from a `ComponentDescriptor` (via `ShadowNodeFamily`). Now, we store/cache those values in ShadowNodeFamily object (and ShadowNode's methods use that).

We need that to ensure that calling those methods doesn't access the `ComponentDescriptor` object because it's difficult to guarantee that this object overlives all `ShadowNode`s. This is especially important when we build `ShadowView`s from `ShadowNode`s: this might happen way after the code is already deallocated and the only living objects are MountingTransactionCoordinator and essentially two pointers to root nodes of before and after trees (that still needs to be mounted).

This diff introduces no actual changes in the ownership model.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: mdvacca

Differential Revision: D18290024

fbshipit-source-id: 4135a277515a84b053fe0d0dde48fba59bf2aae3
2019-11-02 23:29:42 -07:00
Dmytro KasianchukandFacebook Github Bot 3efc9f312c Added missing YOGA_EXPORT
Summary:
Added missing YOGA_EXPORT

#Changelog:
[Internal] [Fixed] - Added missing YOGA_EXPORT

Reviewed By: SidharthGuglani

Differential Revision: D18289071

fbshipit-source-id: a2e16a59427aa33b34b3d1fab9d1088904ee62f5
2019-11-02 20:42:54 -07:00
Ramanpreet NaraandFacebook Github Bot 3f50f57b3d Back out "Fixes Fabric related podspec"
Summary:
Original commit changeset: 4b18a931a2e4

The original PR wherein these changes were introduced was problematic. When you expose headers that use C++ from the Yoga podspec, they get automatically imported in the Yoga umbrella file. This causes compilation errors, most likely because it's possible for non-c++ files to import these headers (i.e: RCTConvert.m).

I didn't dig into this too much, but since Fabric still doesn't fully compile in OSS, I think it's reasonable to revert this PR for now. cc Kevin Gozali.

Changelog:
[iOS][Fixed] - Undo Fabric-related podspec change

Reviewed By: fkgozali

Differential Revision: D18284536

fbshipit-source-id: a90454b945af0235424dc56408400cd35efd4e7a
2019-11-01 19:34:46 -07:00
Ramanpreet NaraandFacebook Github Bot f9d9d6bb4c Remove turbomodule/core dependency on RCTCxxBridge
Summary:
Sources in `fbsource//xplat/js/react-native-github/ReactCommon/turbomodule/core:coreApple` don't depend on `RCTCxxBridge`. Therefore, I'm removing this dependency.

Changelog:
[Internal] - Remove turbomodule/coreApple dependency on RCTCxxBridge

Reviewed By: PeteTheHeat

Differential Revision: D18148889

fbshipit-source-id: 5fdff9b29e1371e4a92aa2f017edf88fa2d0368f
2019-11-01 12:06:21 -07:00
Sidharth GuglaniandFacebook Github Bot d729f0e922 Use compiler flag -fvisibility=hidden
Summary:
Using compiler flag -fvisibility=hidden and explicitly setting visibility to default to public methods

#Changelog:
[Internal] [Yoga] Use compiler flag -fvisibility=hidden for reducing yoga binary size

Reviewed By: astreet

Differential Revision: D18029030

fbshipit-source-id: 545e73f9c25f3108fc9d9bb7f08c157dbc8da005
2019-11-01 11:47:07 -07:00
Valentin SherginandFacebook Github Bot f2bb793699 Fabric: Re-registration a ComponentDescriptorProvider is now no-op and an assert in DEBUG mode
Summary:
We suspect that the re-registration of `ComponentDescriptorProvider`s during Bridge reloading might cause crashes in Fabric core. That happens because the re-registration process replaces already existing and being used ComponentDescriptors in the managed registries with the exact same new ones, which forces old ones to be deallocated and all pointers to them invalid. (On of the fundamental Fabric design decision is that `ShadowNode`s don't own/retain ComponentDescriptors.)
It seems was already indirectly addressed in application code on iOS but still fixing that in the core is valuable.
Android implementation does not use reactive component registration, so it was already fine.

As the follow-up diff, we plan to remove "removing" capabilities from ComponentDescriptorRegistry and ComponentDescriptorProviderRegistry to make it even more future-proof.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D18273683

fbshipit-source-id: 7615627842855f078a3fdf3049f5511f59700972
2019-11-01 11:38:59 -07:00
Valentin SherginandFacebook Github Bot 41cf6da074 Fabric: Implementation of RCTMountingTransactionObserving protocol
Summary:
This diff finally uses all facilities from the previous diffs to build an implementation of  `RCTMountingTransactionObserving` protocol which does *not* require using expensive Objective-C runtime features.

In the coming diffs, we will see how it can/should be used.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D18217101

fbshipit-source-id: 34f411dcb527dc81570c2f2833ce13b40e1450db
2019-11-01 09:38:25 -07:00
Valentin SherginandFacebook Github Bot 20a0f224ba Fabric: Introducing RCTMountingTransactionObserving protocol
Summary:
See the comment in RCTMountingTransactionObserving first.

I think we have to add this to the iOS mounting layer to be able reasonably easy implement things like:

* MovableNavigationBar: seems, currently we don't handle the situation when the container was mounted first and the nested scroll view second.
* TTI component: It does not have access to telemetry.

The protocol is meant to replace `RCTSurfacePresenterObserver`.

Changelog: [Internal] Fabric-specific change.

Reviewed By: mdvacca

Differential Revision: D16270107

fbshipit-source-id: 2d4bdb7d0092cc214cc433fc633e41e58f6677df
2019-11-01 09:38:25 -07:00
Samuel SuslaandFacebook Github Bot a82ebeb6f3 Fabric: Use padding instead of size for SafeAreaView
Summary:
Use padding instead of setting size of SafeAreaView, this should make it more consistent with Paper component.

changelog: [internal]

Reviewed By: shergin

Differential Revision: D18225793

fbshipit-source-id: 08dccbdae0e4f7a7847501a06e17d4c26473462a
2019-10-31 21:25:37 -07:00
Riley DulinandFacebook Github Bot f91a21b2c0 Remove compact parameter from heap snapshots
Summary:
This parameter used to be useful for a custom format hermes was developing,
but since Hermes now outputs the Chrome format it isn't useful.
Chrome actually disallows prettified JSON, and requires a special version that is faster to parse.
Therefore, `compact` was the only supported mode.

Changelog: [Internal] Remove compact parameter from `createSnapshotToFile`

Reviewed By: willholen

Differential Revision: D17726742

fbshipit-source-id: 6f39af9046dff2f3b4fba822312a9a89c939ed89
2019-10-31 14:48:01 -07:00
Samuel SuslaandFacebook Github Bot 8c7ec51981 Add StickerInputView to interop white list
Summary: changelog: [internal]

Reviewed By: shergin

Differential Revision: D17955113

fbshipit-source-id: 8c9e7271a1eb5e503dd273e963e9fbffb4a950bf
2019-10-31 14:42:48 -07:00
Samuel SuslaandFacebook Github Bot fbfce92e97 Use ReactTag to map events to component view
Summary:
Use `reactTag` instead of address of `UIView` to map events from paper components to Fabric.

changelog: [internal]

Reviewed By: shergin

Differential Revision: D17954974

fbshipit-source-id: 0d8bf748e58f4cb6769e107bc7fd0e66b93d8f12
2019-10-31 14:42:47 -07:00
Samuel SuslaandFacebook Github Bot 19f58f4935 Add FBGroupsLandingView to LegacyViewManagerInterop whitelist
Summary:
Allow components outside of React-Native core to be registered with LegacyViewManagerInterop

changelog: [Internal]

Reviewed By: fkgozali

Differential Revision: D17912238

fbshipit-source-id: 67a9109c427c5e3efb8ebb6c6f8c13c2931461a3
2019-10-31 14:42:47 -07:00
Valentin SherginandFacebook Github Bot b5080f7d77 Fabric: Fixing arbitrary-node-replacing (aka RootShadowNode::clone) algorithm
Summary:
This diff changes how arbitrary-node-replacing (aka `RootShadowNode::clone`) algorithm works.
Original implementation worked this way: We specified a node that needs to be replaced and a new replacement node. Then the algorithm finds a node with *the same family* as given the to-be-replaced node and replaced that with a given replacement.
The problem with this approach is that we are replacing a node that we have very little info about (we only know that it shares the same family as specified one). At the same time, we build the replacement based on the exact node that we have. Then imagine the case in which the "target" node can progress/change between a moment where we get a reference to it and a moment where we are trying to clone the tree. In this case, we will replace a "progressed" node with a modified version of the obsolete node.
Practically speaking, it was possible that during a state update we were replacing a node that just got new children with a bit older version of that with old children but with a new state.

How to deal with it? This diff introduces a new interface for this method that allows separating the target node and the actual act of cloning the corresponding node. Instead of specifying actual replacement, we now specify a function that performs the cloning/transformation on-demand on the very exact node that was in the tree at the moment of cloning.

This change does not change/affect any ownership-related relationships between trees and/or nodes.

Ideally, probably, the interface should accept ShadowNodeFamily instance instead of a ShadowNode instance to make the behavior very clear but that requires a bunch of low-level changes that it out of the scope of this fix.

```

                                                                   The old approach.

                     ┌─────────────────┐                          ┌─────────────────┐                          ┌─────────────────┐
                     │                 │                          │                 │                          │                 │
                     │      A(r0)      │                          │      A(r1)      │                          │      A(r2)      │
                     │                 │                          │                 │                          │                 │
                     └─────────────────┘                          └─────────────────┘                          └─────────────────┘
                              │                                            │                                            │
                              │          Let's update the                  │   Meanwhile the node B                     │
                              ▼           state of this                    ▼    gets new children.                      ▼
                     ┌─────────────────┐   node to s1.            ┌─────────────────┐                          ┌─────────────────┐
                     │                 │                          │                 │                          │                 │   Created
                     │    B(r0, s0)    │         ───────▶         │    B(r1, s0)    │         ───────▶         │    B(r2, s1)    │     from
                     │                 │                          │                 │                          │                 │    B(r0).
                     └─────────────────┘                          └─────────────────┘                          └─────────────────┘
                              │                                            │                                            │
                       ┌──────┴──────┐                       ┌─────────────┼─────────────┐                       ┌──────┴──────┐
                       │             │                       │             │             │                       │             │    What just
                       ▼             ▼                       ▼             ▼             ▼                       ▼             ▼     happe..?
                 ┌───────────┐ ┌───────────┐           ┌───────────┐ ┌───────────┐ ┌───────────┐           ┌───────────┐ ┌───────────┐
                 │           │ │           │           │           │ │           │ │           │           │           │ │           │
                 │   C(r0)   │ │   D(r0)   │           │   C(r1)   │ │   D(r1)   │ │   X(r0)   │           │   C(r0)   │ │   D(r0)   │
                 │           │ │           │           │           │ │           │ │           │           │           │ │           │
                 └───────────┘ └───────────┘           └───────────┘ └───────────┘ └───────────┘           └───────────┘ └───────────┘

                                                                   The new approach.

                     ┌─────────────────┐                          ┌─────────────────┐                           ┌─────────────────┐
                     │                 │                          │                 │                           │                 │
                     │      A(r0)      │                          │      A(r1)      │                           │      A(r2)      │
                     │                 │                          │                 │                           │                 │
                     └─────────────────┘                          └─────────────────┘                           └─────────────────┘
                              │                                            │                                             │
                              │         Let's update the                   │                                             │
                              ▼          state of this                     ▼                                             ▼
                     ┌─────────────────┐  node to s1.             ┌─────────────────┐                           ┌─────────────────┐
                     │                 │                          │                 │                           │                 │   Created
                     │    B(r0, s0)    │         ───────▶         │    B(r1, s0)    │         ───────▶          │    B(r2, s1)    │     from
                     │                 │                          │                 │                           │                 │    B(r1).
                     └─────────────────┘                          └─────────────────┘                           └─────────────────┘
                              │                                            │                                             │
                       ┌──────┴──────┐                       ┌─────────────┼─────────────┐                 ┌─────────────┼─────────────┐
                       │             │                       │             │             │                 │             │             │
                       ▼             ▼                       ▼             ▼             ▼                 ▼             ▼             ▼
                 ┌───────────┐ ┌───────────┐           ┌───────────┐ ┌───────────┐ ┌───────────┐     ┌───────────┐ ┌───────────┐ ┌───────────┐
                 │           │ │           │           │           │ │           │ │           │     │           │ │           │ │           │
                 │   C(r0)   │ │   D(r0)   │           │   C(r1)   │ │   D(r1)   │ │   X(r0)   │     │   C(r1)   │ │   D(r1)   │ │   X(r0)   │
                 │           │ │           │           │           │ │           │ │           │     │           │ │           │ │           │
                 └───────────┘ └───────────┘           └───────────┘ └───────────┘ └───────────┘     └───────────┘ └───────────┘ └───────────┘

```

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross

Differential Revision: D18229704

fbshipit-source-id: face6d0e5c240224ce49e93e783cff3172b60529
2019-10-31 09:38:39 -07:00
Valentin SherginandFacebook Github Bot 6ffc93d657 Fabric: Use ShadowNode::sameFamily instead of getTag() to check for same family
Summary:
We used to use `getTag` to check that some two nodes are clones of each other, not we have a dedicated method for that that exactly ensures that without reling  on a sideeffect (wich tag equality is).
That is just much less error-prone.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: mdvacca

Differential Revision: D18231006

fbshipit-source-id: 6b247ed0eaded1fed8fd7fa820e80cd58602110c
2019-10-31 09:38:39 -07:00
Scott WolchokandFacebook Github Bot 6c177d8332 Fix data race with gCurrentGenerationCount
Summary:
Yoga layout can be invoked on multiple threads, and gCurrentGenerationCount is a shared global without synchronization.

Changelog: [General] [Fixed] - Fix an internal thread safety issue in Yoga

Reviewed By: SidharthGuglani

Differential Revision: D18092734

fbshipit-source-id: 85753d139549b4e5507f97a56d589fb6854557fa
2019-10-28 12:45:16 -07:00
David VaccaandFacebook Github Bot 81d6357be1 Add textBreakStrategy as part of ParagraphAttributes object
Summary:
This diff exposes textBreakStrategy as part of ParagraphAttributes. This is necessary to support the textBreakStrategy prop into Text for Android

Changelog: [Internal]

Reviewed By: JoshuaGross

Differential Revision: D18101404

fbshipit-source-id: e7b665cefe48cf8c764f73a1c51eede16245d1ec
2019-10-24 19:55:15 -07:00
David VaccaandFacebook Github Bot 13db6cb731 Expose ParagraphAttributes into ParagraphState
Summary:
This diff extends ParagraphState to expose not only the AttributedString associated to Text components, but also ParagraphAttributes that describes the visual high level props of the Paragraph

Changelog: [Internal]

Reviewed By: JoshuaGross

Differential Revision: D18101407

fbshipit-source-id: 5f5d5ca35cc03e4bf983fd24654be9506d1901a1
2019-10-24 19:55:14 -07:00
Valentin SherginandFacebook Github Bot b30bf2f94e Fabric: Introducing ContextContainer::update()
Summary:
The new method allows updating a ContextContainer using another one.
We will need that in the coming diffs.

Changelog: [Internal] Introducing `ContextContainer::update`

Reviewed By: sammy-SC

Differential Revision: D17960238

fbshipit-source-id: 187dcecbeee8c3de082575e53d5430d91b5338c5
2019-10-24 17:45:39 -07:00
Joe LoserandFacebook Github Bot ba18ee9b87 Replace folly::make_unique with std::make_unique (#26730)
Summary:
There is a mixed usage of `folly::make_unique` and `std::make_unique`. Soon, `folly::make_unique` may be removed (see [this PR](https://github.com/facebook/folly/pull/1150)). Since `react-native` only supports C++14-compilers and later, switch to always using `std::make_unique`.

## Changelog

[Internal] [Removed] - Replace folly::make_unique with std::make_unique
Pull Request resolved: https://github.com/facebook/react-native/pull/26730

Test Plan:
Running the existing test suite. No change in behavior is expected.

Joshua Gross: buck install -r fb4a, make sure MP Home and forced teardown works okay on android

Reviewed By: shergin

Differential Revision: D18062400

Pulled By: JoshuaGross

fbshipit-source-id: 978ca794c7e972db872a8dcc57c31bdec7451481
2019-10-22 12:21:41 -07:00
Samuel SuslaandFacebook Github Bot 7796b7e9af Avoid use of shared_from_this in StateTarget
Summary:
`StateTarget` no longer uses `shared_from_this`, this allows us to remove need for `enable_shared_from_this`

I decided to put `state->commit` call inside `ShadowTree.cpp` because I needed to have access to `shared_ptr` of shadow node from outside of the class itself.
`state->commit` was originally designed to be only called by `ShadowNode` but this does not seem to be the case anymore since it is called from `UIManager` as well.

changelog: [internal]

Reviewed By: shergin

Differential Revision: D18032532

fbshipit-source-id: 75c874fd04f86adc07bfddbef3a0384e17c2067b
2019-10-21 17:18:36 -07:00
Ramanpreet NaraandFacebook Github Bot d8fda74c24 Move RCTImage NativeModules back to RCTImage
Summary:
In D16805827, I moved `RCTImageLoader`, `RCTImageStoreManager`, and `RCTImageEditingManager` to `CoreModules`. This was necessary to turn `RCTImageLoader` into a TurboModule. However, after D17671288 landed, it's no longer necessary to have OSS NativeModules in `CoreModules`. Therefore, I'm moving these NativeModules back to `RCTImage`.

Changelog: [iOS][Fixed] Move RCTImage NativeModules back to RCTImage

Reviewed By: shergin

Differential Revision: D17921612

fbshipit-source-id: 8ae36d2dc8deaf704313cbe2479bfa011ebcbfbc
2019-10-21 17:15:32 -07:00
Andres SuarezandFacebook Github Bot d8560a838b Tidy up license headers [3/n]
Summary: Changelog: [General] [Fixed] - License header cleanup

Differential Revision: D18033336

fbshipit-source-id: 0334bfa2d61314de6ee9e7302205c08574abc0d9
2019-10-21 10:43:00 -07:00
Valentin SherginandFacebook Github Bot 50c59aa7f8 Fabric: Changing signature of ShadowNode::replaceChild to avoid shared_from_this()
Summary:
This change in the method signature allows removing usage of `shared_from_this()`.
After this change we will have only one usage of `shared_from_this()`.

Changelog: [Internal] Small Fabric-specific optimization.

Reviewed By: sammy-SC

Differential Revision: D17973956

fbshipit-source-id: 19818b0855565d872005062ba2992718ca89b372
2019-10-21 09:44:25 -07:00
Valentin SherginandFacebook Github Bot 7186a65b13 Fabric: Changes in BaseTextShadowNode to remove usage of shared_from_this()
Summary:
This is another step on the journey of removing `enable_shared_from_this`.

It's unclear why we used that before but it's clear now that using shared_ptr here is not necessary because all computation around happens inside the single callstack, so by definition we don't have object life-time concerns here.

Changelog: [Internal] Small Fabric-specific optimization.

Reviewed By: sammy-SC

Differential Revision: D17973957

fbshipit-source-id: 09a65c78e22083ed21b041240307f4858379cc60
2019-10-21 09:44:25 -07:00
Valentin SherginandFacebook Github Bot c5f704b8e3 Changing signature of RootShadowNode::clone() to remove a shared_from_this() call
Summary:
This is the first diff in the journey of removing `enable_shared_from_this` from `ShadowNode` class.

In general, using `enable_shared_from_this` is fine, it's a normal standard feature and there is nothing wrong with that... besides the fact that using this thing is usually an indication of overall poor design.
In Fabric, we don't really have a good reason for that, I think in all cases it can be avoided, so I think we should remove that.
Removing that is also code-size and perf win.

This particular diff changes the signature of `RootShadowNode::clone()` which allows removing the necessity  of usage `.shared_from_this()` from callsites.
The rest changes are purely cosmetical.

Changelog: [Internal] Small Fabric-specific optimization.

Reviewed By: sammy-SC

Differential Revision: D17973958

fbshipit-source-id: 5539ceff9d11b4281a6ebe8d80e90d6bd90e44d8
2019-10-21 09:44:25 -07:00
Samuel SuslaandFacebook Github Bot 75b9f9d5dd Fabric: Add proper type to TargetState
Summary:
There isn't a need for using `std::shared_ptr<const void>` as the type is known.

changelog: [internal]

Reviewed By: shergin

Differential Revision: D18032518

fbshipit-source-id: 7860f9be8ba1a05a725e8bf7260a496d51194f2f
2019-10-21 06:27:26 -07:00
Samuel SuslaandFacebook Github Bot 7e49cf1930 Fabric: Remove redundant class forward declaration
Summary:
Remove redundant forward declaration and make default constructor explicit.

changelog: [internal]

Reviewed By: shergin

Differential Revision: D18032511

fbshipit-source-id: 18d3f9c869a69949e6965cd7e32e0f284723f2e3
2019-10-21 06:24:18 -07:00
Valentin SherginandFacebook Github Bot fd07fc9454 Fabric: Removing deprecated API from ComponentDescriptorRegistry
Summary:
We don't use it anymore.

Changelog: [Internal] Removing internal deprecated API (Fabric)

Reviewed By: mdvacca

Differential Revision: D18010490

fbshipit-source-id: c6da7fae071356e06bb0920f5a26d6c9b239c052
2019-10-20 20:53:21 -07:00
Valentin SherginandFacebook Github Bot c8176881ce Fabric: Using ComponentDescriptorProviderRegistry in UITemplateProcessorTest
Summary:
ComponentDescriptorProviderRegistry is a new API for component registration.

Changelog: [Internal] Fabric-specific change in UIManager test.

Reviewed By: mdvacca

Differential Revision: D18010489

fbshipit-source-id: d615bfb5c9437da7358c0bd8465ab4b6525089e6
2019-10-20 20:53:20 -07:00
Valentin SherginandFacebook Github Bot 8a8ff63b7d Fabric: Unification of constructor signature of ComponentDescriptors
Summary:
This is the first step to migrate the registration of Android-specific `ComponentDescriptors` to `ComponentDescriptorProviderRegistry`.
`ComponentDescriptorProviderRegistry` is a never API for component registration that supports reactive registration and simplified signatures for `registry` (`add`) method.

It's tedious to keep those signatures in sync with the base class (`ComponentDescriptor`), we have an idea how to make it better by using a single struct with all params but a migration to that will be a separate effort.

The changes are pure syntactical.

Changelog: [Internal] Internal changes in Fabric.

Reviewed By: mdvacca

Differential Revision: D18010488

fbshipit-source-id: 4cbfdbcae235b32a94b38df2095c956299764e59
2019-10-20 20:53:20 -07:00
Valentin SherginandFacebook Github Bot dbc7e4e527 Fabric: More type asserts in ConcreteComponentDescriptor
Summary:
`ConcreteComponentDescriptor` is a major place where dynamic dispatch calls end up. We see some amount of crashes that can be caused by an invalid pointer to a ComponentDescriptor, those checks can help verify this theory. Anyway, it's a good practice to fail earlier.

Changelog: [Internal] - Stability improvements (Fabric)

Reviewed By: sammy-SC

Differential Revision: D17991515

fbshipit-source-id: 1cac372a12b49430a3d1db66c8fc673e6adc32e9
2019-10-18 09:27:48 -07:00
David VaccaandFacebook Github Bot 8425292eb4 Report Redbox error when a component is not implemented
Summary:
This diff ensures that a redbox is reported when a component is not registered in Fabric.

Changelog:
Ensure a redbox is reported when components are not registered in Fabric.

Reviewed By: shergin

Differential Revision: D17970793

fbshipit-source-id: 7afd7e6b0b9c0ff6d2bd475dbf6979d83fec093c
2019-10-18 09:09:30 -07:00
Valentin SherginandFacebook Github Bot 05862faab4 Farbic: Making ShadowNode::revision_ debug only
Summary:
We use this piece of data only for debug purposes, so there is no need to pay for that in prod.

Changelog: [Internal] - Small optimization in `ShadowNode` (Fabric)

Reviewed By: JoshuaGross

Differential Revision: D17961209

fbshipit-source-id: 2a0d609ac4d3c4815b26789551a4c51bcf91dea4
2019-10-16 17:53:15 -07:00
Andres SuarezandFacebook Github Bot aee88b6843 Tidy up license headers [3/n]
Summary: Changelog: [General] [Fixed] - License header cleanup

Reviewed By: yungsters

Differential Revision: D17952693

fbshipit-source-id: 8fcb8e58a2e04e7a3169f4d525bffc00835768e6
2019-10-16 10:06:34 -07:00
Andres SuarezandFacebook Github Bot 3b31e69e28 Tidy up license headers [2/n]
Summary: Changelog: [General] [Fixed] - License header cleanup

Reviewed By: yungsters

Differential Revision: D17952694

fbshipit-source-id: 17c87de7ebb271fa2ac8d00af72a4d1addef8bd0
2019-10-16 10:06:34 -07:00