@@ -11,53 +11,30 @@ namespace winrt::Microsoft::ReactNative {
11
11
12
12
// Wrap up JSI Runtime into a LongLivedObject
13
13
struct LongLivedJsiRuntime : facebook::react::LongLivedObject {
14
- static std::weak_ptr<LongLivedJsiRuntime> CreateWeak (
15
- std::shared_ptr<facebook::react::LongLivedObjectCollection> const &longLivedObjectCollection,
16
- facebook::jsi::Runtime &runtime) noexcept {
17
- auto value = std::shared_ptr<LongLivedJsiRuntime>(new LongLivedJsiRuntime (longLivedObjectCollection, runtime));
18
- longLivedObjectCollection->add (value);
14
+ static std::weak_ptr<LongLivedJsiRuntime> CreateWeak (facebook::jsi::Runtime &runtime) noexcept {
15
+ auto value = std::shared_ptr<LongLivedJsiRuntime>(new LongLivedJsiRuntime (runtime));
16
+ auto &longLivedObjectCollection = facebook::react::LongLivedObjectCollection::get (runtime);
17
+ longLivedObjectCollection.add (value);
19
18
return value;
20
19
}
21
20
22
21
facebook::jsi::Runtime &Runtime () {
23
22
return runtime_;
24
23
}
25
24
26
- public: // LongLivedObject overrides
27
- void allowRelease () {
28
- if (auto longLivedObjectCollection = longLivedObjectCollection_.lock ()) {
29
- if (longLivedObjectCollection != nullptr ) {
30
- longLivedObjectCollection->remove (this );
31
- return ;
32
- }
33
- }
34
- LongLivedObject::allowRelease ();
35
- }
36
-
37
25
protected:
38
- LongLivedJsiRuntime (
39
- std::shared_ptr<facebook::react::LongLivedObjectCollection> const &longLivedObjectCollection,
40
- facebook::jsi::Runtime &runtime)
41
- : longLivedObjectCollection_(longLivedObjectCollection), runtime_(runtime) {}
42
-
26
+ LongLivedJsiRuntime (facebook::jsi::Runtime &runtime) : LongLivedObject(runtime) {}
43
27
LongLivedJsiRuntime (LongLivedJsiRuntime const &) = delete ;
44
-
45
- private:
46
- // Use a weak reference to the collection to avoid reference loops
47
- std::weak_ptr<facebook::react::LongLivedObjectCollection> longLivedObjectCollection_;
48
- facebook::jsi::Runtime &runtime_;
49
28
};
50
29
51
30
// Wrap up a JSI Value into a LongLivedObject.
52
31
template <typename TValue>
53
- struct LongLivedJsiValue : LongLivedJsiRuntime {
54
- static std::weak_ptr<LongLivedJsiValue<TValue>> CreateWeak (
55
- std::shared_ptr<facebook::react::LongLivedObjectCollection> const &longLivedObjectCollection,
56
- facebook::jsi::Runtime &runtime,
57
- TValue &&value) noexcept {
58
- auto valueWrapper = std::shared_ptr<LongLivedJsiValue<TValue>>(
59
- new LongLivedJsiValue<TValue>(longLivedObjectCollection, runtime, std::forward<TValue>(value)));
60
- longLivedObjectCollection->add (valueWrapper);
32
+ struct LongLivedJsiValue : facebook::react::LongLivedObject {
33
+ static std::weak_ptr<LongLivedJsiValue<TValue>> CreateWeak (facebook::jsi::Runtime &runtime, TValue &&value) noexcept {
34
+ auto valueWrapper =
35
+ std::shared_ptr<LongLivedJsiValue<TValue>>(new LongLivedJsiValue<TValue>(runtime, std::forward<TValue>(value)));
36
+ auto &longLivedObjectCollection = facebook::react::LongLivedObjectCollection::get (runtime);
37
+ longLivedObjectCollection.add (valueWrapper);
61
38
return valueWrapper;
62
39
}
63
40
@@ -67,11 +44,8 @@ struct LongLivedJsiValue : LongLivedJsiRuntime {
67
44
68
45
protected:
69
46
template <typename TValue2>
70
- LongLivedJsiValue (
71
- std::shared_ptr<facebook::react::LongLivedObjectCollection> const &longLivedObjectCollection,
72
- facebook::jsi::Runtime &runtime,
73
- TValue2 &&value)
74
- : LongLivedJsiRuntime(longLivedObjectCollection, runtime), value_(std::forward<TValue2>(value)) {}
47
+ LongLivedJsiValue (facebook::jsi::Runtime &runtime, TValue2 &&value)
48
+ : LongLivedObject(runtime), value_(std::forward<TValue2>(value)) {}
75
49
76
50
private:
77
51
TValue value_;
0 commit comments