Commit Graph

122 Commits

Author SHA1 Message Date
Joshua Gross 27fca36a9a Attempt to collate Remove/Delete mounting items
Summary:
Collapse many Remove/Delete mount items into a single batched item.

Since a delete is always preceded by a remove mountitem, we can batch these into one instruction. Since deletes tend to come in large blocks, it might make sense to batch many into a single instruction.

Reviewed By: mdvacca

Differential Revision: D17254631

fbshipit-source-id: abfd54cdb0bbb9a4c0880ec8e8bbd681367aecd4
2019-09-09 19:54:34 -07:00
Joshua Gross 21977f895a Log multi-line MountItems properly; log every MountItem in a BatchMountItem
Summary:
Log every item in a BatchMountItem. There's a lot of useful debug information being hidden there currently.

Changelog:
[Internal]

Reviewed By: mdvacca

Differential Revision: D17254629

fbshipit-source-id: c72f0aa8506059da5225ebead24d3f8ead5bdebd
2019-09-09 19:54:33 -07:00
Joshua Gross 898124541c Support sendAccessibilityEvent in Fabric
Summary: Support for `sendAccessibilityEvent` in the FabricUIManager.

Reviewed By: shergin

Differential Revision: D17142507

fbshipit-source-id: 5c131d7caa1e4189fd41ecfb558d0027394b6a15
2019-08-30 19:04:14 -07:00
Joshua Gross 44bfc4be44 Support for UpdatePaddingMountItem
Summary: Some views (TextInput!) need padding props.

Reviewed By: mdvacca

Differential Revision: D17081799

fbshipit-source-id: 4f5d6a139bb4dd878f90af0ed4a30fe3810e3429
2019-08-27 19:00:11 -07:00
David Vacca 0e067fd23b Implement JS Responder Handler in Fabric Android
Summary: This diff implements the JSResponderHandler in Fabric Android code

Reviewed By: JoshuaGross

Differential Revision: D16543438

fbshipit-source-id: 13680f77a5368e8ba1180383a5f9fb7d7330b90a
2019-08-02 16:38:45 -07:00
David Vacca 470ace0932 Expose JSResponderHandler API in Fabric UIManager
Summary:
This diff adds the new API required to implment JSResponderHandler in FabricUIManager
The new API differs from the old API, but since setJSResponder is called ONLY from JS it's not necessary to have this method as part of UIManager interface.

Reviewed By: JoshuaGross

Differential Revision: D16543440

fbshipit-source-id: ca4bd4c1e4df706cda0eb16798e01f3350558d06
2019-08-02 16:38:44 -07:00
Joshua Gross bf5e73e46c Always pass props and state to Create mount item
Summary: For Litho interop and to resolve T47926405, always pass props and state to Create mount item so that any ViewManager can create view instances with knowledge of initial props and state.

Reviewed By: mdvacca

Differential Revision: D16554082

fbshipit-source-id: 3b19a43347b0fa201a054eec60e82fb77cad3625
2019-07-29 18:15:03 -07:00
Emily Janzer 7244bae47d Rename addRootView to startSurface
Summary: I'm only renaming the new `addRootView` that I added (which takes the moduleName, and uses startSurfaceWithConstraints), since the other one implements the UIManager interface method that's shared with paper.

Reviewed By: shergin

Differential Revision: D16432425

fbshipit-source-id: 392af42690052551504676df776bac6d1a968785
2019-07-24 20:15:39 -07:00
Joshua Gross c075a240cd Granularly track perf of Fabric
Summary: Enable granular perf measurements under Fabric.

Reviewed By: mdvacca

Differential Revision: D16021797

fbshipit-source-id: c25a8f7cebf53abfcfc39c8f6d50900813214abb
2019-07-20 01:57:20 -07:00
Emily Janzer 305058178e Create binding for unmountComponentAtNode in bridgeless mode
Summary: Right now we register ReactFabric as a callable module with the bridge so that we can call `ReactFabric.unmountComponentAtNode` in `ReactInstanceManager.detachViewFromInstance`. In bridgeless mode we don't have callable modules, so I'm just setting a global variable that can be called from C++ instead. Using this in a new `unmount` method in FabricUIManager.

Reviewed By: shergin, mdvacca

Differential Revision: D16273720

fbshipit-source-id: 95edb16da6566113a58babda3ebdf0fc4e39f8b0
2019-07-18 14:14:57 -07:00
Emily Janzer 5f8c129f19 Remove unused removeRootView() method from FabricUIManager
Summary:
FabricUIManager.removeRootView() isn't currently used, removing it from the UIManager interface.

It looks like this is called from JS in paper renderers, but not Fabric, so we should be good to delete it.

Reviewed By: shergin, mdvacca

Differential Revision: D16275118

fbshipit-source-id: b8f3ae1dc7574ce17d8cc9e7fee72ef5dcc9b323
2019-07-17 11:05:33 -07:00
David Vacca b1b6501ac9 NIT: rename FabricUIManager.scheduleMountItems -> FabricUIManager.scheduleMountItem
Summary: The method FabricUIManager.scheduleMountItems receives only one MountItem, is makes more sense to be called FabricUIManager.scheduleMountItem

Reviewed By: JoshuaGross, makovkastar

Differential Revision: D16062749

fbshipit-source-id: a27063be33b644af83ede6a9198edbfb1c3296e1
2019-07-02 14:47:22 -07:00
David Vacca d07ab35bfb Expose LayoutDirection to Fabric android
Summary: This diff exposes LayoutDirection as part of UpdateLayoutMountItem

Reviewed By: JoshuaGross

Differential Revision: D16060521

fbshipit-source-id: 163bf2a0bdca62dcecb03a8aaa2f4bf595b18c8f
2019-07-02 14:47:21 -07:00
David Vacca 6eec39313d Deprecate receiveCommand method for INT commands
Summary:
This diff deprecates:

```
  public void receiveCommand(int reactTag, int commandId, Nullable ReadableArray commandArgs) {

```
in favor of:

```
  public void receiveCommand(int reactTag, String commandId, Nullable ReadableArray commandArgs) {
```

Reviewed By: JoshuaGross, TheSavior

Differential Revision: D16019254

fbshipit-source-id: 61efefe5d5c43f9b24b729f17229725b87b60a1f
2019-07-02 14:47:20 -07:00
David Vacca 59d85fbf0b Back out "[Fabric][Android] Force setConstraints to run in the JS Thread"
Summary: Original commit changeset: 6665a9388a6a

Reviewed By: fkgozali

Differential Revision: D15889338

fbshipit-source-id: 9acb13bc811446aae61bd9c91a9c427aa5bb0296
2019-07-02 14:47:20 -07:00
Oleksandr Melnykov 6c0f73b322 Format Java code in xplat/js/react-native-github
Summary:
This diff formats the Java class files inside xplat/js/react-native-github. Since google-java-format was enabled in D16071401 we want to codemode the existing code so that users don't have to deal with formatter lint noise at diff-time.

```arc f --paths-cmd 'hg files -I "**/*.java"'```

drop-conflicts

Reviewed By: cpojer

Differential Revision: D16071725

fbshipit-source-id: fc6e3852e45742c109f0c5ac4065d64201c74204
2019-07-02 04:16:46 -07:00
Eli White 3cae6fa950 RN Android: Support View Manager Commands that are strings
Summary:
Right now JS triggers a view manager command with the following code:

```
UIManager.dispatchViewManagerCommand(
  ReactNative.findNodeHandle(this),
  UIManager.getViewManagerConfig('RCTView').Commands.hotspotUpdate,
  [destX || 0, destY || 0],
);
```

As we want to get rid of calls to UIManager, we need to stop looking for the integer defined in native from JavaScript. We will be changing methods like this to be:

```
UIManager.dispatchViewManagerCommand(
  ReactNative.findNodeHandle(this),
  'hotspotUpdate',
  [destX || 0, destY || 0],
);
```

We need to support ints and Strings to be backwards compatible, but ints will be deprecated.

Reviewed By: shergin

Differential Revision: D15955444

fbshipit-source-id: d1c488975ae03404f8f851a7035b58a90ed34163
2019-06-24 18:47:16 -07:00
David Vacca 42e35b3b56 Add extra logs in FabricUIManager
Summary: This diff adds extra logging in FabricUIManager, this will be useful to debug production issues

Reviewed By: JoshuaGross

Differential Revision: D15907520

fbshipit-source-id: 94e16444af3c023b6c4837c4797404d3debe8e95
2019-06-21 11:52:56 -07:00
Emily Janzer 0d971f97d5 Fix weird formatting in FabricUIManager
Summary: I added this function in D15810990, not sure why lint didn't complain about this...

Reviewed By: zackargyle

Differential Revision: D15880129

fbshipit-source-id: 4d207ba26be46186dc3904c82d82a4a83d4d4eb7
2019-06-18 12:09:47 -07:00
David Vacca f43039da87 Force setConstraints to run in the JS Thread
Summary: This diff forces the method: scheduler.constraintSurfaceLayout to run on the JS thread.

Reviewed By: JoshuaGross

Differential Revision: D15845768

fbshipit-source-id: de2aa69f301770aaf6cb7c3f5670548a3b6110df
2019-06-17 21:42:28 -07:00
Emily Janzer 1de206f36f Pass layout constraints in to startSurface()
Summary: Scheduler.startSurface accepts LayoutConstraints and LayoutContext, but for some reason we don't use these on Android. This diff adds new methods to Binding and FabricUIManager to start a surface with the provided measurespecs. I created new methods to avoid affecting the functionality of any surfaces already using Fabric, but if we want this behavior everywhere then I can just add it to the existing `addRootView` and `startSurface`.

Reviewed By: JoshuaGross, shergin

Differential Revision: D15810990

fbshipit-source-id: 6cd9a58b125461f91253458905405298cfb723ce
2019-06-17 13:03:05 -07:00
David Vacca f95a21539a Create a ReactFeatureFlag to enabled logging in Fabric
Summary: Easy diff to create a ReactFeatureFlag to enabled logging in Fabric

Reviewed By: JoshuaGross

Differential Revision: D15803582

fbshipit-source-id: d735f24850bddf43c27b97d006100cbb8f0cc6e3
2019-06-14 02:52:55 -07:00
Joshua Gross b9d26bbb5b Enable debug FabricUIManager logging for everyone
Summary: Temporarily turn on debug FabricUIManager to gather diagnostics.

Reviewed By: mdvacca

Differential Revision: D15779389

fbshipit-source-id: b38c1a363dbbad9c7dcf6bdbc3f47aff1a834f2f
2019-06-12 07:41:26 -07:00
Emily Janzer 298f59c5d3 Use startSurface on Android
Summary:
We currently have two different codepaths for actually rendering a surface with Fabric on iOS and Android: on iOS we use Fabric's `UIManagerBinding.startSurface` to call `AppRegistry.runApplication`, but on Android we don't; instead we use the same codepath as paper, calling `ReactRootView.runApplication`.

This diff does a few different things:
1. Unify iOS and Android by removing the `#ifndef` for Android so that we call `startSurface` for both
2. Pass through the JS module name on Android so that this actually works (it currently passes in an empty string)
3. Remove the call to `ReactRootView.runApplication` for Fabric so that we don't end up doing this twice
4. Copy over some logic that we need from `ReactRootView.runApplication` (make sure that root layout specs get updated, and that content appeared gets logged)

Reviewed By: mdvacca

Differential Revision: D15501666

fbshipit-source-id: 5c96c8cf036261cb99729b1dbdff0f7c09a32d76
2019-05-28 12:23:00 -07:00
David Vacca cb1a28c859 Remove jsi package from fabric android
Summary: Refactor of packages of RN Android

Reviewed By: JoshuaGross

Differential Revision: D15457141

fbshipit-source-id: a291f7e1ca8e0be3e93daf9c34161c8f1fdbafac
2019-05-24 11:30:29 -07:00
David Vacca bbf1a7d085 Back out "[Venice][Fabric] Use startSurface on Android"
Summary: Original commit changeset: 4a506a589108

Reviewed By: ejanzer

Differential Revision: D15497094

fbshipit-source-id: 47e5d0c3c69cc56cc3dd56d28e23e1db5b562fa4
2019-05-24 11:30:29 -07:00
Emily Janzer f23da3aeb0 Use startSurface on Android
Summary:
Right now calling FabricUIManager.addRootView() doesn't actually start running the application on Android. This diff:

1. Removes the #ifndef so that we actually call UIManagerBinding.startSurface() on Android
2. Passes through the JS module name from addRootView so we can render the surface (falls back to an empty string if not provided, which is the current behavior)
3. Adds an option for starting the surface using `RN$SurfaceRegistry` instead of `AppRegistry`, if that global property has been defined in JS. This is used for Venice (bridgeless RN)

Reviewed By: shergin

Differential Revision: D15366200

fbshipit-source-id: 4a506a589108905d4852b9723aac6fb0fad2d86e
2019-05-23 13:47:30 -07:00
Joshua Gross b05761f1bb Pass State to preallocateView and createView methods whenever possible
Summary:
For some components, we will have state as soon as the ShadowNode is created that may be meaningful. In those cases, ViewManagers should be able to use State to create or preallocate views.

FB: This will be used in following diffs for Litho support.

Reviewed By: mdvacca

Differential Revision: D15343702

fbshipit-source-id: 8fd672251cb88dea662b5cae5a9efc96877d28a9
2019-05-21 15:05:18 -07:00
David Vacca 563e0bce97 Refactor sComponentNames Map out of FabricUIManager
Summary:
Easy diff to refactor the sComponentNames map out of the FabricUIManager class.
This is a necessary clean-up to perform a slightly major refactor of the Fabric classes

Reviewed By: JoshuaGross

Differential Revision: D15421769

fbshipit-source-id: 3be73a6e20b338c8cea23ef0c88db417df7e3aa9
2019-05-20 15:43:32 -07:00
David Vacca 3b8fc8b10a Remove warnings
Summary: Easy diff to remove warnings in FabricUIManager

Reviewed By: JoshuaGross

Differential Revision: D15421771

fbshipit-source-id: 647391a0826272d0bc9320196fc8b3cb80eecfac
2019-05-20 15:43:31 -07:00
David Vacca 016afe26bc Adding @Nullable into Fabric UI Manager
Summary: cleanup diff to add Nullable annotations into Fabric UI Manager classes

Reviewed By: shergin

Differential Revision: D15365295

fbshipit-source-id: b9d39addd5b71377389a7687ea3176cd4359c5ba
2019-05-16 13:00:25 -07:00
Joshua Gross 04782ff57a Send ReactNative C++ State to Android measure API
Summary:
The `measure` API receives LocalData and Props, it should also receive State.

This will also be used in future diffs.

Reviewed By: mdvacca

Differential Revision: D15325182

fbshipit-source-id: 6cb46dd603ce7d46673def16f0ddb517e2cf0c4f
2019-05-14 14:22:10 -07:00
Joshua Gross 4a1d532674 Convert FabricUIManager.measure params to floats
Summary: Convert FabricUIManager.measure params to floats. Currently we convert parameters to ints across the JNI boundary, and then back to floats several times in Java. This is unnecessary and actually makes measurements trickier. The new implementation uses floats across the JNI boundary and uses Float.POSITIVE_INFINITY to represent unconstrained values, which is consistent with Fabric C++ as well.

Reviewed By: shergin, mdvacca

Differential Revision: D15176108

fbshipit-source-id: cf849b3773007637f059279460163872f300a4aa
2019-05-03 12:36:28 -07:00
David Vacca abbeac9bb3 Refactor mapping of ComponentNames in FabricUIManager
Summary: The map of sComponentNames ONLY contains the names of components that are different between JS and Android. This diff adds a method to unify the way we use this map.

Reviewed By: shergin

Differential Revision: D15076549

fbshipit-source-id: 9df750dca305e55cb44037bc63f3ebb6476c8b81
2019-04-30 15:05:02 -07:00
David Vacca 532afbde6e Add support for Modal in Android
Summary: This diff implements Modal for Android in Fabric

Reviewed By: JoshuaGross

Differential Revision: D15069863

fbshipit-source-id: 4171c9590a4a7a1f4f80cf9b08ea9a9e94b9097a
2019-04-30 15:05:01 -07:00
David Vacca f98880b1a3 - Fix mounting of views when a re-order happen caused by changes in viewflattening
Summary:
This diff fixes a bug that is reproducible when a view is reordered in a different level of hierarchy in the react tree.
Even if this is not supported by react, this can still happen because of viewFlattening.

Reviewed By: shergin

Differential Revision: D14817452

fbshipit-source-id: 13425b0e6a280affe681e80b4a6daa17ee56251a
2019-04-30 01:48:25 -07:00
David Vacca 261cda92de Temporarly ignore exception when running animations
Summary: Running animations sometimes fail in Android. we are ignoring those failures temporarly

Reviewed By: fkgozali

Differential Revision: D14884510

fbshipit-source-id: 66d6113e12b1bd67e8bcc564943b423825b4cea6
2019-04-10 17:31:32 -07:00
Joshua Gross e34761ff25 Android plumbing for State and LocalData update mount items
Summary: Android plumbing for State and LocalData update mount items. See other commits in stack for usage

Reviewed By: mdvacca

Differential Revision: D14663522

fbshipit-source-id: 5604a6a9af292805e9ce46c68e5ce7472eef0218
2019-04-06 00:52:43 -07:00
David Vacca da44010b59 Implement AxialGradientView in Fabric Android
Summary: This diff integreates AxialGradientView in Fabric Android

Reviewed By: shergin

Differential Revision: D14631690

fbshipit-source-id: 54785466ab4cd7251c6667c8dc12d69d9d194832
2019-04-03 17:57:24 -07:00
David Vacca 2777c6572a Pre-allocate Fabric views even when React is running in the UI Thread
Summary: Before D14297477, the pre-allocation of views was ONLY necessary when react was running in the JS Thread, this is because the batch of mount items used to contain mount items for creation of views. After D14297477, views are only created during pre-allocation, that means that pre-allocation of views need to be trated the same way independently the thread where it is running.

Reviewed By: shergin

Differential Revision: D14714933

fbshipit-source-id: 7bd19cd33b624a5b0daaafabb476bb06707eea17
2019-04-03 17:31:37 -07:00
David Vacca ed0085ca1b Refactor mapping of FabricComponentNames
Summary: Simple diff that refactors the usage of the sComponentNames to not require components to be part of the mapping when the name in JS is the same as the name in Native side.

Reviewed By: shergin

Differential Revision: D14594659

fbshipit-source-id: d1948b27e04686fefbf9b6e2b06d4f9317b97062
2019-03-29 00:43:31 -07:00
David Vacca 0c17992485 Add logs in mounting layer
Summary: Adds debug logging in FabricUIManager and the mounting layer of Fabric.

Reviewed By: shergin

Differential Revision: D14594521

fbshipit-source-id: a5c0ee39e1bac8a340849ca3e044694cbee5427e
2019-03-29 00:43:31 -07:00
David Vacca d53200a4c3 ReactTTRCRenderFlag component in Fabric android
Summary: This diff migrates ReactTTRCRenderFlag component to Fabric android

Reviewed By: fkgozali

Differential Revision: D14591212

fbshipit-source-id: c10de2ab4a77af985853da6d3fe7a7c6a1bc7a1e
2019-03-23 22:53:23 -07:00
Yuan Du a3296ff40f Revert D14572430: [Fabric][Android] ReactTTRCRenderFlag component in Fabric android
Differential Revision:
D14572430

Original commit changeset: 0e7c6cb5520b

fbshipit-source-id: 2cde5c9316c055c3836aab656a06c508f3e468af
2019-03-23 13:08:20 -07:00
David Vacca 819c584c46 ReactTTRCRenderFlag component in Fabric android
Summary: This diff migrates ReactTTRCRenderFlag component to Fabric android

Reviewed By: shergin

Differential Revision: D14572430

fbshipit-source-id: 0e7c6cb5520be44221939b0e711269b84f4657dc
2019-03-23 12:10:00 -07:00
David Vacca bd7df8bdaa Remove BatchedExecutionTime from Fabric metrics
Summary: This diff removes BatchedExecutionTime from the metrics that are measured in Fabric. This does not add much value and it is not easy to compare against current version of RN

Reviewed By: shergin

Differential Revision: D14541976

fbshipit-source-id: c488e0951815306a978dd7a4246ec8a16d663218
2019-03-23 00:38:57 -07:00
David Vacca 8d5ac8de76 Migration of RN-Android OSS tests to Android X
Summary:
This diff migrates RN to AndroidX.
As part of this diff I disabled few tests in RNAndroid OSS that will be re-enabled this week. As part of the refactor of BUCK files in OSS

Reviewed By: shergin

Differential Revision: D14200097

fbshipit-source-id: 932fcae251d1553e672acd67ecd0e703dcb364aa
2019-03-17 08:13:30 -07:00
David Vacca d451c03284 Remove createMountItem code
Summary:
Now that pre-allocation of views update props, we can just force the execution of "pre-allocation" instead of "create" mount item.

This diff removes the methods that were used by view creation

This way we reduce the amount of mountItems that are created during commit phase.
This should improve TTI (I'm running a MobileLab)

Reviewed By: shergin

Differential Revision: D14297477

fbshipit-source-id: a100bab798467e9f0fa9773e0206ba1ded472298
2019-03-03 15:51:32 -08:00
David Vacca 7720613bda Add systraces for pre-mountItems executed during commit
Summary:
Now that pre-allocation of views update props, we can just force the execution of "pre-allocation" instead of "create" mount item.

This diff adds systraces to the execution of pre-mountItems during commit

This should reduce the amount of mountItems that are created during commit phase.
This should improve TTI (I'm running a MobileLab)

Reviewed By: shergin

Differential Revision: D14297478

fbshipit-source-id: d8e515d34cf6edacce53c0903f74a08029259f6f
2019-03-03 15:51:32 -08:00
David Vacca 861e406097 Force execution of all pre-allocation of views before execution of mount items
Summary:
Now that pre-allocation of views update props, we can just force the execution of "pre-allocation" instead of "create" mount item.

This should reduce the amount of mountItems that are created during commit phase.
This should improve TTI (I'm running a MobileLab)

Reviewed By: shergin

Differential Revision: D14297476

fbshipit-source-id: 3ade662848ed836dc3221abe78611bb4a2b94e00
2019-03-03 15:51:32 -08:00