From 1a381f172550c32abdcc3083d18dfa22cbe25616 Mon Sep 17 00:00:00 2001 From: hubijie Date: Mon, 4 Aug 2025 17:00:00 +0800 Subject: [PATCH] =?UTF-8?q?updateRect=E5=92=8CConnect=E4=BF=9D=E5=BA=8F=20?= =?UTF-8?q?Signed-off-by:=20hubijie=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interfaces/innerkits/wm/wm_common.h | 30 +++++++++++++++++++ .../common/include/window_session_property.h | 4 +++ .../common/src/window_session_property.cpp | 11 +++++++ .../session/host/src/scene_session.cpp | 7 +++++ .../session/host/src/zidl/session_proxy.cpp | 6 ++++ .../session/host/src/zidl/session_stub.cpp | 2 ++ wm/src/window_session_impl.cpp | 6 ++-- 7 files changed, 63 insertions(+), 3 deletions(-) diff --git a/interfaces/innerkits/wm/wm_common.h b/interfaces/innerkits/wm/wm_common.h index 12ed3f2a47..d9b1001c2c 100644 --- a/interfaces/innerkits/wm/wm_common.h +++ b/interfaces/innerkits/wm/wm_common.h @@ -2851,6 +2851,36 @@ struct ShadowsInfo : public Parcelable { } }; +/** + * @struct ShadowsInfo + * + * @brief window shadows info + */ + struct MissionInfo : public Parcelable { + bool startupInvisiblity_ = false; + + MissionInfo() {} + MissionInfo(bool startupInvisiblity) : startupInvisiblity_(startupInvisiblity) {} + + bool Marshalling(Parcel& parcel) const override + { + if (!parcel.WriteBool(startupInvisiblity_)) { + return false; + } + return true; + } + + static MissionInfo* Unmarshalling(Parcel& parcel) + { + MissionInfo* missionInfo = new MissionInfo(); + if (!parcel.ReadBool(missionInfo->startupInvisiblity_)) { + delete missionInfo; + return nullptr; + } + return missionInfo; + } + } + /** * @brief Enumerates session state of recent session */ diff --git a/window_scene/common/include/window_session_property.h b/window_scene/common/include/window_session_property.h index 8d4f365f3f..e5e392e2f6 100755 --- a/window_scene/common/include/window_session_property.h +++ b/window_scene/common/include/window_session_property.h @@ -270,6 +270,8 @@ public: */ void SetUseControlStateToProperty(bool isUseControlState); bool GetUseControlStateFromProperty() const; + void SetMissionInfo(const MissionInfo& missionInfo); + MissionInfo GetMissionInfo() const; /* * UIExtension @@ -567,6 +569,8 @@ private: */ mutable std::mutex lifecycleUseControlMutex_; bool isUseControlState_ = false; + MissionInfo missionInfo_; + mutable std::mutex missionInfoMutex_; /* * Window Property diff --git a/window_scene/common/src/window_session_property.cpp b/window_scene/common/src/window_session_property.cpp index 1be48fa0f4..ad9627b76f 100755 --- a/window_scene/common/src/window_session_property.cpp +++ b/window_scene/common/src/window_session_property.cpp @@ -2526,6 +2526,17 @@ void CompatibleModeProperty::CopyFrom(const sptr& proper isAdaptToSimulationScale_= property->isAdaptToSimulationScale_; } +void WindowSessionProperty::SetMissionInfo(const MissionInfo& missionInfo) +{ + std::lock_guard lock(missionInfoMutex_); + missionInfo_ = missionInfo; +} +MissionInfo WindowSessionProperty::GetMissionInfo() const +{ + std::lock_guard lock(missionInfoMutex_); + return missionInfo_; +} + bool WindowSessionProperty::MarshallingWindowAnchorInfo(Parcel& parcel) const { return parcel.WriteParcelable(&windowAnchorInfo_); diff --git a/window_scene/session/host/src/scene_session.cpp b/window_scene/session/host/src/scene_session.cpp index 1a97ff89f7..76a929a570 100644 --- a/window_scene/session/host/src/scene_session.cpp +++ b/window_scene/session/host/src/scene_session.cpp @@ -44,6 +44,7 @@ #endif // DEVICE_STATUS_ENABLE #include "interfaces/include/ws_common.h" #include "pixel_map.h" +#include "process_options.h" #include "rs_adapter.h" #include "session_coordinate_helper.h" #include "session/screen/include/screen_session.h" @@ -153,6 +154,12 @@ WSError SceneSession::ConnectInner(const sptr& sessionStage, property->SetCollaboratorType(session->GetCollaboratorType()); property->SetAppInstanceKey(session->GetAppInstanceKey()); property->SetUseControlStateToProperty(session->isAppUseControl_); + MissionInfo missionInfo; + if (session->GetSessionInfo().processOptions != nullptr) { + missionInfo.startupInvisiblity_ = session->GetSessionInfo().processOptions->startupInvisiblity == + AAFwk::StartupVisibility::STARTUP_HIDE; + } + property->SetMissionInfo(missionInfo); } session->RetrieveStatusBarDefaultVisibility(); auto ret = LOCK_GUARD_EXPR(SCENE_GUARD, session->Session::ConnectInner( diff --git a/window_scene/session/host/src/zidl/session_proxy.cpp b/window_scene/session/host/src/zidl/session_proxy.cpp index c24d689d22..1bae7197b4 100644 --- a/window_scene/session/host/src/zidl/session_proxy.cpp +++ b/window_scene/session/host/src/zidl/session_proxy.cpp @@ -336,6 +336,12 @@ WSError SessionProxy::Connect(const sptr& sessionStage, const spt property->SetPcAppInpadOrientationLandscape(reply.ReadBool()); property->SetCompatibleModeProperty(reply.ReadParcelable()); property->SetUseControlStateToProperty(reply.ReadBool()); + sptr missionInfo = reply.ReadParcelable(); + if (missionInfo == nullptr) { + TLOGE(WmsLogTag::WMS_LIFE, "Read missionInfo failed"); + return WSError::WS_ERROR_IPC_FAILED; + } + property->SetMissionInfo(*missionInfo); } int32_t ret = reply.ReadInt32(); return static_cast(ret); diff --git a/window_scene/session/host/src/zidl/session_stub.cpp b/window_scene/session/host/src/zidl/session_stub.cpp index a4a8fc15f5..cd7613f82a 100644 --- a/window_scene/session/host/src/zidl/session_stub.cpp +++ b/window_scene/session/host/src/zidl/session_stub.cpp @@ -504,6 +504,8 @@ int SessionStub::HandleConnect(MessageParcel& data, MessageParcel& reply) reply.WriteBool(property->GetPcAppInpadOrientationLandscape()); reply.WriteParcelable(property->GetCompatibleModeProperty()); reply.WriteBool(property->GetUseControlStateFromProperty()); + MissionInfo missionInfo = property->GetMissionInfo(); + reply.WriteParcelable(&missionInfo); } reply.WriteUint32(static_cast(errCode)); return ERR_NONE; diff --git a/wm/src/window_session_impl.cpp b/wm/src/window_session_impl.cpp index a0b8ed8c6b..697ced5bcf 100644 --- a/wm/src/window_session_impl.cpp +++ b/wm/src/window_session_impl.cpp @@ -74,7 +74,7 @@ constexpr uint32_t API_VERSION_MOD = 1000; constexpr int32_t WINDOW_ROTATION_CHANGE = 20; constexpr uint32_t INVALID_TARGET_API_VERSION = 0; constexpr uint32_t OPAQUE = 0xFF000000; -constexpr int32_t WINDOW_CONNECT_TIMEOUT = 3000; +constexpr int32_t WINDOW_CONNECT_TIMEOUT = 1000; constexpr int32_t WINDOW_LIFECYCLE_TIMEOUT = 100; /* @@ -672,7 +672,7 @@ WMError WindowSessionImpl::Connect() iSessionStage, iWindowEventChannel, surfaceNode_, windowSystemConfig_, property_, token, identityToken_); if (SysCapUtil::GetBundleName() != AppExecFwk::Constants::SCENE_BOARD_BUNDLE_NAME && - WindowHelper::IsMainWindow(GetType())) { + WindowHelper::IsMainWindow(GetType()) && !property_->GetMissionInfo().startupInvisiblity_) { auto startTime = std::chrono::duration_cast( std::chrono::system_clock::now().time_since_epoch()).count(); updateRectCallback_->GetUpdateRectResult(WINDOW_CONNECT_TIMEOUT); @@ -7108,7 +7108,7 @@ void WindowSessionImpl::NotifyWindowStatusDidChange(WindowMode mode) void WindowSessionImpl::NotifyFirstValidLayoutUpdate(const Rect& preRect, const Rect& newRect) { bool isFirstValidLayoutUpdate = true; - if (preRect.IsUninitializedSize() && !newRect.IsUninitializedSize() && + if (!newRect.IsUninitializedSize() && isFirstValidLayoutUpdate_.compare_exchange_strong(isFirstValidLayoutUpdate, false)) { updateRectCallback_->OnFirstValidRectUpdate(GetPersistentId()); TLOGI(WmsLogTag::WMS_LAYOUT, "Id:%{public}d, rect:%{public}s", GetPersistentId(), newRect.ToString().c_str()); -- Gitee