Extend earlyjs c++ pipeline for soft errors (#46893)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46893

Before, the c++ pipeline only supported fatal errors.

Now, it supports soft errors!

Changelog: [Internal]

Reviewed By: javache

Differential Revision: D63927090

fbshipit-source-id: ddaad0ea9b4aa1f889b24ca388cd6b9b1c83adba
This commit is contained in:
Ramanpreet Nara
2024-10-10 16:03:02 -07:00
committed by Facebook GitHub Bot
parent 934af0c59e
commit 509abff063
3 changed files with 15 additions and 15 deletions
@@ -91,16 +91,19 @@ JsErrorHandler::JsErrorHandler(JsErrorHandler::OnJsError onJsError)
JsErrorHandler::~JsErrorHandler() {}
void JsErrorHandler::handleFatalError(
void JsErrorHandler::handleError(
jsi::Runtime& runtime,
jsi::JSError& error) {
jsi::JSError& error,
bool isFatal) {
// TODO: Current error parsing works and is stable. Can investigate using
// REGEX_HERMES to get additional Hermes data, though it requires JS setup.
_hasHandledFatalError = true;
if (isFatal) {
_hasHandledFatalError = true;
}
if (_isRuntimeReady) {
try {
handleJSError(runtime, error, true);
handleJSError(runtime, error, isFatal);
return;
} catch (jsi::JSError& e) {
LOG(ERROR)
@@ -175,7 +178,7 @@ void JsErrorHandler::handleFatalError(
.componentStack = componentStack,
.stack = stackFrames,
.id = id,
.isFatal = true,
.isFatal = isFatal,
.extraData = std::move(extraData),
};
@@ -43,7 +43,7 @@ class JsErrorHandler {
explicit JsErrorHandler(OnJsError onJsError);
~JsErrorHandler();
void handleFatalError(jsi::Runtime& runtime, jsi::JSError& error);
void handleError(jsi::Runtime& runtime, jsi::JSError& error, bool isFatal);
bool hasHandledFatalError();
void setRuntimeReady();
bool isRuntimeReady();
@@ -84,7 +84,7 @@ ReactInstance::ReactInstance(
}
}
} catch (jsi::JSError& originalError) {
jsErrorHandler->handleFatalError(jsiRuntime, originalError);
jsErrorHandler->handleError(jsiRuntime, originalError, true);
}
});
}
@@ -129,7 +129,7 @@ ReactInstance::ReactInstance(
RuntimeSchedulerClock::now,
[jsErrorHandler = jsErrorHandler_](
jsi::Runtime& runtime, jsi::JSError& error) {
jsErrorHandler->handleFatalError(runtime, error);
jsErrorHandler->handleError(runtime, error, true);
});
runtimeScheduler_->setPerformanceEntryReporter(
// FIXME: Move creation of PerformanceEntryReporter to here and guarantee
@@ -422,14 +422,11 @@ void ReactInstance::initializeRuntime(
return jsi::Value(false);
}
if (isFatal) {
auto jsError = jsi::JSError(
runtime, wrapInErrorIfNecessary(runtime, args[0]));
jsErrorHandler->handleFatalError(runtime, jsError);
return jsi::Value(true);
}
auto jsError = jsi::JSError(
runtime, wrapInErrorIfNecessary(runtime, args[0]));
jsErrorHandler->handleError(runtime, jsError, isFatal);
return jsi::Value(false);
return jsi::Value(true);
}));
defineReadOnlyGlobal(