@@ -24,7 +24,7 @@ class RnExecutorchInstaller {
2424 static void
2525 injectJSIBindings (jsi::Runtime *jsiRuntime,
2626 std::shared_ptr<react::CallInvoker> jsCallInvoker,
27- FetchUrlFunc_t fetchDataFromUrl);
27+ FetchUrlFunc_t fetchDataFromUrl, bool isEmulator );
2828
2929private:
3030 template <typename ModelT>
@@ -56,72 +56,67 @@ class RnExecutorchInstaller {
5656 // access), then dispatch the heavy model construction to a background
5757 // thread and return a Promise.
5858 auto constructorArgs =
59- meta::createConstructorArgsWithCallInvoker<ModelT>(
60- args, runtime, jsCallInvoker);
59+ meta::createConstructorArgsWithCallInvoker<ModelT>(args, runtime,
60+ jsCallInvoker);
6161
6262 return Promise::createPromise (
6363 runtime, jsCallInvoker,
64- [jsCallInvoker,
65- constructorArgs =
66- std::move (constructorArgs)](std::shared_ptr<Promise> promise) {
67- threads::GlobalThreadPool::detach (
68- [jsCallInvoker, promise,
69- constructorArgs = std::move (constructorArgs)]() {
70- try {
71- auto modelImplementationPtr = std::apply (
72- [](auto &&...unpackedArgs ) {
73- return std::make_shared<ModelT>(
74- std::forward<decltype (unpackedArgs)>(
75- unpackedArgs)...);
76- },
77- std::move (constructorArgs));
64+ [jsCallInvoker, constructorArgs = std::move (constructorArgs)](
65+ std::shared_ptr<Promise> promise) {
66+ threads::GlobalThreadPool::detach ([jsCallInvoker, promise,
67+ constructorArgs = std::move (
68+ constructorArgs)]() {
69+ try {
70+ auto modelImplementationPtr = std::apply (
71+ [](auto &&...unpackedArgs ) {
72+ return std::make_shared<ModelT>(
73+ std::forward<decltype (unpackedArgs)>(
74+ unpackedArgs)...);
75+ },
76+ std::move (constructorArgs));
7877
79- auto modelHostObject =
80- std::make_shared<ModelHostObject<ModelT>>(
81- modelImplementationPtr, jsCallInvoker);
78+ auto modelHostObject =
79+ std::make_shared<ModelHostObject<ModelT>>(
80+ modelImplementationPtr, jsCallInvoker);
8281
83- auto memoryLowerBound =
84- modelImplementationPtr->getMemoryLowerBound ();
82+ auto memoryLowerBound =
83+ modelImplementationPtr->getMemoryLowerBound ();
8584
86- jsCallInvoker->invokeAsync (
87- [promise, modelHostObject,
88- memoryLowerBound](jsi::Runtime &rt) {
89- auto jsiObject =
90- jsi::Object::createFromHostObject (
91- rt, modelHostObject);
92- jsiObject.setExternalMemoryPressure (
93- rt, memoryLowerBound);
94- promise->resolve (std::move (jsiObject));
95- });
96- } catch (const rnexecutorch::RnExecutorchError &e) {
97- auto code = e.getNumericCode ();
98- auto msg = std::string (e.what ());
99- jsCallInvoker->invokeAsync (
100- [promise, code, msg](jsi::Runtime &rt) {
101- jsi::Object errorData (rt);
102- errorData.setProperty (rt, " code" , code);
103- errorData.setProperty (
104- rt, " message" ,
105- jsi::String::createFromUtf8 (rt, msg));
106- promise->reject (
107- jsi::Value (rt, std::move (errorData)));
108- });
109- } catch (const std::runtime_error &e) {
110- jsCallInvoker->invokeAsync (
111- [promise, msg = std::string (e.what ())]() {
112- promise->reject (msg);
113- });
114- } catch (const std::exception &e) {
115- jsCallInvoker->invokeAsync (
116- [promise, msg = std::string (e.what ())]() {
117- promise->reject (msg);
118- });
119- } catch (...) {
120- jsCallInvoker->invokeAsync ([promise]() {
121- promise->reject (std::string (" Unknown error" ));
85+ jsCallInvoker->invokeAsync ([promise, modelHostObject,
86+ memoryLowerBound](
87+ jsi::Runtime &rt) {
88+ auto jsiObject = jsi::Object::createFromHostObject (
89+ rt, modelHostObject);
90+ jsiObject.setExternalMemoryPressure (rt, memoryLowerBound);
91+ promise->resolve (std::move (jsiObject));
92+ });
93+ } catch (const rnexecutorch::RnExecutorchError &e) {
94+ auto code = e.getNumericCode ();
95+ auto msg = std::string (e.what ());
96+ jsCallInvoker->invokeAsync ([promise, code,
97+ msg](jsi::Runtime &rt) {
98+ jsi::Object errorData (rt);
99+ errorData.setProperty (rt, " code" , code);
100+ errorData.setProperty (
101+ rt, " message" , jsi::String::createFromUtf8 (rt, msg));
102+ promise->reject (jsi::Value (rt, std::move (errorData)));
103+ });
104+ } catch (const std::runtime_error &e) {
105+ jsCallInvoker->invokeAsync (
106+ [promise, msg = std::string (e.what ())]() {
107+ promise->reject (msg);
108+ });
109+ } catch (const std::exception &e) {
110+ jsCallInvoker->invokeAsync (
111+ [promise, msg = std::string (e.what ())]() {
112+ promise->reject (msg);
122113 });
123- }
114+ } catch (...) {
115+ jsCallInvoker->invokeAsync ([promise]() {
116+ promise->reject (std::string (" Unknown error" ));
124117 });
118+ }
119+ });
125120 });
126121 });
127122 }
0 commit comments