diff --git a/change/react-native-windows-0a558ba3-d303-45d0-a29c-7b28ac826cad.json b/change/react-native-windows-0a558ba3-d303-45d0-a29c-7b28ac826cad.json new file mode 100644 index 00000000000..1d999fa6467 --- /dev/null +++ b/change/react-native-windows-0a558ba3-d303-45d0-a29c-7b28ac826cad.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Cleans up LongLivedObjectCollection created by RN Windows", + "packageName": "react-native-windows", + "email": "erozell@outlook.com", + "dependentChangeType": "patch" +} diff --git a/vnext/Microsoft.ReactNative.Cxx/JSI/LongLivedJsiValue.h b/vnext/Microsoft.ReactNative.Cxx/JSI/LongLivedJsiValue.h index cf47c906f3f..5cb813d0232 100644 --- a/vnext/Microsoft.ReactNative.Cxx/JSI/LongLivedJsiValue.h +++ b/vnext/Microsoft.ReactNative.Cxx/JSI/LongLivedJsiValue.h @@ -11,11 +11,10 @@ namespace winrt::Microsoft::ReactNative { // Wrap up JSI Runtime into a LongLivedObject struct LongLivedJsiRuntime : facebook::react::LongLivedObject { - static std::weak_ptr CreateWeak( - std::shared_ptr const &longLivedObjectCollection, - facebook::jsi::Runtime &runtime) noexcept { - auto value = std::shared_ptr(new LongLivedJsiRuntime(longLivedObjectCollection, runtime)); - longLivedObjectCollection->add(value); + static std::weak_ptr CreateWeak(facebook::jsi::Runtime &runtime) noexcept { + auto value = std::shared_ptr(new LongLivedJsiRuntime(runtime)); + auto &longLivedObjectCollection = facebook::react::LongLivedObjectCollection::get(runtime); + longLivedObjectCollection.add(value); return value; } @@ -23,41 +22,19 @@ struct LongLivedJsiRuntime : facebook::react::LongLivedObject { return runtime_; } - public: // LongLivedObject overrides - void allowRelease() { - if (auto longLivedObjectCollection = longLivedObjectCollection_.lock()) { - if (longLivedObjectCollection != nullptr) { - longLivedObjectCollection->remove(this); - return; - } - } - LongLivedObject::allowRelease(); - } - protected: - LongLivedJsiRuntime( - std::shared_ptr const &longLivedObjectCollection, - facebook::jsi::Runtime &runtime) - : longLivedObjectCollection_(longLivedObjectCollection), runtime_(runtime) {} - + LongLivedJsiRuntime(facebook::jsi::Runtime &runtime) : LongLivedObject(runtime) {} LongLivedJsiRuntime(LongLivedJsiRuntime const &) = delete; - - private: - // Use a weak reference to the collection to avoid reference loops - std::weak_ptr longLivedObjectCollection_; - facebook::jsi::Runtime &runtime_; }; // Wrap up a JSI Value into a LongLivedObject. template -struct LongLivedJsiValue : LongLivedJsiRuntime { - static std::weak_ptr> CreateWeak( - std::shared_ptr const &longLivedObjectCollection, - facebook::jsi::Runtime &runtime, - TValue &&value) noexcept { - auto valueWrapper = std::shared_ptr>( - new LongLivedJsiValue(longLivedObjectCollection, runtime, std::forward(value))); - longLivedObjectCollection->add(valueWrapper); +struct LongLivedJsiValue : facebook::react::LongLivedObject { + static std::weak_ptr> CreateWeak(facebook::jsi::Runtime &runtime, TValue &&value) noexcept { + auto valueWrapper = + std::shared_ptr>(new LongLivedJsiValue(runtime, std::forward(value))); + auto &longLivedObjectCollection = facebook::react::LongLivedObjectCollection::get(runtime); + longLivedObjectCollection.add(valueWrapper); return valueWrapper; } @@ -67,11 +44,8 @@ struct LongLivedJsiValue : LongLivedJsiRuntime { protected: template - LongLivedJsiValue( - std::shared_ptr const &longLivedObjectCollection, - facebook::jsi::Runtime &runtime, - TValue2 &&value) - : LongLivedJsiRuntime(longLivedObjectCollection, runtime), value_(std::forward(value)) {} + LongLivedJsiValue(facebook::jsi::Runtime &runtime, TValue2 &&value) + : LongLivedObject(runtime), value_(std::forward(value)) {} private: TValue value_; diff --git a/vnext/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp b/vnext/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp index 379b1b2e2f1..ebf89d1713f 100644 --- a/vnext/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +++ b/vnext/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp @@ -646,8 +646,7 @@ void ReactInstanceWin::InitializeBridgeless() noexcept { return turboModuleManager->getModule(name); }; - facebook::react::TurboModuleBinding::install( - runtime, std::function(binding), nullptr, m_options.TurboModuleProvider->LongLivedObjectCollection()); + facebook::react::TurboModuleBinding::install(runtime, std::function(binding)); auto componentDescriptorRegistry = Microsoft::ReactNative::WindowsComponentDescriptorRegistry::FromProperties( @@ -840,7 +839,6 @@ void ReactInstanceWin::InitializeWithBridge() noexcept { std::move(bundleRootPath), // bundleRootPath std::move(cxxModules), m_options.TurboModuleProvider, - m_options.TurboModuleProvider->LongLivedObjectCollection(), m_reactContext->Properties(), std::make_unique(weakThis), m_jsMessageThread.Load(), diff --git a/vnext/Microsoft.ReactNative/TurboModulesProvider.cpp b/vnext/Microsoft.ReactNative/TurboModulesProvider.cpp index ae112ba8127..c19b2e813f5 100644 --- a/vnext/Microsoft.ReactNative/TurboModulesProvider.cpp +++ b/vnext/Microsoft.ReactNative/TurboModulesProvider.cpp @@ -97,11 +97,9 @@ class TurboModuleImpl : public facebook::react::TurboModule { const IReactContext &reactContext, const std::string &name, const std::shared_ptr &jsInvoker, - std::weak_ptr longLivedObjectCollection, const ReactModuleProvider &reactModuleProvider) : facebook::react::TurboModule(name, jsInvoker), m_reactContext(reactContext), - m_longLivedObjectCollection(std::move(longLivedObjectCollection)), m_moduleBuilder(winrt::make_self(reactContext)), m_providedModule(reactModuleProvider(m_moduleBuilder.as())) { if (auto hostObject = m_providedModule.try_as()) { @@ -188,22 +186,18 @@ class TurboModuleImpl : public facebook::react::TurboModule { runtime, propName, 0, - [jsDispatcher = m_reactContext.JSDispatcher(), - method = methodInfo.Method, - longLivedObjectCollection = m_longLivedObjectCollection]( + [jsDispatcher = m_reactContext.JSDispatcher(), method = methodInfo.Method]( facebook::jsi::Runtime &rt, const facebook::jsi::Value & /*thisVal*/, const facebook::jsi::Value *args, size_t argCount) { VerifyElseCrash(argCount > 0); - if (auto strongLongLivedObjectCollection = longLivedObjectCollection.lock()) { - auto jsiRuntimeHolder = LongLivedJsiRuntime::CreateWeak(strongLongLivedObjectCollection, rt); - method( - winrt::make(rt, args, argCount - 1), - winrt::make(jsDispatcher, jsiRuntimeHolder), - MakeCallback(rt, strongLongLivedObjectCollection, args[argCount - 1]), - nullptr); - } + auto jsiRuntimeHolder = LongLivedJsiRuntime::CreateWeak(rt); + method( + winrt::make(rt, args, argCount - 1), + winrt::make(jsDispatcher, jsiRuntimeHolder), + MakeCallback(rt, args[argCount - 1]), + nullptr); return facebook::jsi::Value::undefined(); }); case MethodReturnType::TwoCallbacks: @@ -211,57 +205,53 @@ class TurboModuleImpl : public facebook::react::TurboModule { runtime, propName, 0, - [jsDispatcher = m_reactContext.JSDispatcher(), - method = methodInfo.Method, - longLivedObjectCollection = m_longLivedObjectCollection]( + [jsDispatcher = m_reactContext.JSDispatcher(), method = methodInfo.Method]( facebook::jsi::Runtime &rt, const facebook::jsi::Value & /*thisVal*/, const facebook::jsi::Value *args, size_t argCount) { VerifyElseCrash(argCount > 1); - if (auto strongLongLivedObjectCollection = longLivedObjectCollection.lock()) { - auto jsiRuntimeHolder = LongLivedJsiRuntime::CreateWeak(strongLongLivedObjectCollection, rt); - auto weakCallback1 = LongLivedJsiFunction::CreateWeak( - strongLongLivedObjectCollection, rt, args[argCount - 2].getObject(rt).getFunction(rt)); - auto weakCallback2 = LongLivedJsiFunction::CreateWeak( - strongLongLivedObjectCollection, rt, args[argCount - 1].getObject(rt).getFunction(rt)); - - method( - winrt::make(rt, args, argCount - 2), - winrt::make(jsDispatcher, jsiRuntimeHolder), - [weakCallback1, weakCallback2, jsiRuntimeHolder](const IJSValueWriter &writer) noexcept { - writer.as()->WithResultArgs( - [weakCallback1, weakCallback2, jsiRuntimeHolder]( - facebook::jsi::Runtime &rt, facebook::jsi::Value const *args, size_t count) { - if (auto callback1 = weakCallback1.lock()) { - callback1->Value().call(rt, args, count); - callback1->allowRelease(); - } - if (auto callback2 = weakCallback2.lock()) { - callback2->allowRelease(); - } - if (auto runtimeHolder = jsiRuntimeHolder.lock()) { - runtimeHolder->allowRelease(); - } - }); - }, - [weakCallback1, weakCallback2, jsiRuntimeHolder](const IJSValueWriter &writer) noexcept { - writer.as()->WithResultArgs( - [weakCallback1, weakCallback2, jsiRuntimeHolder]( - facebook::jsi::Runtime &rt, facebook::jsi::Value const *args, size_t count) { - if (auto callback2 = weakCallback2.lock()) { - callback2->Value().call(rt, args, count); - callback2->allowRelease(); - } - if (auto callback1 = weakCallback1.lock()) { - callback1->allowRelease(); - } - if (auto runtimeHolder = jsiRuntimeHolder.lock()) { - runtimeHolder->allowRelease(); - } - }); - }); - } + auto jsiRuntimeHolder = LongLivedJsiRuntime::CreateWeak(rt); + auto weakCallback1 = + LongLivedJsiFunction::CreateWeak(rt, args[argCount - 2].getObject(rt).getFunction(rt)); + auto weakCallback2 = + LongLivedJsiFunction::CreateWeak(rt, args[argCount - 1].getObject(rt).getFunction(rt)); + + method( + winrt::make(rt, args, argCount - 2), + winrt::make(jsDispatcher, jsiRuntimeHolder), + [weakCallback1, weakCallback2, jsiRuntimeHolder](const IJSValueWriter &writer) noexcept { + writer.as()->WithResultArgs( + [weakCallback1, weakCallback2, jsiRuntimeHolder]( + facebook::jsi::Runtime &rt, facebook::jsi::Value const *args, size_t count) { + if (auto callback1 = weakCallback1.lock()) { + callback1->Value().call(rt, args, count); + callback1->allowRelease(); + } + if (auto callback2 = weakCallback2.lock()) { + callback2->allowRelease(); + } + if (auto runtimeHolder = jsiRuntimeHolder.lock()) { + runtimeHolder->allowRelease(); + } + }); + }, + [weakCallback1, weakCallback2, jsiRuntimeHolder](const IJSValueWriter &writer) noexcept { + writer.as()->WithResultArgs( + [weakCallback1, weakCallback2, jsiRuntimeHolder]( + facebook::jsi::Runtime &rt, facebook::jsi::Value const *args, size_t count) { + if (auto callback2 = weakCallback2.lock()) { + callback2->Value().call(rt, args, count); + callback2->allowRelease(); + } + if (auto callback1 = weakCallback1.lock()) { + callback1->allowRelease(); + } + if (auto runtimeHolder = jsiRuntimeHolder.lock()) { + runtimeHolder->allowRelease(); + } + }); + }); return facebook::jsi::Value::undefined(); }); case MethodReturnType::Promise: @@ -269,82 +259,75 @@ class TurboModuleImpl : public facebook::react::TurboModule { runtime, propName, 0, - [jsDispatcher = m_reactContext.JSDispatcher(), - method = methodInfo.Method, - longLivedObjectCollection = m_longLivedObjectCollection]( + [jsDispatcher = m_reactContext.JSDispatcher(), method = methodInfo.Method]( facebook::jsi::Runtime &rt, const facebook::jsi::Value & /*thisVal*/, const facebook::jsi::Value *args, size_t count) { - if (auto strongLongLivedObjectCollection = longLivedObjectCollection.lock()) { - auto jsiRuntimeHolder = LongLivedJsiRuntime::CreateWeak(strongLongLivedObjectCollection, rt); - auto argReader = winrt::make(rt, args, count); - auto argWriter = winrt::make(jsDispatcher, jsiRuntimeHolder); - return facebook::react::createPromiseAsJSIValue( - rt, - [method, argReader, argWriter, strongLongLivedObjectCollection, jsiRuntimeHolder]( - facebook::jsi::Runtime &runtime, std::shared_ptr promise) { - auto weakResolve = LongLivedJsiFunction::CreateWeak( - strongLongLivedObjectCollection, runtime, std::move(promise->resolve_)); - auto weakReject = LongLivedJsiFunction::CreateWeak( - strongLongLivedObjectCollection, runtime, std::move(promise->reject_)); - method( - argReader, - argWriter, - [weakResolve, weakReject, jsiRuntimeHolder](const IJSValueWriter &writer) { - writer.as()->WithResultArgs( - [weakResolve, weakReject, jsiRuntimeHolder]( - facebook::jsi::Runtime &runtime, - facebook::jsi::Value const *args, - size_t argCount) { - VerifyElseCrash(argCount == 1); - if (auto resolveHolder = weakResolve.lock()) { - resolveHolder->Value().call(runtime, args[0]); - resolveHolder->allowRelease(); + auto jsiRuntimeHolder = LongLivedJsiRuntime::CreateWeak(rt); + auto argReader = winrt::make(rt, args, count); + auto argWriter = winrt::make(jsDispatcher, jsiRuntimeHolder); + return facebook::react::createPromiseAsJSIValue( + rt, + [method, argReader, argWriter, jsiRuntimeHolder]( + facebook::jsi::Runtime &runtime, std::shared_ptr promise) { + auto weakResolve = LongLivedJsiFunction::CreateWeak(runtime, std::move(promise->resolve_)); + auto weakReject = LongLivedJsiFunction::CreateWeak(runtime, std::move(promise->reject_)); + method( + argReader, + argWriter, + [weakResolve, weakReject, jsiRuntimeHolder](const IJSValueWriter &writer) { + writer.as()->WithResultArgs( + [weakResolve, weakReject, jsiRuntimeHolder]( + facebook::jsi::Runtime &runtime, + facebook::jsi::Value const *args, + size_t argCount) { + VerifyElseCrash(argCount == 1); + if (auto resolveHolder = weakResolve.lock()) { + resolveHolder->Value().call(runtime, args[0]); + resolveHolder->allowRelease(); + } + if (auto rejectHolder = weakReject.lock()) { + rejectHolder->allowRelease(); + } + if (auto runtimeHolder = jsiRuntimeHolder.lock()) { + runtimeHolder->allowRelease(); + } + }); + }, + [weakResolve, weakReject, jsiRuntimeHolder](const IJSValueWriter &writer) { + writer.as()->WithResultArgs( + [weakResolve, weakReject, jsiRuntimeHolder]( + facebook::jsi::Runtime &runtime, + facebook::jsi::Value const *args, + size_t argCount) { + VerifyElseCrash(argCount == 1); + if (auto rejectHolder = weakReject.lock()) { + // To match the Android and iOS TurboModule behavior we create the Error object + // for the Promise rejection the same way as in updateErrorWithErrorData method. + // See react-native/Libraries/BatchedBridge/NativeModules.js for details. + auto error = runtime.global() + .getPropertyAsFunction(runtime, "Error") + .callAsConstructor(runtime, {}); + auto &errorData = args[0]; + if (errorData.isObject()) { + runtime.global() + .getPropertyAsObject(runtime, "Object") + .getPropertyAsFunction(runtime, "assign") + .call(runtime, error, errorData.getObject(runtime)); } - if (auto rejectHolder = weakReject.lock()) { - rejectHolder->allowRelease(); - } - if (auto runtimeHolder = jsiRuntimeHolder.lock()) { - runtimeHolder->allowRelease(); - } - }); - }, - [weakResolve, weakReject, jsiRuntimeHolder](const IJSValueWriter &writer) { - writer.as()->WithResultArgs( - [weakResolve, weakReject, jsiRuntimeHolder]( - facebook::jsi::Runtime &runtime, - facebook::jsi::Value const *args, - size_t argCount) { - VerifyElseCrash(argCount == 1); - if (auto rejectHolder = weakReject.lock()) { - // To match the Android and iOS TurboModule behavior we create the Error object - // for the Promise rejection the same way as in updateErrorWithErrorData method. - // See react-native/Libraries/BatchedBridge/NativeModules.js for details. - auto error = runtime.global() - .getPropertyAsFunction(runtime, "Error") - .callAsConstructor(runtime, {}); - auto &errorData = args[0]; - if (errorData.isObject()) { - runtime.global() - .getPropertyAsObject(runtime, "Object") - .getPropertyAsFunction(runtime, "assign") - .call(runtime, error, errorData.getObject(runtime)); - } - rejectHolder->Value().call(runtime, args[0]); - rejectHolder->allowRelease(); - } - if (auto resolveHolder = weakResolve.lock()) { - resolveHolder->allowRelease(); - } - if (auto runtimeHolder = jsiRuntimeHolder.lock()) { - runtimeHolder->allowRelease(); - } - }); - }); - }); - } - return facebook::jsi::Value::undefined(); + rejectHolder->Value().call(runtime, args[0]); + rejectHolder->allowRelease(); + } + if (auto resolveHolder = weakResolve.lock()) { + resolveHolder->allowRelease(); + } + if (auto runtimeHolder = jsiRuntimeHolder.lock()) { + runtimeHolder->allowRelease(); + } + }); + }); + }); }); default: VerifyElseCrash(false); diff --git a/vnext/Microsoft.ReactNative/TurboModulesProvider.h b/vnext/Microsoft.ReactNative/TurboModulesProvider.h index bd40f7fe0c2..ab18feb61d5 100644 --- a/vnext/Microsoft.ReactNative/TurboModulesProvider.h +++ b/vnext/Microsoft.ReactNative/TurboModulesProvider.h @@ -26,12 +26,8 @@ class TurboModulesProvider final : public facebook::react::TurboModuleRegistry { winrt::hstring const &moduleName, ReactModuleProvider const &moduleProvider, bool overwriteExisting) noexcept; - std::shared_ptr const &LongLivedObjectCollection() noexcept; private: - // To keep a list of deferred asynchronous callbacks and promises. - std::shared_ptr m_longLivedObjectCollection{ - std::make_shared()}; std::unordered_map m_moduleProviders; IReactContext m_reactContext; }; diff --git a/vnext/Shared/CreateInstance.h b/vnext/Shared/CreateInstance.h index 3693877c3db..0e79c96cd01 100644 --- a/vnext/Shared/CreateInstance.h +++ b/vnext/Shared/CreateInstance.h @@ -15,7 +15,6 @@ std::shared_ptr CreateReactInstance( std::tuple>> &&cxxModules, std::shared_ptr turboModuleRegistry, - std::shared_ptr longLivedObjectCollection, const winrt::Microsoft::ReactNative::IReactPropertyBag &propertyBag, std::unique_ptr &&callback, std::shared_ptr jsQueue, diff --git a/vnext/Shared/InstanceManager.cpp b/vnext/Shared/InstanceManager.cpp index fd5e1644f06..a6fb83bdf84 100644 --- a/vnext/Shared/InstanceManager.cpp +++ b/vnext/Shared/InstanceManager.cpp @@ -40,7 +40,6 @@ std::shared_ptr CreateReactInstance( std::move(jsBundleBasePath), std::move(cxxModules), std::move(turboModuleRegistry), - nullptr, // longLivedObjectCollection nullptr, // PropertyBag std::move(callback), std::move(jsQueue), @@ -58,7 +57,6 @@ std::shared_ptr CreateReactInstance( std::tuple>> &&cxxModules, std::shared_ptr turboModuleRegistry, - std::shared_ptr longLivedObjectCollection, const winrt::Microsoft::ReactNative::IReactPropertyBag &propertyBag, std::unique_ptr &&callback, std::shared_ptr jsQueue, @@ -70,7 +68,6 @@ std::shared_ptr CreateReactInstance( std::move(jsBundleBasePath), std::move(cxxModules), std::move(turboModuleRegistry), - std::move(longLivedObjectCollection), propertyBag, std::move(callback), std::move(jsQueue), diff --git a/vnext/Shared/OInstance.cpp b/vnext/Shared/OInstance.cpp index ece2c869a9c..2dbbebad887 100644 --- a/vnext/Shared/OInstance.cpp +++ b/vnext/Shared/OInstance.cpp @@ -268,7 +268,6 @@ void logMarker(const facebook::react::ReactMarker::ReactMarkerId /*id*/, const c std::tuple>> &&cxxModules, std::shared_ptr turboModuleRegistry, - std::shared_ptr longLivedObjectCollection, const winrt::Microsoft::ReactNative::IReactPropertyBag &propertyBag, std::unique_ptr &&callback, std::shared_ptr jsQueue, @@ -280,7 +279,6 @@ void logMarker(const facebook::react::ReactMarker::ReactMarkerId /*id*/, const c std::move(jsBundleBasePath), std::move(cxxModules), std::move(turboModuleRegistry), - std::move(longLivedObjectCollection), propertyBag, std::move(callback), std::move(jsQueue), @@ -350,7 +348,6 @@ InstanceImpl::InstanceImpl( std::tuple>> &&cxxModules, std::shared_ptr turboModuleRegistry, - std::shared_ptr longLivedObjectCollection, const winrt::Microsoft::ReactNative::IReactPropertyBag &propertyBag, std::unique_ptr &&callback, std::shared_ptr jsQueue, @@ -358,7 +355,6 @@ InstanceImpl::InstanceImpl( std::shared_ptr devSettings, std::shared_ptr devManager) : m_turboModuleRegistry(std::move(turboModuleRegistry)), - m_longLivedObjectCollection(std::move(longLivedObjectCollection)), m_jsThread(std::move(jsQueue)), m_nativeQueue(nativeQueue), m_jsBundleBasePath(std::move(jsBundleBasePath)), @@ -508,8 +504,7 @@ InstanceImpl::InstanceImpl( innerInstance = m_innerInstance, runtimeHolder = m_devSettings->jsiRuntimeHolder, runtimeScheduler = m_runtimeScheduler, - turboModuleRegistry = m_turboModuleRegistry, - longLivedObjectCollection = m_longLivedObjectCollection]() { + turboModuleRegistry = m_turboModuleRegistry]() { if (runtimeScheduler) { RuntimeSchedulerBinding::createAndInstallIfNeeded(*runtimeHolder->getRuntime(), runtimeScheduler); } @@ -519,14 +514,11 @@ InstanceImpl::InstanceImpl( : innerInstance->getJSCallInvoker()); // TODO: The binding here should also add the proxys that convert cxxmodules into turbomodules - // [@vmoroz] Note, that we must not use the RN TurboCxxModule.h code because it uses global - // LongLivedObjectCollection instance that prevents us from using multiple RN instance in the same process. auto binding = [turboModuleManager](const std::string &name) -> std::shared_ptr { return turboModuleManager->getModule(name); }; - TurboModuleBinding::install( - *runtimeHolder->getRuntime(), std::function(binding), nullptr, longLivedObjectCollection); + TurboModuleBinding::install(*runtimeHolder->getRuntime(), std::function(binding)); // init TurboModule for (const auto &moduleName : turboModuleManager->getEagerInitModuleNames()) { diff --git a/vnext/Shared/OInstance.h b/vnext/Shared/OInstance.h index 94edbaaaa24..a767f293f89 100644 --- a/vnext/Shared/OInstance.h +++ b/vnext/Shared/OInstance.h @@ -10,7 +10,6 @@ #include "InstanceManager.h" // React Native -#include #include #include @@ -34,7 +33,6 @@ class InstanceImpl final : public InstanceWrapper, private ::std::enable_shared_ std::tuple>> &&cxxModules, std::shared_ptr turboModuleRegistry, - std::shared_ptr longLivedObjectCollection, const winrt::Microsoft::ReactNative::IReactPropertyBag &propertyBag, std::unique_ptr &&callback, std::shared_ptr jsQueue, @@ -76,7 +74,6 @@ class InstanceImpl final : public InstanceWrapper, private ::std::enable_shared_ std::tuple>> &&cxxModules, std::shared_ptr turboModuleRegistry, - std::shared_ptr longLivedObjectCollection, const winrt::Microsoft::ReactNative::IReactPropertyBag &propertyBag, std::unique_ptr &&callback, std::shared_ptr jsQueue, @@ -96,7 +93,6 @@ class InstanceImpl final : public InstanceWrapper, private ::std::enable_shared_ std::string m_jsBundleBasePath; std::shared_ptr m_moduleRegistry; std::shared_ptr m_turboModuleRegistry; - std::shared_ptr m_longLivedObjectCollection; std::shared_ptr m_jsThread; std::shared_ptr m_nativeQueue;