Skip to content

Commit 6f3ddfc

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 6f3ddfc

File tree

4 files changed

+31
-16
lines changed

4 files changed

+31
-16
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ thread_local bool NativeAnimatedNodesManager::isOnRenderThread_{false};
7373
NativeAnimatedNodesManager::NativeAnimatedNodesManager(
7474
DirectManipulationCallback&& directManipulationCallback,
7575
FabricCommitCallback&& fabricCommitCallback,
76-
StartOnRenderCallback&& startOnRenderCallback,
76+
StartOnRenderCallbackInternal&& startOnRenderCallback,
7777
StopOnRenderCallback&& stopOnRenderCallback) noexcept
7878
: directManipulationCallback_(std::move(directManipulationCallback)),
7979
fabricCommitCallback_(std::move(fabricCommitCallback)),
@@ -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: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,13 @@ class NativeAnimatedNodesManager {
6262
using FabricCommitCallback =
6363
std::function<void(std::unordered_map<Tag, folly::dynamic>&)>;
6464
using StartOnRenderCallback = std::function<void(std::function<void()>&&)>;
65+
using StartOnRenderCallbackInternal = std::function<void()>;
6566
using StopOnRenderCallback = std::function<void()>;
6667

6768
explicit NativeAnimatedNodesManager(
6869
DirectManipulationCallback&& directManipulationCallback,
6970
FabricCommitCallback&& fabricCommitCallback,
70-
StartOnRenderCallback&& startOnRenderCallback = nullptr,
71+
StartOnRenderCallbackInternal&& startOnRenderCallback = nullptr,
7172
StopOnRenderCallback&& stopOnRenderCallback = nullptr) noexcept;
7273

7374
explicit NativeAnimatedNodesManager(
@@ -259,7 +260,7 @@ class NativeAnimatedNodesManager {
259260
* Tracks whether the render callback loop for animations is currently active.
260261
*/
261262
std::atomic_bool isRenderCallbackStarted_{false};
262-
const StartOnRenderCallback startOnRenderCallback_;
263+
const StartOnRenderCallbackInternal startOnRenderCallback_;
263264
const StopOnRenderCallback stopOnRenderCallback_;
264265

265266
std::shared_ptr<EventEmitterListener> eventEmitterListener_{nullptr};

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

Lines changed: 18 additions & 8 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 =
@@ -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: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,24 @@
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:
3236
NativeAnimatedNodesManagerProvider(

0 commit comments

Comments
 (0)