Skip to content

Commit 91c49e8

Browse files
zeyapfacebook-github-bot
authored andcommitted
always invoke onRender via UIManagerNativeAnimatedDelegate (#54211)
Summary: ## Changelog: [Internal] [Added] - always invoke onRender via UIManagerNativeAnimatedDelegate Previously only android invokes `onRender` via UIManagerNativeAnimatedDelegate::runAnimationFrame() consolidating so it's easier for debugging, also in cases where we want to add extra work per frame (e.g. add performance logging) in AnimatedNodesManagerProvider Reviewed By: sammy-SC Differential Revision: D85071075
1 parent 708f527 commit 91c49e8

File tree

4 files changed

+37
-22
lines changed

4 files changed

+37
-22
lines changed

packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,7 @@ void NativeAnimatedNodesManager::startRenderCallbackIfNeeded() {
539539
}
540540

541541
if (startOnRenderCallback_) {
542-
startOnRenderCallback_([this]() { onRender(); });
542+
startOnRenderCallback_();
543543
}
544544
}
545545

packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class NativeAnimatedNodesManager {
6161
std::function<void(Tag, const folly::dynamic&)>;
6262
using FabricCommitCallback =
6363
std::function<void(std::unordered_map<Tag, folly::dynamic>&)>;
64-
using StartOnRenderCallback = std::function<void(std::function<void()>&&)>;
64+
using StartOnRenderCallback = std::function<void()>;
6565
using StopOnRenderCallback = std::function<void()>;
6666

6767
explicit NativeAnimatedNodesManager(

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

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@
1818

1919
namespace facebook::react {
2020

21-
UIManagerNativeAnimatedDelegateImpl::UIManagerNativeAnimatedDelegateImpl(
22-
std::weak_ptr<NativeAnimatedNodesManager> nativeAnimatedNodesManager)
23-
: nativeAnimatedNodesManager_(std::move(nativeAnimatedNodesManager)) {}
21+
UIManagerNativeAnimatedDelegateImpl::UIManagerNativeAnimatedDelegateImpl() {}
2422

2523
void UIManagerNativeAnimatedDelegateImpl::runAnimationFrame() {
2624
if (auto nativeAnimatedNodesManagerStrong =
@@ -30,8 +28,8 @@ void UIManagerNativeAnimatedDelegateImpl::runAnimationFrame() {
3028
}
3129

3230
NativeAnimatedNodesManagerProvider::NativeAnimatedNodesManagerProvider(
33-
NativeAnimatedNodesManager::StartOnRenderCallback startOnRenderCallback,
34-
NativeAnimatedNodesManager::StopOnRenderCallback stopOnRenderCallback)
31+
StartOnRenderCallback startOnRenderCallback,
32+
StopOnRenderCallback stopOnRenderCallback)
3533
: eventEmitterListenerContainer_(
3634
std::make_shared<EventEmitterListenerContainer>()),
3735
startOnRenderCallback_(std::move(startOnRenderCallback)),
@@ -67,6 +65,9 @@ NativeAnimatedNodesManagerProvider::getOrCreate(
6765
uiManager->synchronouslyUpdateViewOnUIThread(viewTag, props);
6866
};
6967

68+
nativeAnimatedDelegate_ =
69+
std::make_shared<UIManagerNativeAnimatedDelegateImpl>();
70+
7071
if (ReactNativeFeatureFlags::useSharedAnimatedBackend()) {
7172
#ifdef RN_USE_ANIMATION_BACKEND
7273
// TODO: this should be initialized outside of animated, but for now it
@@ -84,14 +85,27 @@ NativeAnimatedNodesManagerProvider::getOrCreate(
8485

8586
uiManager->unstable_setAnimationBackend(animationBackend_);
8687
} else {
88+
auto startOnRenderCallback =
89+
[nativeAnimatedDelegate = nativeAnimatedDelegate_,
90+
startOnRenderCallbackFn = std::move(startOnRenderCallback_)]() {
91+
if (startOnRenderCallbackFn) {
92+
startOnRenderCallbackFn([nativeAnimatedDelegate]() {
93+
nativeAnimatedDelegate->runAnimationFrame();
94+
});
95+
}
96+
};
8797
nativeAnimatedNodesManager_ =
8898
std::make_shared<NativeAnimatedNodesManager>(
8999
std::move(directManipulationCallback),
90100
std::move(fabricCommitCallback),
91-
std::move(startOnRenderCallback_),
101+
std::move(startOnRenderCallback),
92102
std::move(stopOnRenderCallback_));
93103
}
94104

105+
std::static_pointer_cast<UIManagerNativeAnimatedDelegateImpl>(
106+
nativeAnimatedDelegate_)
107+
->setNativeAnimatedNodesManager(nativeAnimatedNodesManager_);
108+
95109
addEventEmitterListener(
96110
nativeAnimatedNodesManager_->getEventEmitterListener());
97111

@@ -112,10 +126,6 @@ NativeAnimatedNodesManagerProvider::getOrCreate(
112126
return false;
113127
}));
114128

115-
nativeAnimatedDelegate_ =
116-
std::make_shared<UIManagerNativeAnimatedDelegateImpl>(
117-
nativeAnimatedNodesManager_);
118-
119129
uiManager->setNativeAnimatedDelegate(nativeAnimatedDelegate_);
120130

121131
// TODO: remove force casting.

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

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,32 @@
1313

1414
namespace facebook::react {
1515

16+
class AnimatedMountingOverrideDelegate;
17+
1618
class UIManagerNativeAnimatedDelegateImpl
1719
: public UIManagerNativeAnimatedDelegate {
1820
public:
19-
explicit UIManagerNativeAnimatedDelegateImpl(
20-
std::weak_ptr<NativeAnimatedNodesManager> nativeAnimatedNodesManager);
21+
explicit UIManagerNativeAnimatedDelegateImpl();
2122

2223
void runAnimationFrame() override;
2324

25+
void setNativeAnimatedNodesManager(
26+
std::weak_ptr<NativeAnimatedNodesManager> manager) {
27+
nativeAnimatedNodesManager_ = manager;
28+
}
29+
2430
private:
2531
std::weak_ptr<NativeAnimatedNodesManager> nativeAnimatedNodesManager_;
2632
};
2733

28-
class AnimatedMountingOverrideDelegate;
29-
3034
class NativeAnimatedNodesManagerProvider {
3135
public:
36+
using StartOnRenderCallback = std::function<void(std::function<void()>&&)>;
37+
using StopOnRenderCallback = NativeAnimatedNodesManager::StopOnRenderCallback;
38+
3239
NativeAnimatedNodesManagerProvider(
33-
NativeAnimatedNodesManager::StartOnRenderCallback startOnRenderCallback =
34-
nullptr,
35-
NativeAnimatedNodesManager::StopOnRenderCallback stopOnRenderCallback =
36-
nullptr);
40+
StartOnRenderCallback startOnRenderCallback = nullptr,
41+
StopOnRenderCallback stopOnRenderCallback = nullptr);
3742

3843
std::shared_ptr<NativeAnimatedNodesManager> getOrCreate(
3944
jsi::Runtime& runtime,
@@ -56,8 +61,8 @@ class NativeAnimatedNodesManagerProvider {
5661
std::shared_ptr<AnimatedMountingOverrideDelegate>
5762
animatedMountingOverrideDelegate_;
5863

59-
NativeAnimatedNodesManager::StartOnRenderCallback startOnRenderCallback_;
60-
NativeAnimatedNodesManager::StopOnRenderCallback stopOnRenderCallback_;
64+
StartOnRenderCallback startOnRenderCallback_;
65+
StopOnRenderCallback stopOnRenderCallback_;
6166

6267
std::unique_ptr<MergedValueDispatcher> mergedValueDispatcher_;
6368
};

0 commit comments

Comments
 (0)