From 9ec1d48191a0230a52e7aa259b556a484580edb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Tue, 6 Oct 2026 03:54:50 -0700 Subject: [PATCH] Make animationbackend implementation headers private (#58858) Summary: Pull Request resolved: https://github.com/react/react-native/pull/58858 `AnimatedPropsSerializer.h`, `AnimatedPropsRegistry.h` and `AnimationBackendCommitHook.h` are implementation details of `AnimationBackend` with no users outside React Native, so lower them from "for frameworks" to private. `AnimationBackend.h` (for frameworks) previously included the registry and commit hook headers, which would leak private headers to its consumers, so we decouple them: - forward-declare `AnimatedPropsRegistry`, `AnimationBackendCommitHook` and `SurfaceUpdates`; - hold the commit hook through `std::unique_ptr` and define the destructor out of line; - make `commitUpdates` private; it is only called from within `AnimationBackend`. Changelog: [Internal] Reviewed By: christophpurrer Differential Revision: D123418519 --- .../animationbackend/AnimatedPropsRegistry.h | 2 +- .../animationbackend/AnimatedPropsSerializer.h | 2 +- .../renderer/animationbackend/AnimationBackend.cpp | 8 +++++++- .../renderer/animationbackend/AnimationBackend.h | 12 ++++++++---- .../animationbackend/AnimationBackendCommitHook.h | 2 +- .../cxx-api/api-snapshots/ReactAndroidDebugCxx.api | 2 +- .../cxx-api/api-snapshots/ReactAndroidNewarchCxx.api | 2 +- .../cxx-api/api-snapshots/ReactAndroidReleaseCxx.api | 2 +- scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api | 2 +- .../cxx-api/api-snapshots/ReactAppleNewarchCxx.api | 2 +- .../cxx-api/api-snapshots/ReactAppleReleaseCxx.api | 2 +- .../cxx-api/api-snapshots/ReactCommonDebugCxx.api | 2 +- .../cxx-api/api-snapshots/ReactCommonNewarchCxx.api | 2 +- .../cxx-api/api-snapshots/ReactCommonReleaseCxx.api | 2 +- 14 files changed, 27 insertions(+), 17 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h index 3c004ec9502f..14096267174c 100644 --- a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h +++ b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsSerializer.h b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsSerializer.h index 0570d9f326b8..49b2f3824dc5 100644 --- a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsSerializer.h +++ b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedPropsSerializer.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include "AnimatedProps.h" diff --git a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp index e38386a9e44a..842166325268 100644 --- a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp +++ b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp @@ -7,6 +7,7 @@ #include "AnimationBackend.h" #include "AnimatedPropsRegistry.h" +#include "AnimationBackendCommitHook.h" #include #include @@ -53,7 +54,10 @@ AnimationBackend::AnimationBackend( std::shared_ptr uiManager) : animatedPropsRegistry_(std::make_shared()), animationChoreographer_(std::move(animationChoreographer)), - commitHook_(*uiManager, animatedPropsRegistry_), + commitHook_( + std::make_unique( + *uiManager, + animatedPropsRegistry_)), uiManager_(std::move(uiManager)) { react_native_assert(uiManager_.expired() == false); @@ -75,6 +79,8 @@ AnimationBackend::AnimationBackend( } } +AnimationBackend::~AnimationBackend() = default; + void AnimationBackend::unpackMutations( AnimationMutations& mutations, std::unordered_map& surfaceUpdates, diff --git a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.h b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.h index af4a37a9c260..8847045f529c 100644 --- a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.h +++ b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.h @@ -15,16 +15,19 @@ #include #include #include +#include #include +#include #include #include "AnimatedProps.h" -#include "AnimatedPropsRegistry.h" -#include "AnimationBackendCommitHook.h" #include "AnimationChoreographer.h" namespace facebook::react { class AnimationBackend; +class AnimationBackendCommitHook; +class AnimatedPropsRegistry; +struct SurfaceUpdates; struct AnimationMutation { Tag tag; @@ -53,7 +56,7 @@ class AnimationBackend : public UIManagerAnimationBackend { AnimationBackend( std::shared_ptr animationChoreographer, std::shared_ptr uiManager); - void commitUpdates(SurfaceId surfaceId, SurfaceUpdates &surfaceUpdates); + ~AnimationBackend() override; void synchronouslyUpdateProps(const std::unordered_map &updates); void requestAsyncFlushForSurfaces(const std::set &surfaces); void clearRegistry(SurfaceId surfaceId) override; @@ -67,6 +70,7 @@ class AnimationBackend : public UIManagerAnimationBackend { void stop(CallbackId callbackId) override; private: + void commitUpdates(SurfaceId surfaceId, SurfaceUpdates &surfaceUpdates); void unpackMutations( AnimationMutations &mutations, std::unordered_map &surfaceUpdates, @@ -78,7 +82,7 @@ class AnimationBackend : public UIManagerAnimationBackend { std::vector callbacks; std::shared_ptr animatedPropsRegistry_; std::shared_ptr animationChoreographer_; - AnimationBackendCommitHook commitHook_; + std::unique_ptr commitHook_; std::weak_ptr uiManager_; std::shared_ptr jsInvoker_; bool isRenderCallbackStarted_{false}; diff --git a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackendCommitHook.h b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackendCommitHook.h index fb968a659b97..bb23e83d7bfe 100644 --- a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackendCommitHook.h +++ b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackendCommitHook.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api index 18d90c6ae6e2..5ee27dc3ab0a 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api @@ -1568,9 +1568,9 @@ class facebook::react::AnimationBackend : public facebook::react::UIManagerAnima public virtual void registerJSInvoker(std::shared_ptr jsInvoker) override; public virtual void stop(facebook::react::CallbackId callbackId) override; public virtual void trigger() override; - public void commitUpdates(facebook::react::SurfaceId surfaceId, facebook::react::SurfaceUpdates& surfaceUpdates); public void requestAsyncFlushForSurfaces(const std::set& surfaces); public void synchronouslyUpdateProps(const std::unordered_map& updates); + public ~AnimationBackend() override; } class facebook::react::AnimationBackendCommitHook : public facebook::react::UIManagerCommitHook { diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api index 725e2dd5bbbe..8126c975bda3 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api @@ -1563,9 +1563,9 @@ class facebook::react::AnimationBackend : public facebook::react::UIManagerAnima public virtual void registerJSInvoker(std::shared_ptr jsInvoker) override; public virtual void stop(facebook::react::CallbackId callbackId) override; public virtual void trigger() override; - public void commitUpdates(facebook::react::SurfaceId surfaceId, facebook::react::SurfaceUpdates& surfaceUpdates); public void requestAsyncFlushForSurfaces(const std::set& surfaces); public void synchronouslyUpdateProps(const std::unordered_map& updates); + public ~AnimationBackend() override; } class facebook::react::AnimationBackendCommitHook : public facebook::react::UIManagerCommitHook { diff --git a/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api index d5edc675441a..2130ccfe23fa 100644 --- a/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api @@ -1567,9 +1567,9 @@ class facebook::react::AnimationBackend : public facebook::react::UIManagerAnima public virtual void registerJSInvoker(std::shared_ptr jsInvoker) override; public virtual void stop(facebook::react::CallbackId callbackId) override; public virtual void trigger() override; - public void commitUpdates(facebook::react::SurfaceId surfaceId, facebook::react::SurfaceUpdates& surfaceUpdates); public void requestAsyncFlushForSurfaces(const std::set& surfaces); public void synchronouslyUpdateProps(const std::unordered_map& updates); + public ~AnimationBackend() override; } class facebook::react::AnimationBackendCommitHook : public facebook::react::UIManagerCommitHook { diff --git a/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api index 6d095f79baa8..0168eac13d1b 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api @@ -4118,9 +4118,9 @@ class facebook::react::AnimationBackend : public facebook::react::UIManagerAnima public virtual void registerJSInvoker(std::shared_ptr jsInvoker) override; public virtual void stop(facebook::react::CallbackId callbackId) override; public virtual void trigger() override; - public void commitUpdates(facebook::react::SurfaceId surfaceId, facebook::react::SurfaceUpdates& surfaceUpdates); public void requestAsyncFlushForSurfaces(const std::set& surfaces); public void synchronouslyUpdateProps(const std::unordered_map& updates); + public ~AnimationBackend() override; } class facebook::react::AnimationBackendCommitHook : public facebook::react::UIManagerCommitHook { diff --git a/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api index 25a37df5fa48..bdc9f5eaffe0 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api @@ -4106,9 +4106,9 @@ class facebook::react::AnimationBackend : public facebook::react::UIManagerAnima public virtual void registerJSInvoker(std::shared_ptr jsInvoker) override; public virtual void stop(facebook::react::CallbackId callbackId) override; public virtual void trigger() override; - public void commitUpdates(facebook::react::SurfaceId surfaceId, facebook::react::SurfaceUpdates& surfaceUpdates); public void requestAsyncFlushForSurfaces(const std::set& surfaces); public void synchronouslyUpdateProps(const std::unordered_map& updates); + public ~AnimationBackend() override; } class facebook::react::AnimationBackendCommitHook : public facebook::react::UIManagerCommitHook { diff --git a/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api index 413cb4de732c..70e0dc1d72ac 100644 --- a/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api @@ -4117,9 +4117,9 @@ class facebook::react::AnimationBackend : public facebook::react::UIManagerAnima public virtual void registerJSInvoker(std::shared_ptr jsInvoker) override; public virtual void stop(facebook::react::CallbackId callbackId) override; public virtual void trigger() override; - public void commitUpdates(facebook::react::SurfaceId surfaceId, facebook::react::SurfaceUpdates& surfaceUpdates); public void requestAsyncFlushForSurfaces(const std::set& surfaces); public void synchronouslyUpdateProps(const std::unordered_map& updates); + public ~AnimationBackend() override; } class facebook::react::AnimationBackendCommitHook : public facebook::react::UIManagerCommitHook { diff --git a/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api index b079a52e0eed..a5f5489a6076 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api @@ -893,9 +893,9 @@ class facebook::react::AnimationBackend : public facebook::react::UIManagerAnima public virtual void registerJSInvoker(std::shared_ptr jsInvoker) override; public virtual void stop(facebook::react::CallbackId callbackId) override; public virtual void trigger() override; - public void commitUpdates(facebook::react::SurfaceId surfaceId, facebook::react::SurfaceUpdates& surfaceUpdates); public void requestAsyncFlushForSurfaces(const std::set& surfaces); public void synchronouslyUpdateProps(const std::unordered_map& updates); + public ~AnimationBackend() override; } class facebook::react::AnimationBackendCommitHook : public facebook::react::UIManagerCommitHook { diff --git a/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api index 1ae1d6f3795f..3637899b15e7 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api @@ -889,9 +889,9 @@ class facebook::react::AnimationBackend : public facebook::react::UIManagerAnima public virtual void registerJSInvoker(std::shared_ptr jsInvoker) override; public virtual void stop(facebook::react::CallbackId callbackId) override; public virtual void trigger() override; - public void commitUpdates(facebook::react::SurfaceId surfaceId, facebook::react::SurfaceUpdates& surfaceUpdates); public void requestAsyncFlushForSurfaces(const std::set& surfaces); public void synchronouslyUpdateProps(const std::unordered_map& updates); + public ~AnimationBackend() override; } class facebook::react::AnimationBackendCommitHook : public facebook::react::UIManagerCommitHook { diff --git a/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api b/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api index 7fe953588d09..caa417e05392 100644 --- a/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api +++ b/scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api @@ -892,9 +892,9 @@ class facebook::react::AnimationBackend : public facebook::react::UIManagerAnima public virtual void registerJSInvoker(std::shared_ptr jsInvoker) override; public virtual void stop(facebook::react::CallbackId callbackId) override; public virtual void trigger() override; - public void commitUpdates(facebook::react::SurfaceId surfaceId, facebook::react::SurfaceUpdates& surfaceUpdates); public void requestAsyncFlushForSurfaces(const std::set& surfaces); public void synchronouslyUpdateProps(const std::unordered_map& updates); + public ~AnimationBackend() override; } class facebook::react::AnimationBackendCommitHook : public facebook::react::UIManagerCommitHook {