diff --git a/packages/react-native/React/CxxBridge/JSCExecutorFactory.h b/packages/react-native/React/CxxBridge/JSCExecutorFactory.h index 902b44e7049645..42b0e5ca403c44 100644 --- a/packages/react-native/React/CxxBridge/JSCExecutorFactory.h +++ b/packages/react-native/React/CxxBridge/JSCExecutorFactory.h @@ -16,12 +16,23 @@ class JSCExecutorFactory : public JSExecutorFactory { explicit JSCExecutorFactory(JSIExecutor::RuntimeInstaller runtimeInstaller) : runtimeInstaller_(std::move(runtimeInstaller)) {} + void setEnableDebugger(bool enableDebugger); + + void setDebuggerName(const std::string &debuggerName); + std::unique_ptr createJSExecutor( std::shared_ptr delegate, std::shared_ptr jsQueue) override; private: JSIExecutor::RuntimeInstaller runtimeInstaller_; + +#if DEBUG + bool enableDebugger_ = true; +#else + bool enableDebugger_ = false; +#endif + std::string debuggerName_ = "JSC React Native"; }; } // namespace facebook::react diff --git a/packages/react-native/React/CxxBridge/JSCExecutorFactory.mm b/packages/react-native/React/CxxBridge/JSCExecutorFactory.mm index 6173ae5ccffac4..b1f45278d93b9a 100644 --- a/packages/react-native/React/CxxBridge/JSCExecutorFactory.mm +++ b/packages/react-native/React/CxxBridge/JSCExecutorFactory.mm @@ -13,12 +13,22 @@ namespace facebook::react { +void JSCExecutorFactory::setEnableDebugger(bool enableDebugger) { + enableDebugger_ = enableDebugger; +} + +void JSCExecutorFactory::setDebuggerName(const std::string &debuggerName) { + debuggerName_ = debuggerName; +} + std::unique_ptr JSCExecutorFactory::createJSExecutor( std::shared_ptr delegate, std::shared_ptr __unused jsQueue) { - return std::make_unique( - facebook::jsc::makeJSCRuntime(), delegate, JSIExecutor::defaultTimeoutInvoker, runtimeInstaller_); + facebook::jsc::RuntimeConfig rc = { + .enableDebugger = enableDebugger_, + .debuggerName = debuggerName_, + }; + return std::make_unique(facebook::jsc::makeJSCRuntime(std::move(rc)), delegate, JSIExecutor::defaultTimeoutInvoker, runtimeInstaller_); } - } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/jsc/JSCRuntime.cpp b/packages/react-native/ReactCommon/jsc/JSCRuntime.cpp index 34f43c0c08e9a0..7dae0d768c8223 100644 --- a/packages/react-native/ReactCommon/jsc/JSCRuntime.cpp +++ b/packages/react-native/ReactCommon/jsc/JSCRuntime.cpp @@ -36,6 +36,8 @@ class JSCRuntime : public jsi::Runtime { public: // Creates new context in new context group JSCRuntime(); + // Creates new context in new context group with config + JSCRuntime(const facebook::jsc::RuntimeConfig& rc); // Retains ctx JSCRuntime(JSGlobalContextRef ctx); ~JSCRuntime(); @@ -361,6 +363,17 @@ JSCRuntime::JSCRuntime() JSGlobalContextRelease(ctx_); } +JSCRuntime::JSCRuntime(const facebook::jsc::RuntimeConfig& rc) + : JSCRuntime() { +#ifdef _JSC_HAS_INSPECTABLE + if (__builtin_available(macOS 13.3, iOS 16.4, tvOS 16.4, *)) { + JSGlobalContextSetInspectable(ctx_, rc.enableDebugger); + } +#endif + JSGlobalContextSetName(ctx_, JSStringCreateWithUTF8CString(rc.debuggerName.c_str())); + +} + JSCRuntime::JSCRuntime(JSGlobalContextRef ctx) : ctx_(JSGlobalContextRetain(ctx)), ctxInvalid_(false) @@ -1565,5 +1578,9 @@ std::unique_ptr makeJSCRuntime() { return std::make_unique(); } +std::unique_ptr makeJSCRuntime(const facebook::jsc::RuntimeConfig& rc) { + return std::make_unique(rc); +} + } // namespace jsc } // namespace facebook diff --git a/packages/react-native/ReactCommon/jsc/JSCRuntime.h b/packages/react-native/ReactCommon/jsc/JSCRuntime.h index 1d6b2259fcdbe2..bc0157ab0e6b57 100644 --- a/packages/react-native/ReactCommon/jsc/JSCRuntime.h +++ b/packages/react-native/ReactCommon/jsc/JSCRuntime.h @@ -13,7 +13,14 @@ namespace facebook { namespace jsc { +struct RuntimeConfig { + bool enableDebugger; + std::string debuggerName; +}; + std::unique_ptr makeJSCRuntime(); +std::unique_ptr makeJSCRuntime(const facebook::jsc::RuntimeConfig& rc); + } // namespace jsc } // namespace facebook