1*5f154df9Saleqsio #include "ReanimatedRuntime.h"
2*5f154df9Saleqsio 
3*5f154df9Saleqsio #include <cxxreact/MessageQueueThread.h>
4*5f154df9Saleqsio #include <jsi/jsi.h>
5*5f154df9Saleqsio 
6*5f154df9Saleqsio #include <memory>
7*5f154df9Saleqsio #include <utility>
8*5f154df9Saleqsio 
9*5f154df9Saleqsio #if JS_RUNTIME_HERMES
10*5f154df9Saleqsio #include "ReanimatedHermesRuntime.h"
11*5f154df9Saleqsio #elif JS_RUNTIME_V8
12*5f154df9Saleqsio #include <v8runtime/V8RuntimeFactory.h>
13*5f154df9Saleqsio #else
14*5f154df9Saleqsio #if REACT_NATIVE_MINOR_VERSION >= 71
15*5f154df9Saleqsio #include <jsc/JSCRuntime.h>
16*5f154df9Saleqsio #else
17*5f154df9Saleqsio #include <jsi/JSCRuntime.h>
18*5f154df9Saleqsio #endif // REACT_NATIVE_MINOR_VERSION
19*5f154df9Saleqsio #endif // JS_RUNTIME
20*5f154df9Saleqsio 
21*5f154df9Saleqsio namespace reanimated {
22*5f154df9Saleqsio 
23*5f154df9Saleqsio using namespace facebook;
24*5f154df9Saleqsio using namespace react;
25*5f154df9Saleqsio 
make(jsi::Runtime * rnRuntime,std::shared_ptr<MessageQueueThread> jsQueue)26*5f154df9Saleqsio std::shared_ptr<jsi::Runtime> ReanimatedRuntime::make(
27*5f154df9Saleqsio     jsi::Runtime *rnRuntime,
28*5f154df9Saleqsio     std::shared_ptr<MessageQueueThread> jsQueue) {
29*5f154df9Saleqsio #if JS_RUNTIME_HERMES
30*5f154df9Saleqsio   std::unique_ptr<facebook::hermes::HermesRuntime> runtime =
31*5f154df9Saleqsio       facebook::hermes::makeHermesRuntime();
32*5f154df9Saleqsio 
33*5f154df9Saleqsio   // We don't call `jsQueue->quitSynchronous()` here, since it will be done
34*5f154df9Saleqsio   // later in ReanimatedHermesRuntime
35*5f154df9Saleqsio 
36*5f154df9Saleqsio   return std::make_shared<ReanimatedHermesRuntime>(std::move(runtime), jsQueue);
37*5f154df9Saleqsio #elif JS_RUNTIME_V8
38*5f154df9Saleqsio   // This is required by iOS, because there is an assertion in the destructor
39*5f154df9Saleqsio   // that the thread was indeed `quit` before.
40*5f154df9Saleqsio   jsQueue->quitSynchronous();
41*5f154df9Saleqsio 
42*5f154df9Saleqsio   auto config = std::make_unique<rnv8::V8RuntimeConfig>();
43*5f154df9Saleqsio   config->enableInspector = false;
44*5f154df9Saleqsio   config->appName = "reanimated";
45*5f154df9Saleqsio   return rnv8::createSharedV8Runtime(rnRuntime, std::move(config));
46*5f154df9Saleqsio #else
47*5f154df9Saleqsio   // This is required by iOS, because there is an assertion in the destructor
48*5f154df9Saleqsio   // that the thread was indeed `quit` before
49*5f154df9Saleqsio   jsQueue->quitSynchronous();
50*5f154df9Saleqsio 
51*5f154df9Saleqsio   return facebook::jsc::makeJSCRuntime();
52*5f154df9Saleqsio #endif
53*5f154df9Saleqsio }
54*5f154df9Saleqsio 
55*5f154df9Saleqsio } // namespace reanimated
56