From 5ae556a90f55fc0a21f1cfaf8fa41129ba7e1928 Mon Sep 17 00:00:00 2001 From: ZhangYu Date: Wed, 7 Feb 2024 06:37:27 +0000 Subject: [PATCH] fix the uv_loop in the previewer. Signed-off-by: ZhangYu Change-Id: I3bb613625621b25575d5eb36cc42c38f6f21b62b --- adapter/preview/entrance/ace_container.cpp | 3 +++ .../engine/jsi/jsi_declarative_engine.h | 4 +++- frameworks/bridge/js_frontend/engine/common/js_engine.cpp | 6 ++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/adapter/preview/entrance/ace_container.cpp b/adapter/preview/entrance/ace_container.cpp index 935ddf5b0e9..7ef6da94446 100644 --- a/adapter/preview/entrance/ace_container.cpp +++ b/adapter/preview/entrance/ace_container.cpp @@ -213,6 +213,9 @@ void AceContainer::InitializeFrontend() void AceContainer::RunNativeEngineLoop() { taskExecutor_->PostTask([frontend = frontend_]() { frontend->RunNativeEngineLoop(); }, TaskExecutor::TaskType::JS); + // After the JS thread executes frontend ->RunNativeEngineLoop(), + // it is thrown back into the Platform thread queue to form a loop. + taskExecutor_->PostTask([this]() { RunNativeEngineLoop(); }, TaskExecutor::TaskType::PLATFORM); } void AceContainer::InitializeAppConfig(const std::string& assetPath, const std::string& bundleName, diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.h b/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.h index 5a9ebdd341f..d54f1277438 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.h +++ b/frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.h @@ -363,7 +363,9 @@ public: void RunNativeEngineLoop() override { - if (nativeEngine_ != nullptr) { + static bool hasPendingExpection = false; + if (nativeEngine_ && !hasPendingExpection) { + hasPendingExpection = nativeEngine_->HasPendingException(); nativeEngine_->Loop(LOOP_NOWAIT, false); } } diff --git a/frameworks/bridge/js_frontend/engine/common/js_engine.cpp b/frameworks/bridge/js_frontend/engine/common/js_engine.cpp index 49c697c6d32..5487db3f867 100644 --- a/frameworks/bridge/js_frontend/engine/common/js_engine.cpp +++ b/frameworks/bridge/js_frontend/engine/common/js_engine.cpp @@ -27,7 +27,9 @@ namespace OHOS::Ace::Framework { void JsEngine::RunNativeEngineLoop() { - if (nativeEngine_ != nullptr) { + static bool hasPendingExpection = false; + if (nativeEngine_ && !hasPendingExpection) { + hasPendingExpection = nativeEngine_->HasPendingException(); nativeEngine_->Loop(LOOP_NOWAIT, false); } } @@ -68,4 +70,4 @@ PixelMapNapiEntry JsEngine::GetPixelMapNapiEntry() } #endif -} // namespace OHOS::Ace::Framework \ No newline at end of file +} // namespace OHOS::Ace::Framework -- Gitee