Bridgeless: Implement unstableRequiresMainQueueSetup api in modules#50040
Bridgeless: Implement unstableRequiresMainQueueSetup api in modules#50040RSNara wants to merge 2 commits into
Conversation
|
This pull request was exported from Phabricator. Differential Revision: D71084243 |
|
This pull request was exported from Phabricator. Differential Revision: D71084243 |
f05d1cc to
4a886d9
Compare
|
This pull request was exported from Phabricator. Differential Revision: D71084243 |
4a886d9 to
3c3feb7
Compare
|
This pull request was exported from Phabricator. Differential Revision: D71084243 |
3c3feb7 to
37168de
Compare
|
This pull request was exported from Phabricator. Differential Revision: D71084243 |
37168de to
145d66f
Compare
|
This pull request was exported from Phabricator. Differential Revision: D71084243 |
145d66f to
ccd3381
Compare
|
This pull request was exported from Phabricator. Differential Revision: D71084243 |
ccd3381 to
a39df38
Compare
|
This pull request was exported from Phabricator. Differential Revision: D71084243 |
a39df38 to
86aab45
Compare
…#49957) Summary: Pull Request resolved: facebook#49957 ## Changes This diff introduces the api for "main queue modules" into turbo modules. This will occur occurs before any rendering. ## Rationale Rendering can now include main -> js sync calls. If we allow js -> main sync calls during rendering, react native can deadlock. With this diff, we can move the js -> main sync calls to before any rendering happens. ## APIs **Buck API:** Plugin: ``` react_module_plugin_providers( name = "AccessibilityManager", native_class_func = "RCTAccessibilityManagerCls", unstable_requires_main_queue_setup = True, ) ``` **OSS API:** [codegenConfig](https://reactnative.dev/docs/the-new-architecture/using-codegen) in package.json: ``` "codegenConfig": { "name": "<SpecName>", "type": "<types>", "jsSrcsDir": "<source_dir>", "android": { "javaPackageName": "<java.package.name>" }, "ios": { "modules": { "AccessibilityManager": { "className": "RCTAccessibilityManager", "unstableRequiresMainQueueSetup": true } } } }, ``` Changelog: [iOS][Added] Introduce unstableRequiresMainQueueSetup api to modules Differential Revision: D70413478 Reviewed By: cipolleschi
|
This pull request was exported from Phabricator. Differential Revision: D71084243 |
…#50040) Summary: Pull Request resolved: facebook#50040 This diff implements main queue module setup. Sometimes, people need to capture uikit things, and use them from javascript. In those cases, people can write main queue modules. These modules will be eagerly initialized on the main queue, during react native init. ## On Necessity **Sync** dispatches to the main thread from the js thread can deadlock react native. And **async** dispatches to the main thread from the js thread sometimes might not be enough: it could lead to flickery rendering. So, we need to allow people to capture ui thread things, before any js executes. ## Caveat This api is dangerous and discouraged. All react native surfaces will pay the cost of one surface introducing a main queue module. It could also slow down common/critical interactions in your app, if you're not careful. We will introduce performance logging for this infrastructure. So that we can monitor and file tasks, when main queue module init starts taking "too long." Changelog: [Both][Breaking]: Introduce beforeload callback arg into ReactInstance::loadScript Differential Revision: D71084243 Reviewed By: mdvacca
86aab45 to
f145b98
Compare
|
This pull request was exported from Phabricator. Differential Revision: D71084243 |
f145b98 to
171b377
Compare
|
This pull request was exported from Phabricator. Differential Revision: D71084243 |
171b377 to
8a6b7e9
Compare
…#50040) Summary: Pull Request resolved: facebook#50040 This diff implements main queue module setup. Sometimes, people need to capture uikit things, and use them from javascript. In those cases, people can write main queue modules. These modules will be eagerly initialized on the main queue, during react native init. ## On Necessity **Sync** dispatches to the main thread from the js thread can deadlock react native. And **async** dispatches to the main thread from the js thread sometimes might not be enough: it could lead to flickery rendering. So, we need to allow people to capture ui thread things, before any js executes. ## Caveat This api is dangerous and discouraged. All react native surfaces will pay the cost of one surface introducing a main queue module. It could also slow down common/critical interactions in your app, if you're not careful. We will introduce performance logging for this infrastructure. So that we can monitor and file tasks, when main queue module init starts taking "too long." Changelog: [General][Breaking]: Introduce beforeload callback arg into ReactInstance::loadScript Differential Revision: D71084243 Reviewed By: mdvacca
…#50040) Summary: Pull Request resolved: facebook#50040 This diff implements main queue module setup. Sometimes, people need to capture uikit things, and use them from javascript. In those cases, people can write main queue modules. These modules will be eagerly initialized on the main queue, during react native init. ## On Necessity **Sync** dispatches to the main thread from the js thread can deadlock react native. And **async** dispatches to the main thread from the js thread sometimes might not be enough: it could lead to flickery rendering. So, we need to allow people to capture ui thread things, before any js executes. ## Caveat This api is dangerous and discouraged. All react native surfaces will pay the cost of one surface introducing a main queue module. It could also slow down common/critical interactions in your app, if you're not careful. We will introduce performance logging for this infrastructure. So that we can monitor and file tasks, when main queue module init starts taking "too long." Changelog: [General][Breaking]: Introduce beforeload callback arg into ReactInstance::loadScript Reviewed By: mdvacca Differential Revision: D71084243
|
This pull request was exported from Phabricator. Differential Revision: D71084243 |
8a6b7e9 to
b088fb9
Compare
|
This pull request has been merged in 061174c. |
Summary:
This diff implements main queue module initialization.
Sometimes, people need to capture uikit things, and use them from javascript. In those cases, people can write main queue modules. These modules will be eagerly initialized on the main queue, during react native init.
On Necessity
Sync dispatches to the main thread from the js thread can deadlock react native. And async dispatches to the main thread from the js thread sometimes might not be enough: it could lead to flickery rendering. So, we need to allow people to capture ui thread things, before any js executes.
Caveat
This api is dangerous and discouraged. Everyone will pay the cost of one surface introducing a main queue module. It could also slow down common/critical interactions in your app, if you're not careful.
We will introduce performance logging for this infrastructure. So that we can monitor and file tasks, when main queue module init starts taking "too long."
Changelog: [Both][Breaking]: Introduce beforeload callback arg into ReactInstance::loadScript
Differential Revision: D71084243