From bf974e8de1b31afca057f7642f5ac64cba6db2fc Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Sun, 25 May 2025 04:20:59 -0700 Subject: [PATCH] remove enable_shared_from_this from NativeAnimatedNodesManager (#51589) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/51589 changelog: [internal] With D75140890, there is a guarantee that `startOnRenderCallback_` won't be called after the owning class is destroyed. There shouldn't be any events flowing through Fabric when the RN instance is torn down. Passing this to eventEmitterListener_ should be safe. This helps with C++ binary size a little bit. Reviewed By: rshest Differential Revision: D75148616 fbshipit-source-id: 5110736c2ddcff738fce395bd0b9844d44e8dcb2 --- .../renderer/animated/NativeAnimatedNodesManager.cpp | 12 +++--------- .../renderer/animated/NativeAnimatedNodesManager.h | 3 +-- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/packages/react-native/ReactCxxPlatform/react/renderer/animated/NativeAnimatedNodesManager.cpp b/packages/react-native/ReactCxxPlatform/react/renderer/animated/NativeAnimatedNodesManager.cpp index ea00876744c..7c5022a467b 100644 --- a/packages/react-native/ReactCxxPlatform/react/renderer/animated/NativeAnimatedNodesManager.cpp +++ b/packages/react-native/ReactCxxPlatform/react/renderer/animated/NativeAnimatedNodesManager.cpp @@ -427,13 +427,11 @@ std::shared_ptr NativeAnimatedNodesManager::ensureEventEmitterListener() noexcept { if (!eventEmitterListener_) { eventEmitterListener_ = std::make_shared( - [weakSelf = weak_from_this()]( + [this]( Tag tag, const std::string& eventName, const EventPayload& payload) -> bool { - if (auto self = weakSelf.lock()) { - self->handleAnimatedEvent(tag, eventName, payload); - } + handleAnimatedEvent(tag, eventName, payload); return false; }); } @@ -442,11 +440,7 @@ NativeAnimatedNodesManager::ensureEventEmitterListener() noexcept { void NativeAnimatedNodesManager::startRenderCallbackIfNeeded() { if (startOnRenderCallback_) { - startOnRenderCallback_([weakSelf = weak_from_this()]() { - if (auto self = weakSelf.lock()) { - self->onRender(); - } - }); + startOnRenderCallback_([this]() { onRender(); }); if (isOnRenderThread_) { // Calling startOnRenderCallback_ will register a UI tick listener. diff --git a/packages/react-native/ReactCxxPlatform/react/renderer/animated/NativeAnimatedNodesManager.h b/packages/react-native/ReactCxxPlatform/react/renderer/animated/NativeAnimatedNodesManager.h index 7365990b738..8c851eedbff 100644 --- a/packages/react-native/ReactCxxPlatform/react/renderer/animated/NativeAnimatedNodesManager.h +++ b/packages/react-native/ReactCxxPlatform/react/renderer/animated/NativeAnimatedNodesManager.h @@ -41,8 +41,7 @@ template <> struct Bridging : NativeAnimatedTurboModuleEndResultBridging {}; -class NativeAnimatedNodesManager - : public std::enable_shared_from_this { +class NativeAnimatedNodesManager { public: using DirectManipulationCallback = std::function;