diff --git a/dm/src/display_manager.cpp b/dm/src/display_manager.cpp index f9d6092606383196c88dd2b49f2c5ad318d43cb8..b51c1cb5b36005337d326c69dde5fbed5798341b 100644 --- a/dm/src/display_manager.cpp +++ b/dm/src/display_manager.cpp @@ -30,6 +30,8 @@ namespace OHOS::Rosen { namespace { constexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_DISPLAY, "DisplayManager"}; + const static uint32_t MAX_RETRY_NUM = 6; + const static uint32_t RETRY_WAIT_MS = 500; const static uint32_t MAX_DISPLAY_SIZE = 32; const static uint32_t MAX_INTERVAL_US = 5000; } @@ -471,10 +473,22 @@ sptr DisplayManager::Impl::GetDefaultDisplaySync() } } - auto displayInfo = SingletonContainer::Get().GetDefaultDisplayInfo(); - if (displayInfo == nullptr) { + uint32_t retryTimes = 0; + sptr displayInfo = nullptr; + while (retryTimes < MAX_RETRY_NUM) { + displayInfo = SingletonContainer::Get().GetDefaultDisplayInfo(); + if (displayInfo != nullptr) { + break; + } + retryTimes++; + WLOGFW("Current get display info is null, retry %{public}u times", retryTimes); + std::this_thread::sleep_for(std::chrono::microseconds(RETRY_WAIT_MS)); + } + if (retryTimes >= MAX_RETRY_NUM || displayInfo == nullptr) { + WLOGFE("Get display info failed, please check whether the onscreenchange event is triggered"); return nullptr; } + auto displayId = displayInfo->GetDisplayId(); std::lock_guard lock(mutex_); if (!UpdateDisplayInfoLocked(displayInfo)) { diff --git a/interfaces/kits/napi/display_runtime/js_display_manager.cpp b/interfaces/kits/napi/display_runtime/js_display_manager.cpp index b63937b998f8118b2e54fcc6baf5a092292c9190..27923222e78e58b5aaf3c86fdb819adbdf8d989f 100644 --- a/interfaces/kits/napi/display_runtime/js_display_manager.cpp +++ b/interfaces/kits/napi/display_runtime/js_display_manager.cpp @@ -175,7 +175,7 @@ napi_value OnGetDefaultDisplaySync(napi_env env, napi_callback_info info) HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "Sync:GetDefaultDisplay"); sptr display = SingletonContainer::Get().GetDefaultDisplaySync(); if (display == nullptr) { - WLOGFE("OnGetDefaultDisplaySync, display is nullptr."); + WLOGFE("[NAPI]Display info is nullptr, js error will be happen"); napi_throw(env, CreateJsError(env, static_cast(DmErrorCode::DM_ERROR_INVALID_SCREEN))); return NapiGetUndefined(env); }