Skip to content

Commit 5bbf7e6

Browse files
sammy-SCfacebook-github-bot
authored andcommitted
remove uiManagerBinding_ member variable from NativeAnimatedNodesManagerProvider (#51610)
Summary: Pull Request resolved: #51610 changelog: [internal] No need to store uiManagerBinding in a shared_ptr. Let's just get it, pass it to classes that need it and not store it. This helps with C++ binary size a little bit. Reviewed By: rshest Differential Revision: D75174567 fbshipit-source-id: 1d4e5a9f89ba2f2d2eb733eac9d103ee97550d0f
1 parent 0c0d240 commit 5bbf7e6

4 files changed

Lines changed: 85 additions & 109 deletions

File tree

packages/react-native/ReactCxxPlatform/react/renderer/animated/AnimatedMountingOverrideDelegate.cpp

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,17 @@
99

1010
#include <react/renderer/componentregistry/ComponentDescriptorRegistry.h>
1111
#include <react/renderer/components/view/ViewProps.h>
12+
#include <react/renderer/scheduler/Scheduler.h>
1213
#include <react/renderer/uimanager/UIManagerBinding.h>
1314

1415
namespace facebook::react {
1516

1617
AnimatedMountingOverrideDelegate::AnimatedMountingOverrideDelegate(
1718
std::function<folly::dynamic(Tag)> getAnimatedManagedProps,
18-
std::weak_ptr<UIManagerBinding> uiManagerBinding)
19+
const Scheduler& scheduler)
1920
: MountingOverrideDelegate(),
2021
getAnimatedManagedProps_(std::move(getAnimatedManagedProps)),
21-
uiManagerBinding_(std::move(uiManagerBinding)){};
22+
scheduler_(&scheduler){};
2223

2324
bool AnimatedMountingOverrideDelegate::shouldOverridePullTransaction() const {
2425
return getAnimatedManagedProps_ != nullptr;
@@ -63,27 +64,22 @@ AnimatedMountingOverrideDelegate::pullTransaction(
6364
if (modifiedProps.empty()) {
6465
filteredMutations.emplace_back(mutation);
6566
} else {
66-
if (auto uiManagerBinding = uiManagerBinding_.lock()) {
67-
auto* scheduler = static_cast<Scheduler*>(
68-
uiManagerBinding->getUIManager().getDelegate());
69-
react_native_assert(scheduler);
70-
if (const auto* componentDescriptor =
71-
scheduler
72-
->findComponentDescriptorByHandle_DO_NOT_USE_THIS_IS_BROKEN(
73-
mutation.newChildShadowView.componentHandle)) {
74-
PropsParserContext propsParserContext{
75-
mutation.newChildShadowView.surfaceId,
76-
*scheduler->getContextContainer()};
77-
auto modifiedNewChildShadowView = mutation.newChildShadowView;
78-
modifiedNewChildShadowView.props = componentDescriptor->cloneProps(
79-
propsParserContext,
80-
mutation.newChildShadowView.props,
81-
RawProps(std::move(modifiedProps)));
82-
filteredMutations.emplace_back(ShadowViewMutation::UpdateMutation(
83-
mutation.oldChildShadowView,
84-
std::move(modifiedNewChildShadowView),
85-
mutation.parentTag));
86-
}
67+
if (const auto* componentDescriptor =
68+
scheduler_
69+
->findComponentDescriptorByHandle_DO_NOT_USE_THIS_IS_BROKEN(
70+
mutation.newChildShadowView.componentHandle)) {
71+
PropsParserContext propsParserContext{
72+
mutation.newChildShadowView.surfaceId,
73+
*scheduler_->getContextContainer()};
74+
auto modifiedNewChildShadowView = mutation.newChildShadowView;
75+
modifiedNewChildShadowView.props = componentDescriptor->cloneProps(
76+
propsParserContext,
77+
mutation.newChildShadowView.props,
78+
RawProps(std::move(modifiedProps)));
79+
filteredMutations.emplace_back(ShadowViewMutation::UpdateMutation(
80+
mutation.oldChildShadowView,
81+
std::move(modifiedNewChildShadowView),
82+
mutation.parentTag));
8783
}
8884
}
8985
}

packages/react-native/ReactCxxPlatform/react/renderer/animated/AnimatedMountingOverrideDelegate.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,18 @@
1111
#include <react/renderer/mounting/MountingOverrideDelegate.h>
1212
#include <react/renderer/mounting/MountingTransaction.h>
1313
#include <react/renderer/mounting/ShadowViewMutation.h>
14-
#include <react/renderer/scheduler/Scheduler.h>
1514
#include <functional>
1615
#include <optional>
1716

1817
namespace facebook::react {
1918

20-
class UIManagerBinding;
19+
class Scheduler;
2120

2221
class AnimatedMountingOverrideDelegate : public MountingOverrideDelegate {
2322
public:
2423
AnimatedMountingOverrideDelegate(
2524
std::function<folly::dynamic(Tag)> getAnimatedManagedProps,
26-
std::weak_ptr<UIManagerBinding> uiManagerBinding);
25+
const Scheduler& scheduler);
2726

2827
bool shouldOverridePullTransaction() const override;
2928

@@ -36,7 +35,7 @@ class AnimatedMountingOverrideDelegate : public MountingOverrideDelegate {
3635
private:
3736
std::function<folly::dynamic(Tag)> getAnimatedManagedProps_;
3837

39-
std::weak_ptr<UIManagerBinding> uiManagerBinding_;
38+
const Scheduler* scheduler_;
4039
};
4140

4241
} // namespace facebook::react

packages/react-native/ReactCxxPlatform/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp

Lines changed: 62 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -34,29 +34,17 @@ NativeAnimatedNodesManagerProvider::NativeAnimatedNodesManagerProvider(
3434

3535
std::shared_ptr<NativeAnimatedNodesManager>
3636
NativeAnimatedNodesManagerProvider::getOrCreate(jsi::Runtime& runtime) {
37-
if (!uiManagerBinding_.lock()) {
38-
uiManagerBinding_ = UIManagerBinding::getBinding(runtime);
39-
}
40-
4137
if (nativeAnimatedNodesManager_ == nullptr) {
38+
auto* uiManager = &UIManagerBinding::getBinding(runtime)->getUIManager();
39+
4240
auto fabricCommitCallback =
43-
[uiManagerBindingWeak = uiManagerBinding_](
44-
std::unordered_map<Tag, folly::dynamic>& tagToProps) {
45-
if (auto uiManagerBinding = uiManagerBindingWeak.lock()) {
46-
uiManagerBinding->getUIManager().updateShadowTree(tagToProps);
47-
} else {
48-
LOG(WARNING)
49-
<< "UIManager is not initialized for Fabric commit callback";
50-
}
41+
[uiManager](std::unordered_map<Tag, folly::dynamic>& tagToProps) {
42+
uiManager->updateShadowTree(tagToProps);
5143
};
5244

5345
auto directManipulationCallback =
54-
[uiManagerBindingWeak = uiManagerBinding_](
55-
Tag viewTag, const folly::dynamic& props) {
56-
if (auto uiManagerBinding = uiManagerBindingWeak.lock()) {
57-
uiManagerBinding->getUIManager().synchronouslyUpdateViewOnUIThread(
58-
viewTag, props);
59-
}
46+
[uiManager](Tag viewTag, const folly::dynamic& props) {
47+
uiManager->synchronouslyUpdateViewOnUIThread(viewTag, props);
6048
};
6149

6250
nativeAnimatedNodesManager_ = std::make_shared<NativeAnimatedNodesManager>(
@@ -68,68 +56,63 @@ NativeAnimatedNodesManagerProvider::getOrCreate(jsi::Runtime& runtime) {
6856
addEventEmitterListener(
6957
nativeAnimatedNodesManager_->getEventEmitterListener());
7058

71-
if (auto uiManagerBinding = uiManagerBinding_.lock()) {
72-
uiManagerBinding->getUIManager().addEventListener(
73-
std::make_shared<EventListener>(
74-
[eventEmitterListenerContainerWeak =
75-
std::weak_ptr<EventEmitterListenerContainer>(
76-
eventEmitterListenerContainer_)](
77-
const RawEvent& rawEvent) {
78-
const auto& eventTarget = rawEvent.eventTarget;
79-
const auto& eventPayload = rawEvent.eventPayload;
80-
if (eventTarget && eventPayload) {
81-
if (auto eventEmitterListenerContainer =
82-
eventEmitterListenerContainerWeak.lock();
83-
eventEmitterListenerContainer != nullptr) {
84-
return eventEmitterListenerContainer->willDispatchEvent(
85-
eventTarget->getTag(), rawEvent.type, *eventPayload);
86-
}
87-
}
88-
return false;
89-
}));
90-
91-
nativeAnimatedDelegate_ =
92-
std::make_shared<UIManagerNativeAnimatedDelegateImpl>(
93-
nativeAnimatedNodesManager_);
94-
95-
uiManagerBinding->getUIManager().setNativeAnimatedDelegate(
96-
nativeAnimatedDelegate_);
97-
98-
animatedMountingOverrideDelegate_ =
99-
std::make_shared<AnimatedMountingOverrideDelegate>(
100-
[nativeAnimatedNodesManager =
101-
std::weak_ptr<NativeAnimatedNodesManager>(
102-
nativeAnimatedNodesManager_)](
103-
Tag tag) -> folly::dynamic {
104-
if (auto nativeAnimatedNodesManagerStrong =
105-
nativeAnimatedNodesManager.lock()) {
106-
return nativeAnimatedNodesManagerStrong->managedProps(tag);
107-
}
108-
return nullptr;
109-
},
110-
uiManagerBinding_);
111-
112-
// Register on existing surfaces
113-
uiManagerBinding->getUIManager().getShadowTreeRegistry().enumerate(
114-
[animatedMountingOverrideDelegate =
115-
std::weak_ptr<const AnimatedMountingOverrideDelegate>(
116-
animatedMountingOverrideDelegate_)](
117-
const ShadowTree& shadowTree, bool& /*stop*/) {
118-
shadowTree.getMountingCoordinator()->setMountingOverrideDelegate(
119-
animatedMountingOverrideDelegate);
120-
});
121-
// Register on surfaces started in the future
122-
uiManagerBinding->getUIManager().setOnSurfaceStartCallback(
123-
[animatedMountingOverrideDelegate =
124-
std::weak_ptr<const AnimatedMountingOverrideDelegate>(
125-
animatedMountingOverrideDelegate_)](
126-
const ShadowTree& shadowTree) {
127-
shadowTree.getMountingCoordinator()->setMountingOverrideDelegate(
128-
animatedMountingOverrideDelegate);
129-
});
130-
}
59+
uiManager->addEventListener(std::make_shared<EventListener>(
60+
[eventEmitterListenerContainerWeak =
61+
std::weak_ptr<EventEmitterListenerContainer>(
62+
eventEmitterListenerContainer_)](const RawEvent& rawEvent) {
63+
const auto& eventTarget = rawEvent.eventTarget;
64+
const auto& eventPayload = rawEvent.eventPayload;
65+
if (eventTarget && eventPayload) {
66+
if (auto eventEmitterListenerContainer =
67+
eventEmitterListenerContainerWeak.lock();
68+
eventEmitterListenerContainer != nullptr) {
69+
return eventEmitterListenerContainer->willDispatchEvent(
70+
eventTarget->getTag(), rawEvent.type, *eventPayload);
71+
}
72+
}
73+
return false;
74+
}));
75+
76+
nativeAnimatedDelegate_ =
77+
std::make_shared<UIManagerNativeAnimatedDelegateImpl>(
78+
nativeAnimatedNodesManager_);
79+
80+
uiManager->setNativeAnimatedDelegate(nativeAnimatedDelegate_);
81+
82+
// TODO: remove force casting.
83+
auto* scheduler = (Scheduler*)uiManager->getDelegate();
84+
animatedMountingOverrideDelegate_ =
85+
std::make_shared<AnimatedMountingOverrideDelegate>(
86+
[nativeAnimatedNodesManager =
87+
std::weak_ptr<NativeAnimatedNodesManager>(
88+
nativeAnimatedNodesManager_)](Tag tag) -> folly::dynamic {
89+
if (auto nativeAnimatedNodesManagerStrong =
90+
nativeAnimatedNodesManager.lock()) {
91+
return nativeAnimatedNodesManagerStrong->managedProps(tag);
92+
}
93+
return nullptr;
94+
},
95+
*scheduler);
96+
97+
// Register on existing surfaces
98+
uiManager->getShadowTreeRegistry().enumerate(
99+
[animatedMountingOverrideDelegate =
100+
std::weak_ptr<const AnimatedMountingOverrideDelegate>(
101+
animatedMountingOverrideDelegate_)](
102+
const ShadowTree& shadowTree, bool& /*stop*/) {
103+
shadowTree.getMountingCoordinator()->setMountingOverrideDelegate(
104+
animatedMountingOverrideDelegate);
105+
});
106+
// Register on surfaces started in the future
107+
uiManager->setOnSurfaceStartCallback(
108+
[animatedMountingOverrideDelegate =
109+
std::weak_ptr<const AnimatedMountingOverrideDelegate>(
110+
animatedMountingOverrideDelegate_)](
111+
const ShadowTree& shadowTree) {
112+
shadowTree.getMountingCoordinator()->setMountingOverrideDelegate(
113+
animatedMountingOverrideDelegate);
114+
});
131115
}
132-
133116
return nativeAnimatedNodesManager_;
134117
}
135118

packages/react-native/ReactCxxPlatform/react/renderer/animated/NativeAnimatedNodesManagerProvider.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212

1313
namespace facebook::react {
1414

15-
class UIManagerBinding;
16-
1715
class UIManagerNativeAnimatedDelegateImpl
1816
: public UIManagerNativeAnimatedDelegate {
1917
public:
@@ -25,6 +23,7 @@ class UIManagerNativeAnimatedDelegateImpl
2523
private:
2624
std::weak_ptr<NativeAnimatedNodesManager> nativeAnimatedNodesManager_;
2725
};
26+
2827
class AnimatedMountingOverrideDelegate;
2928

3029
class NativeAnimatedNodesManagerProvider {
@@ -50,7 +49,6 @@ class NativeAnimatedNodesManagerProvider {
5049

5150
private:
5251
std::shared_ptr<NativeAnimatedNodesManager> nativeAnimatedNodesManager_;
53-
std::weak_ptr<UIManagerBinding> uiManagerBinding_;
5452

5553
std::shared_ptr<EventEmitterListenerContainer> eventEmitterListenerContainer_;
5654
std::shared_ptr<EventEmitterListener> eventEmitterListener_;

0 commit comments

Comments
 (0)