Skip to content

Commit 3706bf0

Browse files
fabriziocuccifacebook-github-bot
authored andcommitted
Scope LongLivedObjectCollection per runtime [2/n] (#43409)
Summary: Pull Request resolved: #43409 Changelog: [General] [Breaking] - Make `LongLivedObject` constructor accept a `Runtime` reference. # Context Approach 1 as described in [RFC post](https://fb.workplace.com/groups/615693552291894/permalink/1693347124526526/). # This diff * Embed `Runtime` reference in `LongLivedObject` to keep supporting `allowRelease` method (and update extending classes accordingly) * Update MSFT fork accordingly Reviewed By: RSNara Differential Revision: D54638813 fbshipit-source-id: 0d58d1c32b3689bdd1223c13f5d5ee2f2e15f223
1 parent c6076bc commit 3706bf0

5 files changed

Lines changed: 12 additions & 8 deletions

File tree

packages/react-native/ReactCommon/react/bridging/CallbackWrapper.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,11 @@ class CallbackWrapper : public LongLivedObject {
2424
jsi::Function&& callback,
2525
jsi::Runtime& runtime,
2626
std::shared_ptr<CallInvoker> jsInvoker)
27-
: callback_(std::move(callback)),
28-
runtime_(runtime),
27+
: LongLivedObject(runtime),
28+
callback_(std::move(callback)),
2929
jsInvoker_(std::move(jsInvoker)) {}
3030

3131
jsi::Function callback_;
32-
jsi::Runtime& runtime_;
3332
std::shared_ptr<CallInvoker> jsInvoker_;
3433

3534
public:

packages/react-native/ReactCommon/react/bridging/LongLivedObject.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#pragma once
99

10+
#include <jsi/jsi.h>
1011
#include <memory>
1112
#include <mutex>
1213
#include <unordered_set>
@@ -31,8 +32,9 @@ class LongLivedObject {
3132
virtual void allowRelease();
3233

3334
protected:
34-
LongLivedObject() = default;
35+
explicit LongLivedObject(jsi::Runtime& runtime) : runtime_(runtime) {}
3536
virtual ~LongLivedObject() = default;
37+
jsi::Runtime& runtime_;
3638
};
3739

3840
/**

packages/react-native/ReactCommon/react/bridging/Promise.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ class AsyncPromise {
3434
},
3535
jsInvoker));
3636

37-
auto promiseHolder = std::make_shared<PromiseHolder>(promise.asObject(rt));
37+
auto promiseHolder =
38+
std::make_shared<PromiseHolder>(rt, promise.asObject(rt));
3839
LongLivedObjectCollection::get().add(promiseHolder);
3940

4041
// The shared state can retain the promise holder weakly now.
@@ -71,7 +72,8 @@ class AsyncPromise {
7172

7273
private:
7374
struct PromiseHolder : LongLivedObject {
74-
PromiseHolder(jsi::Object p) : promise(std::move(p)) {}
75+
PromiseHolder(jsi::Runtime& runtime, jsi::Object p)
76+
: LongLivedObject(runtime), promise(std::move(p)) {}
7577

7678
jsi::Object promise;
7779
};

packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleUtils.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@ jsi::Array deepCopyJSIArray(jsi::Runtime& rt, const jsi::Array& arr) {
6363
}
6464

6565
Promise::Promise(jsi::Runtime& rt, jsi::Function resolve, jsi::Function reject)
66-
: runtime_(rt), resolve_(std::move(resolve)), reject_(std::move(reject)) {}
66+
: LongLivedObject(rt),
67+
resolve_(std::move(resolve)),
68+
reject_(std::move(reject)) {}
6769

6870
void Promise::resolve(const jsi::Value& result) {
6971
resolve_.call(runtime_, result);

packages/react-native/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleUtils.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ struct Promise : public LongLivedObject {
2626
void resolve(const jsi::Value& result);
2727
void reject(const std::string& error);
2828

29-
jsi::Runtime& runtime_;
3029
jsi::Function resolve_;
3130
jsi::Function reject_;
3231
};

0 commit comments

Comments
 (0)