diff --git a/packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp b/packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp index 55c13742fea..5ee3f514ea1 100644 --- a/packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp +++ b/packages/react-native/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp @@ -66,6 +66,8 @@ NativeAnimatedNodesManagerProvider::getOrCreate( }; if (ReactNativeFeatureFlags::useSharedAnimatedBackend()) { + // TODO: this should be initialized outside of animated, but for now it + // was convenient to do it here animationBackend_ = std::make_shared( std::move(startOnRenderCallback_), std::move(stopOnRenderCallback_), @@ -73,6 +75,8 @@ NativeAnimatedNodesManagerProvider::getOrCreate( nativeAnimatedNodesManager_ = std::make_shared(animationBackend_); + + uiManager->unstable_setAnimationBackend(animationBackend_); } else { nativeAnimatedNodesManager_ = std::make_shared( diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp index 4855071d9ab..22eec48f8ed 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp @@ -678,6 +678,15 @@ void UIManager::setNativeAnimatedDelegate( nativeAnimatedDelegate_ = delegate; } +void UIManager::unstable_setAnimationBackend( + std::weak_ptr animationBackend) { + animationBackend_ = animationBackend; +} + +std::weak_ptr UIManager::unstable_getAnimationBackend() { + return animationBackend_; +} + void UIManager::animationTick() const { if (animationDelegate_ != nullptr && animationDelegate_->shouldAnimateFrame()) { diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h index 42643810537..af6a32b8081 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h @@ -36,6 +36,7 @@ namespace facebook::react { class UIManagerBinding; class UIManagerCommitHook; class UIManagerMountHook; +class AnimationBackend; class UIManager final : public ShadowTreeDelegate { public: @@ -62,6 +63,9 @@ class UIManager final : public ShadowTreeDelegate { * the pointer before being destroyed. */ void setAnimationDelegate(UIManagerAnimationDelegate* delegate); + void unstable_setAnimationBackend( + std::weak_ptr animationBackend); + std::weak_ptr unstable_getAnimationBackend(); /** * Execute stopSurface on any UIMAnagerAnimationDelegate. @@ -258,6 +262,8 @@ class UIManager final : public ShadowTreeDelegate { std::unique_ptr lazyShadowTreeRevisionConsistencyManager_; + + std::weak_ptr animationBackend_; }; } // namespace facebook::react