mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
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:
committed by
Facebook GitHub Bot
parent
934af0c59e
commit
509abff063
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user