diff --git a/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutorFactory.cpp b/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutorFactory.cpp index e313d4ea771..5f19e827a77 100644 --- a/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutorFactory.cpp +++ b/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutorFactory.cpp @@ -50,18 +50,21 @@ class HermesExecutorRuntimeAdapter virtual ~HermesExecutorRuntimeAdapter() = default; - HermesRuntime &getRuntime() override { - return hermesRuntime_; + jsi::Runtime &getRuntime() override { + return *runtime_; + } + + debugger::Debugger &getDebugger() override { + return hermesRuntime_.getDebugger(); } void tickleJs() override { // The queue will ensure that runtime_ is still valid when this // gets invoked. - // clang-format off - thread_->runOnQueue([&runtime = hermesRuntime_]() { - // clang-format on - auto func = runtime.global().getPropertyAsFunction(runtime, "__tickleJs"); - func.call(runtime); + thread_->runOnQueue([&runtime = runtime_]() { + auto func = + runtime->global().getPropertyAsFunction(*runtime, "__tickleJs"); + func.call(*runtime); }); } @@ -193,7 +196,7 @@ std::unique_ptr HermesExecutorFactory::createJSExecutor( std::shared_ptr jsQueue) { std::unique_ptr hermesRuntime = makeHermesRuntimeSystraced(runtimeConfig_); - HermesRuntime& hermesRuntimeRef = *hermesRuntime; + HermesRuntime &hermesRuntimeRef = *hermesRuntime; auto decoratedRuntime = std::make_shared( makeTracingHermesRuntime(std::move(hermesRuntime), runtimeConfig_), hermesRuntimeRef, diff --git a/ReactCommon/hermes/inspector/Inspector.cpp b/ReactCommon/hermes/inspector/Inspector.cpp index 607a5ca9e4e..8ab8e8643aa 100644 --- a/ReactCommon/hermes/inspector/Inspector.cpp +++ b/ReactCommon/hermes/inspector/Inspector.cpp @@ -108,12 +108,13 @@ Inspector::Inspector( InspectorObserver &observer, bool pauseOnFirstStatement) : adapter_(adapter), - debugger_(adapter->getRuntime().getDebugger()), + debugger_(adapter->getDebugger()), observer_(observer), executor_(std::make_unique("hermes-inspector")) { // TODO (t26491391): make tickleJs a real Hermes runtime API - const char *src = "function __tickleJs() { return Math.random(); }"; - adapter->getRuntime().debugJavaScript(src, "__tickleJsHackUrl", {}); + std::string src = "function __tickleJs() { return Math.random(); }"; + adapter->getRuntime().evaluateJavaScript( + std::make_shared(src), "__tickleJsHackUrl"); { std::lock_guard lock(mutex_); diff --git a/ReactCommon/hermes/inspector/RuntimeAdapter.cpp b/ReactCommon/hermes/inspector/RuntimeAdapter.cpp index 2b720b01630..ce0baa79ada 100644 --- a/ReactCommon/hermes/inspector/RuntimeAdapter.cpp +++ b/ReactCommon/hermes/inspector/RuntimeAdapter.cpp @@ -16,15 +16,20 @@ RuntimeAdapter::~RuntimeAdapter() = default; void RuntimeAdapter::tickleJs() {} SharedRuntimeAdapter::SharedRuntimeAdapter( - std::shared_ptr runtime) - : runtime_(std::move(runtime)) {} + std::shared_ptr runtime, + debugger::Debugger &debugger) + : runtime_(std::move(runtime)), debugger_(debugger) {} SharedRuntimeAdapter::~SharedRuntimeAdapter() = default; -HermesRuntime &SharedRuntimeAdapter::getRuntime() { +jsi::Runtime &SharedRuntimeAdapter::getRuntime() { return *runtime_; } +debugger::Debugger &SharedRuntimeAdapter::getDebugger() { + return debugger_; +} + } // namespace inspector } // namespace hermes } // namespace facebook diff --git a/ReactCommon/hermes/inspector/RuntimeAdapter.h b/ReactCommon/hermes/inspector/RuntimeAdapter.h index b8a075dae8a..bfe32c98329 100644 --- a/ReactCommon/hermes/inspector/RuntimeAdapter.h +++ b/ReactCommon/hermes/inspector/RuntimeAdapter.h @@ -24,8 +24,9 @@ class RuntimeAdapter { public: virtual ~RuntimeAdapter() = 0; - /// getRuntime should return the Hermes runtime encapsulated by this adapter. - virtual HermesRuntime &getRuntime() = 0; + /// getRuntime should return the runtime encapsulated by this adapter. + virtual jsi::Runtime &getRuntime() = 0; + virtual debugger::Debugger &getDebugger() = 0; /// tickleJs is a method that subclasses can choose to override to make the /// inspector more responsive. If overridden, it should call the "__tickleJs" @@ -50,13 +51,17 @@ class RuntimeAdapter { */ class SharedRuntimeAdapter : public RuntimeAdapter { public: - SharedRuntimeAdapter(std::shared_ptr runtime); + SharedRuntimeAdapter( + std::shared_ptr runtime, + debugger::Debugger &debugger); virtual ~SharedRuntimeAdapter(); - HermesRuntime &getRuntime() override; + jsi::Runtime &getRuntime() override; + debugger::Debugger &getDebugger() override; private: - std::shared_ptr runtime_; + std::shared_ptr runtime_; + debugger::Debugger &debugger_; }; } // namespace inspector diff --git a/ReactCommon/hermes/inspector/chrome/Connection.cpp b/ReactCommon/hermes/inspector/chrome/Connection.cpp index 8fa7b3633ed..f67f780fc7f 100644 --- a/ReactCommon/hermes/inspector/chrome/Connection.cpp +++ b/ReactCommon/hermes/inspector/chrome/Connection.cpp @@ -48,7 +48,7 @@ class Connection::Impl : public inspector::InspectorObserver, bool waitForDebugger); ~Impl(); - HermesRuntime &getRuntime(); + jsi::Runtime &getRuntime(); std::string getTitle() const; bool connect(std::unique_ptr remoteConn); @@ -151,7 +151,7 @@ Connection::Impl::Impl( Connection::Impl::~Impl() = default; -HermesRuntime &Connection::Impl::getRuntime() { +jsi::Runtime &Connection::Impl::getRuntime() { return runtimeAdapter_->getRuntime(); } @@ -617,7 +617,7 @@ Connection::Impl::makePropsFromValue( std::vector result; if (value.isObject()) { - HermesRuntime &runtime = getRuntime(); + jsi::Runtime &runtime = getRuntime(); jsi::Object obj = value.getObject(runtime); // TODO(hypuk): obj.getPropertyNames only returns enumerable properties. @@ -768,7 +768,7 @@ Connection::Connection( Connection::~Connection() = default; -HermesRuntime &Connection::getRuntime() { +jsi::Runtime &Connection::getRuntime() { return impl_->getRuntime(); } diff --git a/ReactCommon/hermes/inspector/chrome/Connection.h b/ReactCommon/hermes/inspector/chrome/Connection.h index ffcf805389a..d8c0fe3197e 100644 --- a/ReactCommon/hermes/inspector/chrome/Connection.h +++ b/ReactCommon/hermes/inspector/chrome/Connection.h @@ -32,7 +32,7 @@ class Connection { ~Connection(); /// getRuntime returns the underlying runtime being debugged. - HermesRuntime &getRuntime(); + jsi::Runtime &getRuntime(); /// getTitle returns the name of the friendly name of the runtime that's shown /// to users in Nuclide. diff --git a/ReactCommon/hermes/inspector/chrome/MessageConverters.cpp b/ReactCommon/hermes/inspector/chrome/MessageConverters.cpp index 288cc333992..015d5521c3a 100644 --- a/ReactCommon/hermes/inspector/chrome/MessageConverters.cpp +++ b/ReactCommon/hermes/inspector/chrome/MessageConverters.cpp @@ -59,7 +59,7 @@ m::debugger::CallFrame m::debugger::makeCallFrame( const h::debugger::CallFrameInfo &callFrameInfo, const h::debugger::LexicalInfo &lexicalInfo, RemoteObjectsTable &objTable, - HermesRuntime &runtime, + jsi::Runtime &runtime, const facebook::hermes::debugger::ProgramState &state) { m::debugger::CallFrame result; @@ -115,7 +115,7 @@ m::debugger::CallFrame m::debugger::makeCallFrame( std::vector m::debugger::makeCallFrames( const h::debugger::ProgramState &state, RemoteObjectsTable &objTable, - HermesRuntime &runtime) { + jsi::Runtime &runtime) { const h::debugger::StackTrace &stackTrace = state.getStackTrace(); uint32_t count = stackTrace.callFrameCount(); diff --git a/ReactCommon/hermes/inspector/chrome/MessageConverters.h b/ReactCommon/hermes/inspector/chrome/MessageConverters.h index b8a606b56bb..6d7f2a2608f 100644 --- a/ReactCommon/hermes/inspector/chrome/MessageConverters.h +++ b/ReactCommon/hermes/inspector/chrome/MessageConverters.h @@ -98,13 +98,13 @@ CallFrame makeCallFrame( const facebook::hermes::debugger::CallFrameInfo &callFrameInfo, const facebook::hermes::debugger::LexicalInfo &lexicalInfo, facebook::hermes::inspector::chrome::RemoteObjectsTable &objTable, - HermesRuntime &runtime, + jsi::Runtime &runtime, const facebook::hermes::debugger::ProgramState &state); std::vector makeCallFrames( const facebook::hermes::debugger::ProgramState &state, facebook::hermes::inspector::chrome::RemoteObjectsTable &objTable, - HermesRuntime &runtime); + jsi::Runtime &runtime); } // namespace debugger diff --git a/ReactCommon/hermes/inspector/chrome/cli/main.cpp b/ReactCommon/hermes/inspector/chrome/cli/main.cpp index 2e35953fb44..18ed974dd4f 100644 --- a/ReactCommon/hermes/inspector/chrome/cli/main.cpp +++ b/ReactCommon/hermes/inspector/chrome/cli/main.cpp @@ -214,8 +214,8 @@ static void runDebuggerLoop( static void runScript(const std::string &scriptSource, const std::string &url) { std::shared_ptr runtime( fbhermes::makeHermesRuntime()); - auto adapter = - std::make_unique(runtime); + auto adapter = std::make_unique( + runtime, runtime->getDebugger()); fbhermes::inspector::chrome::Connection conn( std::move(adapter), "hermes-chrome-debug-server"); std::thread debuggerLoop(runDebuggerLoop, std::ref(conn), scriptSource); diff --git a/ReactCommon/hermes/inspector/chrome/tests/ConnectionDemuxTests.cpp b/ReactCommon/hermes/inspector/chrome/tests/ConnectionDemuxTests.cpp index df404162e18..52173027ea6 100644 --- a/ReactCommon/hermes/inspector/chrome/tests/ConnectionDemuxTests.cpp +++ b/ReactCommon/hermes/inspector/chrome/tests/ConnectionDemuxTests.cpp @@ -98,9 +98,11 @@ TEST(ConnectionDemuxTests, TestEnableDisable) { ConnectionDemux demux{*inspector}; int id1 = demux.enableDebugging( - std::make_unique(runtime1), "page1"); + std::make_unique(runtime1, runtime1->getDebugger()), + "page1"); int id2 = demux.enableDebugging( - std::make_unique(runtime2), "page2"); + std::make_unique(runtime2, runtime2->getDebugger()), + "page2"); expectPages(*inspector, {{id1, "page1"}, {id2, "page2"}}); diff --git a/ReactCommon/hermes/inspector/chrome/tests/SyncConnection.cpp b/ReactCommon/hermes/inspector/chrome/tests/SyncConnection.cpp index 7e10eb7c65f..d30b044d216 100644 --- a/ReactCommon/hermes/inspector/chrome/tests/SyncConnection.cpp +++ b/ReactCommon/hermes/inspector/chrome/tests/SyncConnection.cpp @@ -54,7 +54,9 @@ class SyncConnection::RemoteConnnection : public IRemoteConnection { SyncConnection::SyncConnection(std::shared_ptr runtime) : connection_( - std::make_unique(std::move(runtime)), + std::make_unique( + runtime, + runtime->getDebugger()), "testConn") { connection_.connect(std::make_unique(*this)); } diff --git a/ReactCommon/hermes/inspector/tests/InspectorTests.cpp b/ReactCommon/hermes/inspector/tests/InspectorTests.cpp index b43d5e176af..680625844bf 100644 --- a/ReactCommon/hermes/inspector/tests/InspectorTests.cpp +++ b/ReactCommon/hermes/inspector/tests/InspectorTests.cpp @@ -93,7 +93,9 @@ struct HermesDebugContext { folly::Future &&finished) : runtime(makeHermesRuntime()), inspector( - std::make_shared(runtime), + std::make_shared( + runtime, + runtime->getDebugger()), observer, false), stopFlag(false),