From 656777657fd4709ccd013e13b66854819bf7ab9d Mon Sep 17 00:00:00 2001 From: Krzysztof Piaskowy Date: Tue, 8 Sep 2026 16:16:22 +0200 Subject: [PATCH] Revert "[Android] shadow-tree commit-lifecycle hooks (#100)" This reverts commit 9eee718a8f3e832a37f095916cfbfa366719d3ec. The shadowTreeCommitSucceeded / shadowTreeCommitFinalized hooks existed only to make Reanimated's props-registry equality eviction race-free. That eviction turned out to be performance neutral and has been removed from the Reanimated fork, so nothing overrides these hooks anymore and the fork can drop the divergence from upstream in ShadowTree, ShadowTreeDelegate, UIManager and UIManagerCommitHook. Also restores the configureEventEmitterCallback() call in SampleTurboModuleSpec.cpp, which that commit had incidentally commented out. Co-authored-by: Cursor --- .../ReactCommon/SampleTurboModuleSpec.cpp | 2 +- .../react/renderer/mounting/ShadowTree.cpp | 14 -------------- .../react/renderer/mounting/ShadowTreeDelegate.h | 5 ----- .../react/renderer/uimanager/UIManager.cpp | 16 ---------------- .../react/renderer/uimanager/UIManager.h | 3 --- .../renderer/uimanager/UIManagerCommitHook.h | 5 ----- 6 files changed, 1 insertion(+), 44 deletions(-) diff --git a/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp b/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp index 4ee72ae8f6ff..f004350f4383 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp @@ -401,7 +401,7 @@ NativeSampleTurboModuleSpecJSI::NativeSampleTurboModuleSpecJSI( std::make_shared>(); eventEmitterMap_["onSubmit"] = std::make_shared>(); -// configureEventEmitterCallback(); + configureEventEmitterCallback(); } std::shared_ptr SampleTurboModuleSpec_ModuleProvider( diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp index 3789a67d1487..0a4aeb154282 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -22,16 +22,6 @@ #include "ShadowTreeDelegate.h" #include -// Discord - Wrap with ScopeGuard for a function to run on the end of the scope: -#include -struct ScopeGuard { - std::function fn; - ~ScopeGuard() { fn(); } -}; -#define CONCAT_IMPL(x, y) x##y -#define CONCAT(x, y) CONCAT_IMPL(x, y) -#define defer(code) ScopeGuard CONCAT(defer, LINE)([&](){code;}) - namespace facebook::react { namespace { @@ -405,7 +395,6 @@ CommitStatus ShadowTree::tryCommit( *this, oldRootShadowNode, newRootShadowNode, commitOptions); if (!newRootShadowNode) { - delegate_.shadowTreeCommitFinalized(commitOptions); return CommitStatus::Cancelled; } @@ -427,7 +416,6 @@ CommitStatus ShadowTree::tryCommit( // Updating `currentRevision_` in unique manner if it hasn't changed. UniqueLock lock = uniqueRevisionLock( /*defer*/ isReactBranch); - defer(delegate_.shadowTreeCommitFinalized(commitOptions)); if (!isReactBranch && currentRevision_.number != oldRevision.number) { return CommitStatus::Failed; @@ -435,8 +423,6 @@ CommitStatus ShadowTree::tryCommit( auto newRevisionNumber = currentRevision_.number + 1; - delegate_.shadowTreeCommitSucceeded(commitOptions); - { std::scoped_lock dispatchLock(EventEmitter::DispatchMutex()); updateMountedFlag( diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h index 858a842a4014..3dde9c5837c8 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h @@ -49,11 +49,6 @@ class ShadowTreeDelegate { */ virtual void shadowTreeDidPromoteReactRevision(const ShadowTree &shadowTree) const = 0; - // Called after a commit is known to succeed, however, still under the commit lock - virtual void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const {} - // Will be called in each case once we are done with the current commit attempt - virtual void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const {} - virtual ~ShadowTreeDelegate() noexcept = default; }; diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp index 1965c5c46ea8..4d640400dc12 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp @@ -655,22 +655,6 @@ RootShadowNode::Unshared UIManager::shadowTreeWillCommit( return resultRootShadowNode; } -void UIManager::shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const { - std::shared_lock lock(commitHookMutex_); - - for (auto* commitHook : commitHooks_) { - commitHook->shadowTreeCommitSucceeded(commitOptions); - } -} - -void UIManager::shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const { - std::shared_lock lock(commitHookMutex_); - - for (auto* commitHook : commitHooks_) { - commitHook->shadowTreeCommitFinalized(commitOptions); - } -} - void UIManager::shadowTreeDidFinishTransaction( std::shared_ptr mountingCoordinator, bool mountSynchronously) const { diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h index 863517e45e8b..28b8729e3e01 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h @@ -146,9 +146,6 @@ class UIManager final : public ShadowTreeDelegate { void shadowTreeDidPromoteReactRevision(const ShadowTree &shadowTree) const override; - void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) const override; - void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) const override; - std::shared_ptr createNode( Tag tag, const std::string &componentName, diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h index 351af66a140d..8c34b59ac03f 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h @@ -54,11 +54,6 @@ class UIManagerCommitHook { return newRootShadowNode; } - // Discord - Called after a commit is known to succeed, however, still under the commit lock - virtual void shadowTreeCommitSucceeded(const ShadowTreeCommitOptions& commitOptions) {} - // Discord - Will be called in each case once we are done with the current commit attempt - virtual void shadowTreeCommitFinalized(const ShadowTreeCommitOptions& commitOptions) {} - virtual ~UIManagerCommitHook() noexcept = default; };