Commit Graph
572 Commits
Author SHA1 Message Date
Chatura AtapattuandFacebook GitHub Bot 2c2b831716 Apply new buildifier fixes
Summary: Changelog: [Internal]

Reviewed By: zertosh

Differential Revision: D30407205

fbshipit-source-id: 022a02829d59a900764b228afb9856ed1ba2cf8c
2021-08-19 20:01:02 -07:00
Joshua GrossandFacebook GitHub Bot 10cd2730af Ship "Disable 'virtual view' preallocation" experiment in code
Summary:
The impact of this has proven impressive, and safe. Ship in code and remove feature-flag.

Changelog: [Internal]

Reviewed By: philIip

Differential Revision: D30269561

fbshipit-source-id: 9bb72567cfd881928d14d9bee43cf32b390664fb
2021-08-18 21:19:37 -07:00
Andrei ShikovandFacebook GitHub Bot 22f81b203f Clean up Fabric startSurface API used in Venice
Summary:
Update FabricUIManager methods for `SurfaceHandler` to start usual rendering or prerendering based on presence of the view instead of using two methods with same logic.

Changelog: [Internal]

Reviewed By: sshic

Differential Revision: D30346502

fbshipit-source-id: 297f2b4a16dc7af7c36379252bd73e6dc953ff59
2021-08-18 12:44:41 -07:00
Samuel SuslaandFacebook GitHub Bot 22bc8c23b7 Clean up AsyncEventBeatV2 experiment
Summary:
changelog: [internal]

This experiment is abandoned. It regressed engagement metrics.

Reviewed By: JoshuaGross

Differential Revision: D30303383

fbshipit-source-id: 1d86eb5c7c257d4b369632007d0bda23e80c88ab
2021-08-16 04:35:02 -07:00
Ramanpreet NaraandFacebook GitHub Bot cbec66ef92 Rename ReactSoftException to ReactSoftExceptionLogger
Summary:
ReactSoftException makes it seem like the class is an Exception, when it's actually a logger. This rename I think is more appropriate.

Changelog: [Internal]

Reviewed By: JoshuaGross

Differential Revision: D30251735

fbshipit-source-id: 550bd543388e698774ec31753200bd3f722d8c17
2021-08-11 13:29:42 -07:00
David VaccaandFacebook GitHub Bot cf717ffc19 Add TODOs to unify component names between JS - Android - iOS - C++
Summary:
EZ diff that adds a few TODOs to unify component names between JS - Android - iOS - C++
see task: T97384889

changelog: [internal] internal

Reviewed By: sammy-SC

Differential Revision: D30139942

fbshipit-source-id: 91f51d04e7e7ecba7f059f94a121be43d820647d
2021-08-05 18:35:52 -07:00
David VaccaandFacebook GitHub Bot 81167e0e80 Add documentation for FabricUIManager.getInspectorDataForInstance
Summary:
Add documentation for FabricUIManager.getInspectorDataForInstance

changelog: [internal] internal

Reviewed By: sammy-SC

Differential Revision: D30095818

fbshipit-source-id: dfe8590598099e7581460ca45bc0e779690463a6
2021-08-04 11:39:17 -07:00
David VaccaandFacebook GitHub Bot 43a91d03eb Extend getInspectorDataForInstance to return props
Summary:
This diff extends the FabricUIManager.getInspectorDataForInstance to return the props of the React Native component associated to the view passed as a parameter.

changelog: [internal] internal

Reviewed By: sammy-SC

Differential Revision: D30095406

fbshipit-source-id: 50fdba6636a1f5042dbc113e341c3cb2534a1b04
2021-08-04 11:39:17 -07:00
Pieter De BaetsandFacebook GitHub Bot de255528e0 Allow resolving view from FabricUIManager
Summary: Changelog: [Internal]

Reviewed By: JoshuaGross

Differential Revision: D30043188

fbshipit-source-id: d8675754b29fb58a28a06777f602098da6dbc27f
2021-08-03 10:55:47 -07:00
Samuel SuslaandFacebook GitHub Bot 3ed3d34987 Correct error message in getViewState method
Summary:
Changelog: [internal]

Here, getting `viewState` has failed, not its view property.

Reviewed By: mdvacca

Differential Revision: D30042652

fbshipit-source-id: 42831b577f17db1f64860e68be33870f5be27207
2021-08-02 09:36:33 -07:00
David VaccaandFacebook GitHub Bot cdce14f670 Implement PlatformColor in Fabric Android
Summary:
This diff implements PlatformColor in Fabric Android

changelog: [internal] internal

Reviewed By: JoshuaGross

Differential Revision: D29841461

fbshipit-source-id: 63a523626b021c634bc399e749b639b55730391a
2021-07-30 22:16:08 -07:00
Joshua GrossandFacebook GitHub Bot 175b1ea636 Pass PropsParserContext to prop parsing layer
Summary: Changelog: [internal]

Reviewed By: mdvacca

Differential Revision: D29921232

fbshipit-source-id: ba045f545b564aedf1b287045a0e75428de30a0f
2021-07-28 20:18:20 -07:00
Joshua GrossandFacebook GitHub Bot 09b9422516 Pass context through to all prop parser (core changes)
Summary:
Unfortunately, parsing some props requires stateful context - namely, PlatformColor on Android. We explored several different options but they all seemed inferior to the approach of using ContextContainer, and most would require using global state.

By introducing this change everywhere as early as possible, we can avoid later pain. It is likely that some prop, on some platform, will require this mechanism. We'll be ready for it!

Because we can pass a constref of the ContextContainer through to all props and because the context and context data is never retained by prop parsers, perf and memory hit should be ~0.

This diff contains core changes only. Leaf changes to all props structs and conversions files will be in next diff(s).

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D29838789

fbshipit-source-id: f5090e7f02eb6e8fbe0ef4dd201e7d12104a3e3c
2021-07-28 20:18:20 -07:00
Lulu WuandFacebook GitHub Bot 7929551623 Make mHybridData thread safe for EventEmitterWrapper
Summary:
In T94154173, when calling ```EventEmitterWrapper->invoke()```, hybrid function ```invokeEvent``` is null, even if we checked that ```mHybridData``` is valid before calling ```invokeEvent```.

**Theory:**

```invoke()``` is called from ```mqt_js``` thread, ```desotry()``` is called from ```main``` thread, which cause multi-thread access of```mHybridData```.

So if ```desotry()``` is called after ```isValid()``` check and before calling ```invokeEvent()```, ```invokeEvent``` could be destroyed and is null.

I can reproduce with above theory:

{F633411001}

**Fix:**

Make functions synchronized so ```mHybridData``` can be thread safe.

Changelog:
[Android][Fixed] - Make mHybridData thread safe

Reviewed By: RSNara

Differential Revision: D29792453

fbshipit-source-id: 8b4c754d53ece933be7b2cf99c6cd026b39e24ad
2021-07-26 02:03:41 -07:00
David VaccaandFacebook GitHub Bot 43cdd84a22 Expose new API FabricUIManager.getInspectorDataForInstance
Summary:
This diff exposes a new API in FabricUIManager called getInspectorDataForInstance. The goal of this method is to return React metadata for a Native view.

This data will be used from partner teams to build tools that uses React metadata in RN

Data returned from React: P429701924

changelog: [internal] internal

allow-large-files

Reviewed By: JoshuaGross

Differential Revision: D29747864

fbshipit-source-id: 8cb55573be08cb530f7e3c83eed8b4fcf43e7781
2021-07-24 09:12:44 -07:00
Yuqing DuanandFacebook GitHub Bot 998cadd523 integrate RCTImpressionTrackingView into Fabric on Android
Summary:
This diff integrates RCTImpressionTrackingView into Fabric on Android

Following
https://www.internalfb.com/intern/wiki/React_Native/Migration_of_RN_Renderer_(Fabric)/
and
https://fb.quip.com/T8AtArEVcb0Z

Changelog: [Internal]

Reviewed By: bearzx

Differential Revision: D29804625

fbshipit-source-id: 16e89d629390093ace51d3b25725c37a49a08a39
2021-07-21 16:23:27 -07:00
Joshua GrossandFacebook GitHub Bot 24d91268b6 Add systrace sections to core
Summary:
I'm hunting down the source of a perf regression on a screen and think that having these systrace sections could be handy for this and future investigations.

Changelog: [internal]

Reviewed By: mdvacca

Differential Revision: D29802969

fbshipit-source-id: f4030261da8888ddeb32ae41b9cf2b25af6a5583
2021-07-20 19:28:06 -07:00
CodemodService FBSourceGoogleJavaFormatLinterBotandFacebook GitHub Bot 2970de9400 Daily arc lint --take GOOGLEJAVAFORMAT
Reviewed By: zertosh

Differential Revision: D29729648

fbshipit-source-id: aae1163fce96129d4953e9faa839b85147117a8e
2021-07-16 04:41:51 -07:00
Joshua GrossandFacebook GitHub Bot 4f38cb30b8 ][Fabric] Simplify init, always create new EventEmitter for Fabric
Summary:
Always create a new EventEmitter specifically for Fabric when initializing the Fabric JSI module.

Previously, we were (sometimes!) reusing the EventEmitter being used for the old renderer and they were shared. There doesn't seem to be a compelling reason to continue doing this, and Fabric has optimized EventEmitters that we can use instead.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D29724537

fbshipit-source-id: 1b2c7a7d656e3fb86ddf98a6cf0f2e67dcbf8aef
2021-07-15 17:42:13 -07:00
Joshua GrossandFacebook GitHub Bot 8ed4068381 Don't pass on receiveEvent after CatalystInstance destruction
Summary:
It is possible for receiveEvent to be called concurrently with/after destruction of FabricUIManager. Drop events if we are able to detect that case.

Changelog: [Internal]

Reviewed By: sshic

Differential Revision: D29596271

fbshipit-source-id: 1fa50d9c3cff0bf578316d905966e1bdfffe94d1
2021-07-08 11:36:50 -07:00
Joshua GrossandFacebook GitHub Bot 41ecccefcf Immediately destroy EventEmitterWrapper on update instead of waiting for GC
Summary:
Immediately destroy EventEmitterWrapper on update instead of waiting for Java GC. This can resolve JSI::~Pointer deallocation crashes by clearing out EventEmitter and therefore EventTarget sooner, before RN teardown.

Changelog: [Internal]

Reviewed By: fkgozali

Differential Revision: D29415386

fbshipit-source-id: 05517bfd9e2cc2bd1b8c58d4f84c84f6f547268a
2021-06-26 12:21:16 -07:00
Joshua GrossandFacebook GitHub Bot f33e6f08b2 Delete unused struct
Summary:
This struct is no longer used.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D29312925

fbshipit-source-id: b766014ecb7b6c5dc96d54a94d465e104e292f5f
2021-06-22 15:42:01 -07:00
Luna WeiandFacebook GitHub Bot 77366cd869 Remove Picker from OSS
Summary: Changelog: [General][Removed] - Remove Picker code from Android

Reviewed By: ShikaSD

Differential Revision: D29123164

fbshipit-source-id: 4471ea5f52885735ead07a656452ed5ef2bff65b
2021-06-21 23:00:42 -07:00
Samuel SuslaandFacebook GitHub Bot 130b0f69ee Move RuntimeScheduler initialisation to the start of the runtime
Summary:
Changelog: [internal]

Reland of D29131766 (https://github.com/facebook/react-native/commit/18165367b0347fc46cd52a6ac00afcf62d05cb30) which had to reverted because it caused binary size regression in instagram.

Size check for `automation_instagram_stablesize_release` and `automation_igtv_release`
{F626711916}

Reviewed By: JoshuaGross

Differential Revision: D29263302

fbshipit-source-id: cc8f5609ebaed9ddf666f7c57cdbf3dbf77a8f78
2021-06-21 16:15:11 -07:00
Joshua GrossandFacebook GitHub Bot 006f5afe12 Guard against unsafe EventEmitter setup and teardown
Summary:
Because of T92179998, T93607943, and T93394807, we are still seeking resolution to tricky crashes wrt the use of EventEmitters.

I believe the recent spike is because of two recent changes: we pass in EventEmitters earlier, during PreAllocation; and we clean them up earlier, during stopSurface, to avoid jsi::~Pointer crashes.

Additionally, the gating previously added around the PreAllocation path was incorrect and led to more nullptrs being passed around as EventEmitters.

To mitigate these issues:

1) I am adding/fixing gating to preallocation and early cleanup paths
2) I am making EventEmitterWrapper more resilient by ensuring EventEmitter is non-null before invoking it.
3) I am making sure that in more cases, we pass a non-null EventEmitter pointer to Java.
4) I am backing out the synchronization in EventEmitterWrapper (java side) as that did not resolve the issue and is a pessimisation

There are older, unchanged paths that could still be passing in nullptr as the EventEmitter (Update and Create). As those have not changed recently, I'm not going to fix those cases and instead, we can now rely on the caller to ensure that the EventEmitter is non-null before calling.

Changelog: [internal]

Differential Revision: D29252806

fbshipit-source-id: 5c68d95fa2465afe45e0083a0685c8c1abf31619
2021-06-19 22:57:12 -07:00
Joshua GrossandFacebook GitHub Bot 499ac1f14b Resolve race condition in usage/teardown of EventEmitterWrapper
Summary:
In stopSurface we destroy these EventEmitters which is not a threadsafe operation. Wrap usage and destruction of these wrappers to prevent crashes.

This crash is caused by D29020768 (https://github.com/facebook/react-native/commit/25e8fbe8ffa1c91522e91819a781434093f8b759) which was landed to fix T92179998, which was in turn caused by D28938637 (https://github.com/facebook/react-native/commit/ac6d1982f4df55eca4da1cfc588dadc35bc005d0).

Changelog: [internal]

Reviewed By: sammy-SC, mdvacca

Differential Revision: D29239828

fbshipit-source-id: 6be5acf4a24b82c75c13fe9f1d16a87cce5b7e00
2021-06-18 14:22:43 -07:00
Joshua GrossandFacebook GitHub Bot 225ff72d2d Temporary mitigation for T93398735 crash: swallow PreAllocate crashes
Summary:
Because of the "disable preallocation of virtual views" experiment, for some reason, some views are being preallocated multiple times instead of not being preallocated at all.

This isn't really a problem for CreateView, and Preallocate is actually more strict here than it needs to be. I'm going to downgrade this to a soft error and will continue to analyze more. This is more of a perf issue than a correctness issue, so this should be fine.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D29206416

fbshipit-source-id: 9490a1a705c2b39def3a3e56086634439543515e
2021-06-17 17:28:32 -07:00
Samuel SuslaandFacebook GitHub Bot 475de7982e Call invokeUnique if event can be coalesce
Summary:
Changelog: [internal]

We should be calling invokeUnique if event can be coalesced, not the other way around.

Reviewed By: JoshuaGross

Differential Revision: D29194528

fbshipit-source-id: 36e4ae71254420ef47deea436cad20eec09712fc
2021-06-17 11:50:03 -07:00
Samuel SuslaandFacebook GitHub Bot a9f1e23d38 Check if instance is valid before calling C++
Summary:
Changelog: [internal]

Why does the crash happen?
We call method on invalid address. We crash on `std::weak_ptr::lock` because that's the first accessed ivar.
In D29020768 (https://github.com/facebook/react-native/commit/25e8fbe8ffa1c91522e91819a781434093f8b759), eventEmitter may be destroyed before an event is dispatched. Calling destroy on hybrid object destroys only C++ part.

Reviewed By: JoshuaGross

Differential Revision: D29194906

fbshipit-source-id: ae8d9d90aa8d98d69d29884e80d6b930b1e66870
2021-06-17 10:01:22 -07:00
Samuel SuslaandFacebook GitHub Bot 279fb3eedc Back out "Move RuntimeScheduler initialisation to the start of the runtime"
Summary:
Changelog: [internal]

Original commit changeset: cbc650f6fbce

Fix app size regression.

Reviewed By: julian-krzeminski

Differential Revision: D29162397

fbshipit-source-id: 54b344c2da631aaa704fd640cdb2a71239ea754f
2021-06-16 08:40:29 -07:00
Samuel SuslaandFacebook GitHub Bot 18165367b0 Move RuntimeScheduler initialisation to the start of the runtime
Summary:
Changelog: [internal]

RuntimeScheduler needs to be created and registered in the runtime before any JS is allowed to run. This diff moves the registration right after the runtime is initialised.

This diff removes funnelling of Fabric events through RuntimeScheduler. This will be added in subsequent diff to keep the complexity low.

Reviewed By: JoshuaGross

Differential Revision: D29131766

fbshipit-source-id: cbc650f6fbce95e4b9c2c9695e8e0aba5beac635
2021-06-15 17:35:32 -07:00
Samuel SuslaandFacebook GitHub Bot 741b4d4421 Remove RuntimeScheduler from SchedulerToolbox
Summary:
Changelog: [internal]

Remove `RuntimeScheduler` from `SchedulerToolbox` and all of its uses.
`RuntimeScheduler` needs to be allocated before `Scheduler` and therefore its presence in the toolbox is redundant.

Reviewed By: JoshuaGross

Differential Revision: D29134769

fbshipit-source-id: fa00c5dcc4b565d6941e6d742c6aefade37b31c4
2021-06-15 17:35:32 -07:00
Andrei ShikovandFacebook GitHub Bot a7adaf3062 Retry mounting items that were scheduled on view attach
Summary:
The mount items executed before the view attach can fail with the RetryableMountingLayerException, which we should either retry or skip the item. This change updates logic for such items to catch these exceptions.

Instead of passing `MountingManager` to execute the items, this change now passes a reference to the `MountItemDispatcher` (abstracted through interface to resolve cycle between the manager and dispatcher). The dispatcher executes the queue directly and schedules retry together with the next batch.

Changelog: [Internal]

Reviewed By: JoshuaGross

Differential Revision: D29068063

fbshipit-source-id: 04030b21db188d5617c3448322d25ba77d5fbb9f
2021-06-15 05:45:57 -07:00
Joshua GrossandFacebook GitHub Bot 883f4651bc Remove unused field
Summary:
This field doesn't serve a purpose anymore.

Changelog: [Internal]

Reviewed By: PeteTheHeat

Differential Revision: D29118454

fbshipit-source-id: b755a761eb7e9854d48c99dfedaf2e871f29d7f7
2021-06-14 19:44:09 -07:00
Joshua GrossandFacebook GitHub Bot e67007c928 Gate early EventEmitter update during PreAllocation behind feature flag
Summary:
This feature is still causing some number of crashes, though prod impact is not yet determined. For safety I'm adding a feature flag so we can disable this if necessary.

Changelog: [internal]

Reviewed By: kacieb

Differential Revision: D29117957

fbshipit-source-id: 3b19bac9dd00735f51f5c9cba606378b2a62975e
2021-06-14 19:31:32 -07:00
Joshua GrossandFacebook GitHub Bot f2e0b2f45f Fix crash in PreAllocation optimization
Summary:
PreAllocation currently always happens at revision 0 (after ShadowNode creation), and all CREATE mutations are triggered for ShadowNodes at revision 1 or higher (since CREATE mutations are generated by the differ, it means that all ShadowNodes have revision 1 or higher when CompleteRoot is called). This means that between PreAllocation and CREATE, we /always/ expect at least one clone.

It is possible for a node to be "non-view-forming" at revision 0, causing view preallocation to be skipped, and "view-forming" at revision 1 (causing the CREATE mutation to be thrown away, since all CREATE mutations of revision 0 or 1 are thrown away). This causes a crash. It is extremely marginal, but there are repros in the wild.

Thus, I'm introducing one new UIManager and Scheduler delegate method that allows the mounting layer to be notified of clones. If a clone from rev 0->1 results in a node going from non-view-forming to view-forming, we can preallocate then, as well.

This resolves this crash, and allows us to keep experimenting safely with this View PreAllocation optimization. I believe all edge-cases are accounted for.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D29043426

fbshipit-source-id: dff11d3140ded1cbb02a5518a3aeb52dc812cc50
2021-06-10 15:50:14 -07:00
Joshua GrossandFacebook GitHub Bot 25e8fbe8ff Ensure that EventEmitterWrapper is cleaned up as soon as a View is deleted
Summary:
In T92179998, there is a crash when an EventEmitterWrapper is deallocated after the JS VM is torn down, and the EventEmitterWrapper tries to free its JSI::Pointer reference (double-free).

To make sure this happens less/not at all, free EventEmitterWrappers on ViewState when a view is deleted, instead of waiting for all of RN to be torn down.

Changelog: [Internal]

Reviewed By: fkgozali

Differential Revision: D29020768

fbshipit-source-id: 9d72a23bc9966992ef56c1e3ee523405d4333194
2021-06-09 23:48:04 -07:00
Joshua GrossandFacebook GitHub Bot ac6d1982f4 Re-land: Pass in EventEmitter during View CREATE and Preallocation
Summary:
This is a re-land of D28810022 (https://github.com/facebook/react-native/commit/7e9c741146e1b3aa542ecfe138765e95ddddac3f), which was reverted due to T92179998. The fix is in D28938530. This issue could also be resolved by preventing more view preallocations (D28811419 (https://github.com/facebook/react-native/commit/8ca18f0b602a08cd9a5c9f6681bb5dc74e0d34f7)).

 ---

EventEmitter is not transmitted from C++ to Java until an UPDATE operation is enqueued.

Practically this usually happens "right away", but in the case of an Image component, especially, the EventEmitter could be missing while events are being fired from the native side (for example, loading events).

The fix is just to pass EventEmitter in sooner, in both Create and Preallocate. There should be no ill effect since EventEmitter is nullable anyway.

One potential side-effect: since Views can be PreAllocated and potentially never deallocated until StopSurface is called, this could result in more EventEmitter objects being leaked and retained from Java. I believe the fix is to remove PreAllocated Views more aggressively.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D28938637

fbshipit-source-id: c9e290a24ed15c28881e3eead4a5f580f66b288f
2021-06-07 12:16:12 -07:00
Joshua GrossandFacebook GitHub Bot 792acff149 Clean up EventEmitterWrapper on surface deallocation
Summary:
clean up EventEmitterWrapper on surface deallocation. Will resolve T92179998.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D28938530

fbshipit-source-id: f718945f52a652a4b79a7a376f052035e4f41edb
2021-06-07 12:16:12 -07:00
Joshua GrossandFacebook GitHub Bot e15f171080 Back out "Pass in EventEmitter during View CREATE and Preallocation"
Summary:
Original commit changeset: ae4c8b4eefe6

Reverting temporarily to resolve T92179998.

Changelog: [Internal]

Reviewed By: fkgozali, sammy-SC

Differential Revision: D28938467

fbshipit-source-id: a855c8f08f4826e0bb4b918f2dd3269f200787f5
2021-06-07 12:16:12 -07:00
Joshua GrossandFacebook GitHub Bot 3ba815228e Ship setJSResponder in code
Summary:
setJSResponder/clearJSResponder have been in use in prod for a while and are stable. Ship them in code.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D28889894

fbshipit-source-id: 1c42526cd890d528062eeb50761fc49cc6109d76
2021-06-04 11:56:13 -07:00
Joshua GrossandFacebook GitHub Bot 8ca18f0b60 Don't PreAllocate virtual views
Summary:
Virtual views that are flattened and don't "FormsView" on-screen should not be preallocated.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D28811419

fbshipit-source-id: 949dcbf4cf3791355c58af785603b35fa50f3f02
2021-06-02 12:49:49 -07:00
Joshua GrossandFacebook GitHub Bot fc2153cc43 Remove mounting-layer hack
Summary:
This hack should not be necessary. It should be fixed at Differ or LayoutAnimations level if there are existing issues there.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D28810021

fbshipit-source-id: 98b8d2ae9991ad527a3b3e90943d75063b2a4496
2021-06-02 12:49:49 -07:00
David VaccaandFacebook GitHub Bot 286fac5ad0 Delete eager initialization of Fabric classes
Summary:
I run an experiment and I verified that eager initialization of fabric classes is neutral and it's showing a regression in "marketplace:interface:metrics"
See: https://www.internalfb.com/intern/qe2/react_fabric_marketplace_home_android_universe/react_fabric_marketplace_home_eager_init_v1/analysis?control=test_no_eager_init&test=test_eager_init_classes

This diff removed the optimization and it cleans up the code

changelog: [internal] internal

Reviewed By: JoshuaGross

Differential Revision: D28815647

fbshipit-source-id: 2c9fe3875b1797d9a7def61e5ab97c2df2a462dd
2021-06-01 18:27:04 -07:00
Joshua GrossandFacebook GitHub Bot 7e9c741146 Pass in EventEmitter during View CREATE and Preallocation
Summary:
EventEmitter is not transmitted from C++ to Java until an UPDATE operation is enqueued. Practically this usually happens "right away", but in the case of an Image component, especially, the EventEmitter could be missing while events are being fired from the native side (for example, loading events).

The fix is just to pass EventEmitter in sooner, in both Create and Preallocate. There should be no ill effect since EventEmitter is nullable anyway.

One potential side-effect: since Views can be PreAllocated and potentially never deallocated until StopSurface is called, this could result in more EventEmitter objects being leaked and retained from Java. I believe the fix is to remove PreAllocated Views more aggressively.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D28810022

fbshipit-source-id: ae4c8b4eefe619d9a99fa5f90f612d6dd4880da5
2021-06-01 15:15:47 -07:00
Andrei ShikovandFacebook GitHub Bot 712bc6769b Log when item execution is delayed during mounting
Summary:
Adds logs to indicate that MountItem was queued instead of executed.
Also moves logging of preMount items to dispatcher for consistent logging with other items.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D28690203

fbshipit-source-id: 14d24f0bebb97a810127f5187b4d46f66b6c836f
2021-05-27 04:44:30 -07:00
Joshua GrossandFacebook GitHub Bot 5a9b6fc49b Simplify LockFreeEventDispatcherImpl further
Summary:
TL;DR: simplify and delete a bunch of stuff that shouldn't be necessary in Fabric.

I discovered that this event dispatcher (and the older one this is based on) is triple-queueing: we queue events into "staging", and then post "dispatch events" to only run /on the JS thread/. Even in Fabric. Then, each of these events is emitted into C++ where they are queued /again/! This refactor eliminates one more level of queueing - instead of scheduling dispatch for the JS thread, we just emit them directly to C++ when they're received in Java.

Unfortunately, the EventDispatcher is also used to drive AsyncEventBeat in C++:

1. EventBeatManager.onBatchEventDispatched: https://fburl.com/diffusion/qf6dyhsw
   In the C++ impl, it indirectly will drive the AsyncEventBeat/AsyncEventBeatV2.
2. onBatchEventDispatched is ONLY called from EventDispatcherImpl: https://fburl.com/codesearch/mxk8ifyj
3. Which is queued and only runs on the JS thread: https://fburl.com/codesearch/czvbst4u

This means the AsyncEventBeat is only ticked when the JS thread is free, and ticks will be skipped when the JS thread is occupied for long periods.

Now, in this refactor, when this class is used it will drive AsyncEventBeat on every UI tick. This is also potentially not correct. On iOS (Fabric), AsyncEventBeat is driven when the UI thread is "about to sleep".

For now I'm not going to worry about that detail - it is significant, but Fabric+Android is currently /not doing the right thing/ and it's not clear that we want to maintain iOS behavior. This is something we need to discuss further and figure out.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D28654033

fbshipit-source-id: b3cb9b706343c8dd3c4cf84f24388908c57e2138
2021-05-24 20:14:46 -07:00
Joshua GrossandFacebook GitHub Bot 0510821170 Replace EventDispatcherImpl with LockFreeEventDispatcherImpl
Summary:
EventDispatcherImpl uses synchronized blocks all over to make it thread-safe. I'm concerned about the perf implications of this and creating contention between JS and UI threads.

This is locked behind a feature flag.

Enabled only for Fabric in StaticViewConfig mode, and a feature flag, for now.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D28591331

fbshipit-source-id: ea8f93a2e1343ce37fa78690dcb62fe03594120f
2021-05-21 17:22:41 -07:00
Joshua GrossandFacebook GitHub Bot d670381fac Reduce FabricUIManager soft errors further
Summary:
Reduce soft error volume; see comments.

Changelog: [Internal]

Reviewed By: ShikaSD

Differential Revision: D28551214

fbshipit-source-id: 7e6aa1ee7cad812650bd6219d0cbe568c3cdd3de
2021-05-20 09:49:11 -07:00
David VaccaandFacebook GitHub Bot 0b371304aa Create ReactFeatureFlag to initialize MapBufferSo file during Fabric initialization
Summary:
This diff creates a ReactFeatureFlag to initialize MapBufferSo file during Fabric initialization.

This is necessary to be able to compare properly Mapbuffer vs ReadableNativeMap (because ReadableNativeMap c++ files is already included in the bridge so file)

changelog: [internal]

Reviewed By: JoshuaGross

Differential Revision: D28436044

fbshipit-source-id: 338e1bb72b5313dc29a309e1b0e979e7c8bd1c18
2021-05-14 12:55:24 -07:00