33
44#include " pch.h"
55
6- #include < memory>
7- #include < mutex>
6+ #include " HermesRuntimeHolder.h"
87
98#include < JSI/decorator.h>
109#include < cxxreact/MessageQueueThread.h>
1110#include < cxxreact/SystraceSection.h>
1211#include < hermes/hermes.h>
13- #include " HermesRuntimeHolder.h"
1412#include " HermesShim.h"
1513
1614#if defined(HERMES_ENABLE_DEBUGGER)
1715#include < hermes/inspector/chrome/Registration.h>
1816#endif
1917
18+ #include < memory>
19+ #include < mutex>
20+
2021using namespace facebook ;
2122using namespace Microsoft ::ReactNative;
2223
2324namespace React {
2425using namespace winrt ::Microsoft::ReactNative;
2526}
2627
27- namespace facebook {
28- namespace react {
28+ namespace facebook ::react {
2929
3030React::ReactPropertyId<React::ReactNonAbiValue<std::shared_ptr<HermesRuntimeHolder>>>
3131HermesRuntimeHolderProperty () noexcept {
@@ -36,16 +36,6 @@ HermesRuntimeHolderProperty() noexcept {
3636
3737namespace {
3838
39- std::unique_ptr<facebook::hermes::HermesRuntime> makeHermesRuntimeSystraced (bool enableDefaultCrashHandler) {
40- SystraceSection s (" HermesExecutorFactory::makeHermesRuntimeSystraced" );
41- if (enableDefaultCrashHandler) {
42- return HermesShim::makeHermesRuntimeWithWER ();
43- } else {
44- auto runtimeConfig = ::hermes::vm::RuntimeConfig ();
45- return HermesShim::makeHermesRuntime (runtimeConfig);
46- }
47- }
48-
4939#ifdef HERMES_ENABLE_DEBUGGER
5040class HermesExecutorRuntimeAdapter final : public facebook::hermes::inspector::RuntimeAdapter {
5141 public:
@@ -82,10 +72,19 @@ class HermesExecutorRuntimeAdapter final : public facebook::hermes::inspector::R
8272};
8373#endif
8474
75+ std::shared_ptr<HermesShim> makeHermesShimSystraced (bool enableDefaultCrashHandler) {
76+ SystraceSection s (" HermesExecutorFactory::makeHermesRuntimeSystraced" );
77+ if (enableDefaultCrashHandler) {
78+ return HermesShim::makeWithWER ();
79+ } else {
80+ return HermesShim::make ();
81+ }
82+ }
83+
8584} // namespace
8685
8786void HermesRuntimeHolder::crashHandler (int fileDescriptor) noexcept {
88- HermesShim::hermesCrashHandler (*m_hermesRuntime, fileDescriptor);
87+ m_hermesShim-> dumpCrashData ( fileDescriptor);
8988}
9089
9190void HermesRuntimeHolder::teardown () noexcept {
@@ -101,19 +100,9 @@ facebook::react::JSIEngineOverride HermesRuntimeHolder::getRuntimeType() noexcep
101100}
102101
103102std::shared_ptr<jsi::Runtime> HermesRuntimeHolder::getRuntime () noexcept {
104- return getHermesRuntime ();
105- }
106-
107- std::shared_ptr<facebook::hermes::HermesRuntime> HermesRuntimeHolder::getHermesRuntime () noexcept {
108- std::call_once (m_once_flag, [this ]() { initRuntime (); });
109-
110- if (!m_hermesRuntime)
111- std::terminate ();
112-
113- // Make sure that the runtime instance is not consumed from multiple threads.
114- if (m_own_thread_id != std::this_thread::get_id ())
115- std::terminate ();
116-
103+ std::call_once (m_onceFlag, [this ]() { initRuntime (); });
104+ VerifyElseCrash (m_hermesRuntime);
105+ VerifyElseCrashSz (m_ownThreadId == std::this_thread::get_id (), " Must be accessed from JS thread." );
117106 return m_hermesRuntime;
118107}
119108
@@ -124,11 +113,11 @@ HermesRuntimeHolder::HermesRuntimeHolder(
124113
125114void HermesRuntimeHolder::initRuntime () noexcept {
126115 auto devSettings = m_weakDevSettings.lock ();
127- if (!devSettings)
128- std::terminate ();
116+ VerifyElseCrash (devSettings);
129117
130- m_hermesRuntime = makeHermesRuntimeSystraced (devSettings->enableDefaultCrashHandler );
131- m_own_thread_id = std::this_thread::get_id ();
118+ m_hermesShim = makeHermesShimSystraced (devSettings->enableDefaultCrashHandler );
119+ m_hermesRuntime = m_hermesShim->getRuntime ();
120+ m_ownThreadId = std::this_thread::get_id ();
132121
133122#ifdef HERMES_ENABLE_DEBUGGER
134123 if (devSettings->useDirectDebugger ) {
@@ -158,5 +147,12 @@ void HermesRuntimeHolder::storeTo(
158147 propertyBag.Set (HermesRuntimeHolderProperty (), holder);
159148}
160149
161- } // namespace react
162- } // namespace facebook
150+ void HermesRuntimeHolder::addToProfiling () const noexcept {
151+ m_hermesShim->addToProfiling ();
152+ }
153+
154+ void HermesRuntimeHolder::removeFromProfiling () const noexcept {
155+ m_hermesShim->removeFromProfiling ();
156+ }
157+
158+ } // namespace facebook::react
0 commit comments